if语句未触发(python)

2024-09-30 20:37:32 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,如果已经有人问过了,我很抱歉。 我正在尝试编写一个简单的彩票模拟程序(用于学习) 不知何故,我的if语句不会触发,因此无论用户输入什么,程序都使用第二个if语句,而不是第一个if语句(您赢了)

非常感谢您的快速回答!没想到这么多人这么快就能帮上忙。我们找到了解决办法

代码如下:

import random

lottonumbers = []
lottonumbers = list(range(1,51))

lottonumbersro = random.sample(lottonumbers, 6) #right ones

print(lottonumbersro)

active = True

while active:
    userinput = input('your numbers')

    if userinput == lottonumbersro:
        print('you won', lottonumbersro)
        active = False
        break

    if userinput != lottonumbersro:
        print('no luck today', lottonumbersro)
        active = False
        break

print('why isn\'t this stuff working')

Tags: 用户程序falseifrandom语句active模拟程序
3条回答

您必须将输入从str转换为int。此外lottonumbersro是一个列表,因此与userinput的相等性检查将产生False。因此,您还需要检查输入是否包含在lottonumbersro中,而不是检查是否相等

其他问题是f.i.如果变量activeFalse,则while循环结束,而在if语句中将变量aktiv设置为false,或者将activebreak设置为循环。只需要一个

while active:
    userinput = int(input('your numbers'))

    if userinput in lottonumbersro:
        print('you won', lottonumbersro)
        active = False
        break

    if not userinput in lottonumbersro:
        print('no luck today', lottonumbersro)
        active = False
        break

您还可以简化代码:

while active:
    userinput = int(input('your numbers'))

    if userinput in lottonumbersro:
        print('you won', lottonumbersro)
    else:
        print('no luck today', lottonumbersro)
    active = False

我想你不明白你到底在比较什么。我将假设您正在输入一个由6个数字组成的字符串?因此,现在,您可以:

[14, 41, 27, 49, 42, 17]
your numbers: 1 14 32 45 47
no luck today [14, 41, 27, 49, 42, 17]
why isn't this working

这是因为您拥有的userinput变量包含一个str类型,并且您正在将其与list类型进行比较。我们要做的是把这个输入str变成list{}

您可以尝试在while循环中添加类似的内容:

while active:

    userinput = input('your numbers: ')

    user_numbers = [int(number) for number in userinput.split()]

    if user_numbers == lottonumbersro:
        print('you won', lottonumbersro)
        active = False
        break

    if user_numbers != lottonumbersro:
        print('no luck today', lottonumbersro)
        active = False
        break

注意列表理解如何用于将str转换为int中的list。现在,当你尝试比较时,它应该可以很好地工作

[13, 20, 16, 12, 11, 50]
your numbers: 13 20 16 12 11 50
you won [13, 20, 16, 12, 11, 50]

请注意,只有当输入字符串是仅由空格分隔的数字时,此解决方案才有效。如果要考虑逗号之类的内容,则需要更改逻辑。您可以通过修改行来执行此操作:

user_numbers = [int(number) for number in userinput.split()]

与其他人提到的问题相同,但解决方案不同。您可以将乐透号码转换为str,然后对照该input检查。这需要输入某种格式(# # # # # #),但检查用户输入是否与6个数字完全匹配

import random

lottonumbers = []
lottonumbers = list(range(1,51))

lottonumbersro = random.sample(lottonumbers, 6) #right ones

stringed = [str(i) for i in lottonumbersro]
stringed = ' '.join(stringed)
print(stringed)

active = True

while active:
    userinput = input('your numbers\n')

    if userinput == stringed:
        print('you won', lottonumbersro)
        break
    
    if userinput != stringed:
        print('no luck today', lottonumbersro)
        break

相关问题 更多 >