关于内置函数输入的返回值的混淆

时间:2016-03-07 04:16:47

标签: python

问题在于:

  

你驾驶的速度有点太快,一名警察阻止你。编写代码来计算结果,编码为int值:0 =没有票,1 =小票,2 =大票。如果速度为60或更低,则结果为0.如果速度在61和80之间,则结果为1.如果速度为81或更高,则结果为2.除非是您当天的生日,否则您的速度可以在案件中高出5。

我的代码:

speed = int(input());
birthday = input();

if (not birthday):
    if (speed <= 60):
        print(0);
    elif (speed >= 61 and speed <= 80):
        print(1);
    elif (speed >= 81):
        print(2);
elif (birthday):
    if (speed >= 61 and speed <= 65):
        print(0);
    elif (speed >= 81 and speed <= 85):
        print(1);

这是输出:

我做错了什么?

4 个答案:

答案 0 :(得分:4)

当你收到input()的输入时,你得到的不是布尔值,正如你在这里假设的那样,而是一个字符串。因此,您应该检查

if (birthday == "True")

elif (birthday == "False")

答案 1 :(得分:0)

当前birthday是一个字符串,所以当你说if not birthday时,Python会逐字检查以确保该字符串存在,并且当它确实存在时,它会运行elif语句。你需要说出类似birthday = bool(input())的内容,并让用户输入0或1.另外,在不相关的注释中,Python在每个语句的末尾不需要分号 - 实际上它们非常不受欢迎。此外,在输入中包含一些内容,例如speed = int(input("How fast were you driving?: ")),这样用户就不必神奇地知道他们放入了什么。此外,if语句中的括号也是不必要的。最后,不要说elif birthday:,而应该说else:,因为很明显,如果它不是假的话,那就是真的。

答案 2 :(得分:0)

最简单的方法是,如果是生日,则从速度中减去5。

birthdayValue = {True: 5, False: 0}
speed = int(input("Speed: "))
birthday = input("Birthday (True/False): ")
speed -= birthdayValue[birthday == 'True']
if speed <= 60:
    print(0)
elif 60 < speed <= 80:
    print(1)
elif 80 < speed <= 85:
    print(2)

答案 3 :(得分:0)

在python 3中,input返回一个字符串,您应该在接受之前验证该字符串。对于生日,你需要决定你对输入内容的严格程度,并编写代码来强制执行。如果输入为“True”或“False”但您可以将人们搞乱案例或添加一些空格,那么这样就可以了

speed = int(input())
birthday = input().strip().lower()

# valiate input
if speed < 0:
    print("Speed must be > 0")
    exit(1)
if birthday == 'true':
    birthday = True
elif birthday == 'false':
    birthday = False
else:
    print("Birthday must be True or False")
    exit(1)

# give 'em a break on their birthday
if birthday:
    speed -= 5

# calculate points
if (speed <= 60):
    print(0)
elif (speed >= 61 and speed <= 80):
    print(1)
else:
    print(2)