Использование ввода параметров вне функции в python

#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 = in checkinput ничего не меняет 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 и программировании в целом, но я надеюсь, что я помог.