使用if / elif / else进行"开关"在python中

时间:2013-05-12 04:24:28

标签: python

使用以下代码时:

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")

我只是将“其他”案件归还,为什么会这样?

6 个答案:

答案 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>