2016-01-22 43 views
0

一直在這一整天,並沒有取得任何進展,它肯定應該很簡單,但我是Python的新手。谷歌並沒有提出太多,所以這是我的最後一招!循環 - 輸入要列出的數字,不允許按字母順序輸入,按enter鍵即可。

它應該是一些基本的代碼,用於將數值手動放入列表中。如果我在腳本中添加一個「打印」行,我可以看到這些值正在成功輸入,但我似乎無法通過將輸入留空而添加正確的腳本來突破循環。目前,如果我設置了任何內容以使其中斷,腳本似乎在運行時凍結,並且必須完全重置控制檯。

另外我想知道有沒有一種方法來確保輸入總是一個整數?如果用戶輸入任何非數字內容,那麼使事情變得更清潔並提出錯誤消息或某事是件好事。

這是代碼。

values = [] 
while True: 
    a = raw_input('Enter numeric values. Leave blank to stop: ') 
    if a == (??????) : 
     break 
values.append(float(a)) 

謝謝!

+0

如果你能做出一個字符串你可以這樣做: if(a ==「」)並在else子句中將該字符串轉換爲浮點值 – ivan

回答

4

您可以限制到只有數字與

if a.isdigit(): 

所以你的功能可能看起來像

def accept_inputs(): 
    values = [] 
    while True:  
     a = raw_input('Enter numeric values. Leave blank to stop: ') 
     if a.isdigit(): 
      values.append(float(a)) 
     if not a: 
      return values 

測試

>>> accept_inputs() 
Enter numeric values. Leave blank to stop: 5 
Enter numeric values. Leave blank to stop: 42 
Enter numeric values. Leave blank to stop: 73 
Enter numeric values. Leave blank to stop: ab 
Enter numeric values. Leave blank to stop: abc 
Enter numeric values. Leave blank to stop: 
[5, 42, 73] 
0

字符串有一個內置的功能isdigit()如果返回true所有的字符都是數字。

如果沒有輸入任何內容,可以使用len()函數來檢測字符串是否爲空。

More info here

你的代碼應該是這樣的:

if a.isdigit(): 
    #keep going, and add it to the list 
elif len(a) == 0: 
     break #stop the loop 
+0

是的,我這樣做,謝謝你的提升。 –

+0

更強大的解決方案是使用'isdigit'。因爲諸如標點符號之類的東西會通過'isalpha',但不是有效的數字,並且在嘗試轉換爲'float'時會拋出異常 – CoryKramer

0

我的做法是類似於@CoryKramer,有小的變化

>>> values = [] 
>>> while True: 
     val = raw_input('Enter Number : ') 
     if not val: 
      print values 
     elif val.isdigit(): 
      values.append(int(val)) 
     else: 
      print 'you have entered non - digit value' 

Enter Number : 2 
Enter Number : a 
you have entered non - digit value 
Enter Number : 3 
Enter Number : 5 
Enter Number : 6 
Enter Number : 22 
Enter Number : 546 
Enter Number : 31s 
you have entered non - digit value 
Enter Number : 345678 
Enter Number : 
>>> values 
[2, 3, 5, 6, 22, 546, 345678]