2014-08-29 48 views
1

我做了一個簡單的程序,用戶添加儘可能多的數字,然後鍵入'退出'來停止它並打印總數,但有時它說,將字符串轉換爲整數失敗,有時它轉換,但隨後有錯誤的出認沽例如I型1 + 1,但它打印1不一致的字符串整數錯誤和響應

def addition(): 
    x = 0 
    y = 1 
    total = 0 

    while x < y: 
     total += int(input()) 

     if input() == "exit": 
      x += 1 

    print(total) 

addition() 

我已經tryed將其轉換爲浮動,然後爲int,但仍然有不一致之處,我今天開始學習python,並且發現來自C++/c#/ Java的語法很難,所以請儘量簡單地對錯誤

+0

你試過用raw_input代替輸入嗎? – 2014-08-29 21:31:46

+0

我不能使用raw_input,因爲我使用python 3 – Tom 2014-08-29 21:33:07

+0

@Tom當你沒有爲它定義任何輸入時,你如何使用你的函數? – Dalek 2014-08-29 21:33:20

回答

2

也許這是你在找什麼:

def addition(): 
    total = 0 

    while True: 
     value = input() 

     if value == "exit": 
      break 
     else: 
      try: 
       total += int(value) 
      except: 
       print('Please enter in a valid integer') 

    print(total) 

編輯


有兩個原因的代碼無法正常工作:

首先,它失敗的原因是因爲你試圖把「exit」這個詞作爲一個整數。

二,如user2357112指出,有兩個輸入調用。第二個輸入呼叫無意中跳過了輸入的所有其他號碼。您只需要輸入一個輸入,然後將輸入的值設置爲一個變量。

+0

一樣有效這不是問題。有兩個'輸入'調用,而''exit''的檢查默默跳過每一個數字。您已將其更改爲只有一個「輸入」呼叫。 – user2357112 2014-08-29 22:42:48

+0

@ user2357112有趣的是,我沒有意識到這一點;感謝您指出了這一點。我會在答覆中更新我的評論,說明未來的觀點。 – Wondercricket 2014-08-30 14:02:24

1

您可以打破while循環,不使用xy

def addition(): 
    total = 0 
    while True: 
     total += int(input()) 
     if input() == "exit": 
      break 

    print(total) 

addition() 
+0

感謝您的提示,但並未解決不一致問題 – Tom 2014-08-29 21:29:53

+0

您應該使用'raw_input'來替代,存儲結果並對其進行處理。當轉換爲「int」失敗時,您還應該捕獲「ValueError」異常。 – Vincent 2014-08-29 21:31:41

+0

@Vincent OP可能使用Python 3.x,在這種情況下'input()'與'raw_input()' – shaktimaan 2014-08-29 21:34:44

0

這是幾個方法可以提高代碼:

  1. 永遠運行循環,打破它只有當用戶輸入「退出」
  2. 要知道,當用戶輸入「退出」檢查輸入具有字母與isalpha()

使上述變化:

def addition(): 
    total = 0 
    while True: 
     user_input = input() 
     if user_input.strip().isalpha() and user_input.strip() == 'exit': 
      break 
     total += int(user_input) 

    print(total) 

addition() 
+0

看起來像[LBYL](https://docs.python.org/2/glossary.html#term-lbyl)。您應該考慮[EAFP](https://docs.python.org/2/glossary.html#term-eafp)。 – Vincent 2014-08-29 21:40:31

+0

@Vincent感謝您的鏈接,我以前沒有見過。但通過閱讀,我不知道我怎麼能在這裏應用它。我會爭辯說,「如果」條件實際上是在總結輸入之前測試前提條件。你能幫我理解我錯在哪裏嗎? – shaktimaan 2014-08-29 21:44:07

+0

好吧,你知道將一個無效字符串轉換爲int會引發一個'ValueError',所以你可以使用類似'try:total + = int(user_input)的東西,除了ValueError:if user_input =='exit':break'。 – Vincent 2014-08-29 21:52:31

0
def safe_float(val): 
    ''' always return a float ''' 
    try: 
     return float(val) 
    except ValueError: 
     return 0.0 

def getIntOrQuit(): 
    resp = input("Enter a number or (q)uit:") 
    if resp == "Q": 
     return None 
    return safe_float(resp) 


print(sum(iter(getIntOrQuit,None))) 

是另一種做你想做的事情的方法:P

相關問題