2013-05-12 29 views
1

在使用下面的代碼:使用IF/ELIF /別的一個「開關」,在蟒蛇

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

python版本? – 2013-05-12 04:26:18

+3

另外,''holmes'後面還有一個引用,只是讓你知道, – 2013-05-12 04:28:03

回答

4

input()在py3x中返回一個字符串。所以,你需要先將它轉換成int

n = int(input("Which do you choose?")) 

演示:

>>> '1' == 1 
False 
>>> int('1') == 1 
True 
+0

很酷,謝謝你們,在定時器到期時選擇這個作爲答案! – Deivore 2013-05-12 04:33:11

+0

另外,如果你只是想要一個字符串轉換爲int),你應該使用'raw_input'。'input'是不安全的,因爲它對用戶輸入的內容運行'eval'。 – sapi 2013-05-12 04:51:37

+1

@sapi OP是通過py3x而不是py2x,'raw_input'已被重命名爲'輸入'在py3x中 – 2013-05-12 05:11:48

1

你應該輸入轉換爲int() n = input("Which do you choose?")n = int(input("Which do you choose?")) 這是由於輸入字符串返回所有輸入,因爲它應該總是工作的事實。

3

input()返回一個字符串,但您將它與整數進行比較。您可以使用int()函數將輸入的結果轉換爲整數。

1

我猜你正在使用Python 3,其中input行爲就像raw_input在Python 2一樣,也就是說,它返回輸入值作爲一個字符串。在Python中,'1'不等於1.您必須使用n = int(n)將輸入字符串轉換爲int,然後通過您的elifs繼承。

1

input()返回一個字符串類型。因此,您需要使用int()將輸入轉換爲整數,否則您可以將輸入與字符而不是整數進行比較,如'1','2'。

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 

你可以把整個事情的數據驅動的,如果你想,書名和url被作爲一個函數的參數提供,這個函數會要求用戶選擇一個(不知道他們提前做了什麼)。