#python #function #variables #parameters
#python #функция #переменные #параметры
Вопрос:
На прошлой неделе я начал немного изучать Python (используя Pycharm). Используя несколько веб-сайтов и видео на YouTube, я медленно, но верно изучаю основы. Чтобы бросить себе вызов, я пытаюсь сделать себе игру «камень, ножницы, бумага». Игра состоит из 2 игроков, вводящих свою «руку».
Я изо всех сил хочу проверить, соответствует ли их ввод моему списку под названием «параметры», используя функцию checkinput () Проблема: когда активируется функция checkinput() и активируется цикл while (т.Е. Камень, ножницы или бумага не указаны в параметрах). Следующий ‘whichhand = input (…)’, похоже, не сохраняет входные данные в запрошенную переменную, которая будет ‘handp1’ или ‘handp2’.
Что я делаю не так?
Заранее большое спасибо!
print("Welcome to Rock, Paper or Scissors!")
options = ["rock", "paper", "scissors"]
namep1 = input("Player 1, what is your name? ")
namep2 = input("Player 2, what is your name? ")
def placeyourbets():
global handp1
global handp2
handp1 = input("Okay " namep1 ", enter your hand (Rock, Paper or Scissors): ")
checkinput(handp1, namep1)
handp2 = input("Okay " namep2 ", enter your hand (Rock, Paper or Scissors): ")
checkinput(handp2, namep2)
return handp1, handp2
def checkinput(whichhand, whichname):
while whichhand.lower() not in options:
print("Error!nEnter 'rock', 'paper' or 'scissors'.")
whichhand = input("Okay " whichname ", enter your hand (Rock, Paper or Scissors): ")
placeyourbets()
Комментарии:
1. При вызове
checkinput(handp1, namep1)
вы передаете ссылки на значения, на которые ссылаются эти идентификаторы, а не на идентификаторы.whichhand =
incheckinput
ничего не меняетplaceyourbets
. Я бы рекомендовал прочитать, например nedbatchelder.com/text/names.html .
Ответ №1:
Хорошо, у меня такой же опыт, так что отнеситесь ко всему, что я говорю, с недоверием.
Я посмотрел на ваш код и, обдумав то, чего вы пытаетесь достичь, я нашел решение.
print("Welcome to Rock, Paper or Scissors!")
options = ["rock", "paper", "scissors"]
name_p_1 = input("Player 1, what is your name? ")
name_p_2 = input("Player 2, what is your name? ")
def place_your_bets():
hand_p_1 = input(f"Okay {name_p_1}, enter your hand (Rock, Paper or Scissors): ")
hand_p_1 = check_input(hand_p_1, name_p_1)
hand_p_2 = input(f"Okay {name_p_2}, enter your hand (Rock, Paper or Scissors): ")
hand_p_2 = check_input(hand_p_2, name_p_2)
return hand_p_1, hand_p_2
def check_input(which_hand, which_name):
while which_hand.lower() not in options:
print("Error! Invalid input."
"nTry again, enter 'Rock', 'Paper' or 'Scissors'.")
which_hand = input(f"Okay {which_name}, enter your hand (Rock, Paper or Scissors): ")
return which_hand
choice_player_1, choice_player_2 = place_your_bets()
print(choice_player_1)
print(choice_player_2)
Я переименовал переменные так, как привык работать, но это не имеет никакого отношения к решению.
Итак, первое, что я сделал, это удалил глобальный тег для hand_p_1
и hand_p_2
, потому что, честно говоря, я не был уверен, что именно он выполняет.
Во-вторых, и самое главное, я заметил, что в вашей checkinput
функции нет return
строки, что в основном приводит к исчезновению вводимых вами данных после завершения функции
И, наконец, способ выполнения palceyourbets
функции не сохраняет входные данные, поэтому я добавил две переменные, choice_player_1
choice_player_2
которые хранят возвращаемые значения этой функции
Как я уже сказал, я новичок в python и программировании в целом, но я надеюсь, что я помог.