Как обновить переменную в нескольких функциях: игра в Powerball

#python #global

#python #глобальный

Вопрос:

Новичок в Python, но учится изо всех сил и пытается использовать хорошие практики. Надеюсь, кто-нибудь сможет указать мне правильное направление для моей программы на Python: powerball. Это между компьютером и пользователем, где каждый выбирает 3 уникальных (не дублирующихся) числа между 1-9 и номером powerball между 1-3. Я хотел добавить переменную money, которая была бы разделена между функцией main () (которая сообщает вам «добро пожаловать» и «ваши текущие деньги: (деньги)»), а также разделена между функцией compare_winnings() , которая сравнивает мои два списка и добавляет сумму к (денежная) переменная.

Я провел некоторое исследование через Google и SO и обнаружил, что размещение моей переменной money вне каждой функции превращает ее в «глобальную переменную», что кажется полезным, поскольку оно будет использоваться в 2 функциях. Я также узнал, что использование синтаксиса «global» является плохой практикой. Однако код выполняется нормально, и в функции compare_winnings() деньги обновляются. Когда игра запрашивает вас, хотите ли вы сыграть еще раз (другая функция), она запускается заново, и деньги возвращаются к своему первоначальному значению. (который начинается с 20).

 def main():
  print("Each ticket costs $1. Your winnings will be totaled. Current money is",money, "dollars." )
  start = input("n Are you ready? [y/n]: ")

  if start == "y" or start == "yes":      
    #erased variables for legibility; gathers numbers from computer and user
    compare_winnings(actual, chosen,cpb, comp_cpb,money)
  else: 
    play_again()
  
 def compare_winnings(actual, chosen, cpb, comp_cpb,money):
  counter = 0
  print("You chose: ", chosen) #user-inputted
  print("Ticket was actually: ", actual) #random (actual)

  same_values = set(actual) amp; set(chosen)
  #print ("These are the values that are the same",same_values)
  if len(same_values) > 0:
    counter  = len(same_values)
    print("Numbers correct was : ",counter)

    if counter == 1 and cpb != comp_cpb :
      print("You won $1")
      money  = 1
      print("total money is:", money)
      play_again()
  
 def play_again():
  play = input("Do you want to play again? ")
  if play == "y" or play == "yes":
    main()
  else: 
    print("Program will exit. Thanks for playing.")
  

Я ожидаю, что переменная money будет обновляться (и сохраняться) до тех пор, пока они не решат прекратить играть в игру. Однако, похоже, он перезапускается, когда они решают сыграть снова и / или в main().

Комментарии:

1. Объявите переменную вне любой из функций. Объявите их как глобальные в стороне от функций с global variable_name

2. Мне стало известно, что использование «глобального» для использования переменных вне многих функций было плохой вещью. Есть ли другой способ?

3. В вашем случае вы сохраняете состояние своей программы (которое является глобальным) в этих переменных. Таким образом, использование global — это прямой подход. Существует тонкая грань между использованием global , потому что это имеет смысл, и злоупотреблением global , чтобы избежать передачи аргументов функциям. Рассматривайте это в каждом конкретном случае. Используйте свое суждение. На этот счет нет жестких правил.