Я только начал учиться программировать три дня назад. Решил изучить Python версии 3.7.2. Сегодня я написал этот код, пытаясь создать игру, в которой вы вводите имя пользователя и играете в камень, ножницы, бумагу против бота. Однако сразу после того, как я ввожу свое имя пользователя (строка 2-4), оболочка Python закрывается. Я запускаю программу, щелкнув файл в «Моем проводнике» в Windows 10. Полагаю, это простая ошибка новичка, может кто-нибудь помочь?
Я попытался добавить input() в строку 4. Когда я это делаю, оболочка Python не закрывается после ввода имени пользователя. Он ничего не делает, просто новая строка. И когда я набираю что-то в этой новой строке и нажимаю Enter, оболочка закрывается.
Вот мой код:
import random
print('Hello, welcome to Rock, Paper, Scissors. Enter your name to get started.')
usn = input()
def game(choice):
options = ['rock', 'paper', 'scissors']
bot = random.choice(options)
if choice == 'rock' and bot == 'scissors':
print(usn + ' played rock, I played scissors. You won. Nice!')
elif choice == 'rock' and bot == 'paper':
print(usn + ' played rock, I played paper. You lost. Haha, loser!')
elif choice == 'paper' and bot == 'scissors':
print(usn + ' played paper, I played scissors. You lost. Haha, loser!')
elif choice == 'paper' and bot == 'rock':
print(usn + ' played paper, I played rock. You won. Nice!')
elif choice == 'scissors' and bot == 'paper':
print(usn + ' played scissors, I played paper. You won. Nice!')
elif choice == 'scissors' and bot == 'rocks':
print(usn + ' played scissors, I played rocks. You lost. Haha, loser!')
elif choice == bot:
print("It's a draw, dang it!")
def again(x):
while True:
if x == 'Yes':
game(input('Rock, Paper or Scissors?'))
again(input('Want to play again? Yes or No'))
else:
print('Goodbye. Press Enter to exit.')
input()
Ожидаемый: я ожидал, что после того, как я введу имя пользователя, я смогу ввести камень, бумагу или ножницы, и тогда игра запустится. Фактический результат: оболочка Python закрывается после ввода имени пользователя.
Вы не вызываете ни одну из функций, которые вы определяете после ввода
Спасибо вам всем за то, что вы были такими полезными и дружелюбными к новичкам!






def game(choice): создает функцию с именем game. вам нужно указать python выполнить эту функцию с одним параметром: choice
вот так: game(usn)
Аргументом choice должен быть выбор пользователя: камень, ножницы или бумага, а не имя пользователя.
Первая проблема заключается в том, что вы не вызываете какую-либо функцию после получения имени пользователя. Я бы попробовал что-то вроде этого (обратите внимание, что я добавил некоторые комментарии к коду):
import random
print('Hello, welcome to Rock, Paper, Scissors. Enter your name to get started.')
usn = input()
def game(choice):
options = ['rock', 'paper', 'scissors']
bot = random.choice(options)
if choice == 'rock' and bot == 'scissors':
print(usn + ' played rock, I played scissors. You won. Nice!')
elif choice == 'rock' and bot == 'paper':
print(usn + ' played rock, I played paper. You lost. Haha, loser!')
elif choice == 'paper' and bot == 'scissors':
print(usn + ' played paper, I played scissors. You lost. Haha, loser!')
elif choice == 'paper' and bot == 'rock':
print(usn + ' played paper, I played rock. You won. Nice!')
elif choice == 'scissors' and bot == 'paper':
print(usn + ' played scissors, I played paper. You won. Nice!')
elif choice == 'scissors' and bot == 'rocks':
print(usn + ' played scissors, I played rocks. You lost. Haha, loser!')
elif choice == bot:
print("It's a draw, dang it!")
# Taking this out of the function, it is going to be called right on the execution
x = 'Yes'
while True: #here you are doing an loop, that will only end when break is called
if x == 'Yes':
game(input('Rock, Paper or Scissors?'))
x = input('Want to play again? Yes or No')
else:
print('Goodbye. Press Enter to exit.')
input()
break
Большое спасибо, что поправили меня! Я научился на таком опыте :)
Вам также нужно вызвать game, хотя в этот момент необходимо объявить game.
Здесь я немного отрефакторил некоторые вещи и сделал их немного более удобными для пользователя.
game, — username и user_choice, чтобы не затенять глобальные имена (или использовать их случайно).again() заменена циклом while, который breaked из, когда пользователь говорит, что не хочет играть снова.Следующее, о чем я бы рекомендовал подумать, это как упростить повторение в функции game. :)
import random
def game(username, user_choice):
options = ['rock', 'paper', 'scissors']
bot = random.choice(options)
if user_choice == 'rock' and bot == 'scissors':
print(username + ' played rock, I played scissors. You won. Nice!')
elif user_choice == 'rock' and bot == 'paper':
print(username + ' played rock, I played paper. You lost. Haha, loser!')
elif user_choice == 'paper' and bot == 'scissors':
print(username + ' played paper, I played scissors. You lost. Haha, loser!')
elif user_choice == 'paper' and bot == 'rock':
print(username + ' played paper, I played rock. You won. Nice!')
elif user_choice == 'scissors' and bot == 'paper':
print(username + ' played scissors, I played paper. You won. Nice!')
elif user_choice == 'scissors' and bot == 'rocks':
print(username + ' played scissors, I played rocks. You lost. Haha, loser!')
elif user_choice == bot:
print("It's a draw, dang it!")
print('Hello, welcome to Rock, Paper, Scissors. Enter your name to get started.')
name = input()
while True: # do forever, unless `break`ed out of (or an exception occurs)
choice = input('Rock, Paper or Scissors?').lower().strip()
game(name, choice)
if input('Want to play again? Yes or No').lower().strip() == 'no':
print('Goodbye. Press Enter to exit.')
input()
break # break out of the "while true" loop
@DungChiPham Каждый хоть раз был нубом. :)
Он закрывается, потому что ваш код не вызывает ни одну из функций после получения имени пользователя.