问题描述
所以,我正在尝试创建一个简单的彩票机,它可以一直选择号码直到您中奖。我选择我的彩票号码 (my_number),然后将其与我使用“pick_driving_numbers”功能挑选的 4 个可能的中奖号码列表 (wining_numbers) 进行比较强>”。
我已经设置了一个 while 循环,它会一直运行直到标志等于 True。这是由函数“比较数字”设置的,除了它从不改变标志。无论什么while循环总是保持运行。
我试过把 if 语句从函数中去掉,我试过把 while 循环去掉,我试过重写代码 5 次。这些都没有帮助。请帮助我,因为我在这件事上花了很多时间。代码如下。
from random import choice
def pick_winning_numbers():
#puts 4 numbers into a list and makes sure that they arent duplicates
while len(winning_numbers) <4:
chosen_number = choice(possible_numbers)
if chosen_number not in winning_numbers:
winning_numbers.append(chosen_number)
def compare_numbers():
#Compares the number that I picked to the list of winning numbers and sets the flag to true or false
if my_number in winning_numbers:
print(f"Congratulations,you have won")
flag = False
else:
flag = True
possible_numbers = [1,2,3,4,5,6,7,8,9]
my_number = 7
winning_numbers = []
counter = 0
flag = True
while flag == True:
pick_winning_numbers()
print(winning_numbers)
compare_numbers()
print(flag)
解决方法
问题是数组 wining_numbers 总是存储相同的元素。因此,如果数组 wining_numbers 不包含中奖号码 7,程序将循环。
每次循环运行时,您都必须清除 wining_numbers 数组。
你应该这样做:
def pick_winning_numbers():
global winning_numbers
winning_numbers = []
while len(winning_numbers) <4:
chosen_number = choice(possible_numbers)
if chosen_number not in winning_numbers:
winning_numbers.append(chosen_number)
有必要在方法内部使用 global win_numbers,如果不这样做,数组 wining_numbers 将成为方法的一部分(作为局部变量)和不是来自整个代码。
同样在 compare_numbers()
方法中,您必须将 flag
变量添加为全局变量:
def compare_numbers():
global flag
if my_number in winning_numbers:
print(f"Congratulations,you have won")
flag = False
else:
flag = True