首页 > 解决方案 > 不正确的 if-else 语句

问题描述

我一直在尝试编写一个函数,该函数将要求输入 1-11 之间的数字,并随机选择一个数字并在它们之间进行比较。我不明白为什么无论我输入什么数字(等于或更小或更大),它总是会输入“你的数字少”消息。

def loto():
    _number = int(input("Enter any number between 1-10: "))
    import random
    for x in range(1):
        print ("Python chose: " + str(random.randint(1,11)))
    if ("_number" == "random"):
        print ("You Won! :)")
    if ("_number" < "random"):
        print ("Your number is less")
    if ("_number" > "random"):
        print ("Your number is more")
    else:
        print ("You Lost :(")

loto()

我正在使用 Python 3。

谢谢:)

标签: pythonpython-3.xif-statement

解决方案


您的第一个问题是您正在比较字符串"_number""random". ASCIIbetically(或者,更确切地说,Unicoderifically),"_number" < "random"因为_字符是#95,r字符是#114。

如果要比较两个变量,只需引用变量,而不是恰好与这些变量名称相同的字符串。

您的第二个问题random不是您的随机数,而是您用来创建该数字的模块。而且,更严重的是,您并没有将该数字存储在任何地方——您只是将其转换为字符串以将其打印出来,然后将其丢弃。

您的第三个问题是您需要将那些ifs 更改为elifs。否则,只要不为真,而不是仅当所有三个比较都不为真时,You Lost就会打印消息。_number > random

把所有这些放在一起:

choice = random.randint(1,11)
for x in range(1):
    print ("Python chose: " + str(choice))
if (_number == choice):
    print ("You Won! :)")
elif (_number < choice):
    print ("Your number is less")
elif (_number > choice):
    print ("Your number is more")
else:
    print ("You Lost :(")

当然,没有办法真正输掉你的比赛——三个条件之一总是成立的。(如果您使用的是复数或包括 NaN 在内的浮点数,您可以输入一个与所选数字在任何方面都无法比较的数字,但您不能。)


当我们这样做时:

  • 没有理由将变量命名_numbernumber.
  • 那个for x in range(1):循环没有做任何有用的事情——它只循环一次,设置x为 0,你永远不会使用它。
  • 您的条件不需要括号。
  • 你不应该在这样的函数中间导入模块,除非在特殊情况下你需要不寻常的东西,比如延迟加载。
  • 你应该遵循 PEP 8 风格,或者至少选择一个一致的风格来遵循。
  • 将多个参数传递给print或使用字符串格式比手动将内容转换为字符串并将它们连接起来更简单。

所以:

import random

def loto():
    number = int(input("Enter any number between 1-10: "))
    choice = random.randint(1, 11)
    print("Python chose:", choice)
    if number == choice:
        print("You Won! :)")
    elif number < choice:
        print("Your number is less")
    elif number > choice:
        print("Your number is more")
    else:
        print("You Lost :(")

loto()

推荐阅读