繁体   English   中英

我在使用 IF 语句将变量设置为 True 和 False 时遇到问题

[英]I am having trouble with an IF statement setting a variable to True and False

所以,我正在尝试创建一个简单的彩票机,它会一直选择号码直到你中奖。 我 select 我的彩票号码( my_number ),然后将其与我使用 function “ pick_winning_numbers ”选择的 4 个可能的中奖号码列表( winning_numbers )进行比较。

我已经设置了一个 while 循环,它一直运行到标志等于 True。 这是由 function“比较数字”设置的,只是它从不更改标志。 不管什么,while 循环总是保持运行。

我尝试从 function 中取出 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)

问题是数组winning_numbers总是存储相同的元素。 因此,如果数组winning_numbers不包含中奖号码7 ,程序将循环。

每次循环工作时,您都必须清除winning_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)

有必要在方法中使用全局winning_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM