Как остановить мой игровой код Python, чтобы закрыть сразу после строки 3-4?

Я только начал учиться программировать три дня назад. Решил изучить 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 закрывается после ввода имени пользователя.

Он закрывается, потому что ваш код не вызывает ни одну из функций после получения имени пользователя.

meowgoesthedog 23.01.2019 14:24

Вы не вызываете ни одну из функций, которые вы определяете после ввода

Cubic 23.01.2019 14:24

Спасибо вам всем за то, что вы были такими полезными и дружелюбными к новичкам!

Dung Chi Pham 24.01.2019 01:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
326
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

def game(choice): создает функцию с именем game. вам нужно указать python выполнить эту функцию с одним параметром: choice вот так: game(usn)

Аргументом choice должен быть выбор пользователя: камень, ножницы или бумага, а не имя пользователя.

AKX 23.01.2019 14:25

Первая проблема заключается в том, что вы не вызываете какую-либо функцию после получения имени пользователя. Я бы попробовал что-то вроде этого (обратите внимание, что я добавил некоторые комментарии к коду):

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

Большое спасибо, что поправили меня! Я научился на таком опыте :)

Dung Chi Pham 24.01.2019 01:55
Ответ принят как подходящий

Вам также нужно вызвать game, хотя в этот момент необходимо объявить game.

Здесь я немного отрефакторил некоторые вещи и сделал их немного более удобными для пользователя.

  • Имена аргументов, используемые в game, — username и user_choice, чтобы не затенять глобальные имена (или использовать их случайно).
  • Рекурсивная функция again() заменена циклом while, который breaked из, когда пользователь говорит, что не хочет играть снова.
  • Входные данные RPS и снова вопроса прописаны в нижнем регистре и разделены, поэтому пользователь, вводящий, скажем, «NO», «nO», «pAPeR» и т. д., работает.

Следующее, о чем я бы рекомендовал подумать, это как упростить повторение в функции 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 Каждый хоть раз был нубом. :)

AKX 24.01.2019 06:39

Другие вопросы по теме