使用以下代码时:
url = None
print("For 'The Survey of Cornwall,' press 1")
print("For 'The Adventures of Sherlock Holmes,' press 2")
print("For 'Pride and Prejudice,' press 3")
n = input("Which do you choose?")
if n==1:
url = 'http://www.gutenberg.org/cache/epub/9878/pg9878.txt' #cornwall
print("cornwall")
elif n==2:
url = 'http://www.gutenberg.org/cache/epub/1661/pg1661.txt' #holmes
print("holmes)
elif n==3:
url = 'http://www.gutenberg.org/cache/epub/1342/pg1342.txt' #pap
print("PaP")
else:
print("That was not one of the choices")
我只是将“其他”案件归还,为什么会这样?
答案 0 :(得分:4)
input()
在py3x中返回一个字符串。因此,您需要先将其转换为int
。
n = int(input("Which do you choose?"))
演示:
>>> '1' == 1
False
>>> int('1') == 1
True
答案 1 :(得分:3)
input()
返回一个字符串,但您将其与整数进行比较。您可以使用int()
函数将输入结果转换为整数。
答案 2 :(得分:1)
你应该用int()转换输入
n = input("Which do you choose?")
应为n = int(input("Which do you choose?"))
这是因为输入返回所有输入的字符串,因为它几乎总是有效。
答案 3 :(得分:1)
我猜你正在使用Python 3,其中input
在Python 2中表现得像raw_input
,也就是说,它将输入值作为字符串返回。在Python中,'1'不等于1.你必须使用n = int(n)
将输入字符串转换为int,然后通过你的连续elifs。
答案 4 :(得分:1)
input()返回一个字符串类型。因此,您需要使用int()将输入转换为整数,否则您可以将输入与字符进行比较而不是整数,例如“1”,“2”。
答案 5 :(得分:1)
虽然其他答案正确地确定了您在当前代码中获得else
块的原因,但我想建议一个更加“Pythonic”的替代实现。而不是一堆嵌套的if
/ elif
语句,使用字典查找,它可以支持任意键(包括可能比整数更有意义的键):
book_urls = {'cornwall': 'http://www.gutenberg.org/cache/epub/9878/pg9878.txt',
'holmes': 'http://www.gutenberg.org/cache/epub/1661/pg1661.txt',
'p and p': 'http://www.gutenberg.org/cache/epub/1342/pg1342.txt'}
print("For 'The Survey of Cornwall,' type 'cornwall'")
print("For 'The Adventures of Sherlock Holmes,' type 'holmes'")
print("For 'Pride and Prejudice,' type 'p and p'")
choice = input("Which do you choose?") # no conversion, we want a string!
try:
url = book_urls[choice]
except KeyError:
print("That was not one of the choices")
url = None
如果你愿意的话,你可以把整个事情做成数据驱动,将书名和网址作为一个函数的参数提供给用户,让用户选择一个(不知道他们提前做了什么)。 / p>