#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
, чтобы избежать передачи аргументов функциям. Рассматривайте это в каждом конкретном случае. Используйте свое суждение. На этот счет нет жестких правил.