【问题标题】:I am having trouble with an IF statement setting a variable to True and False我在将变量设置为 True 和 False 的 IF 语句时遇到问题
【发布时间】:2021-02-04 21:03:31
【问题描述】:

所以,我正在尝试创建一个简单的彩票机,它会一直选择号码直到您中奖。我选择了我的彩票号码 (my_number),然后将其与我使用函数“pick_winning_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)

【问题讨论】:

    标签: python if-statement while-loop flags choice


    【解决方案1】:

    问题在于数组 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)
    

    必须在方法中使用 globalwinning_numbers,如果你不这样做,数组 winning_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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多