2016-10-10 21 views
-2

我正在爲大學的作業寫風寒指數的代碼。 教授希望我們能夠防止代碼在用戶輸入空白或字母時崩潰,而不使用Try/Except Blocks。 (他只提到字符串方法)。使用字符串而不是嘗試/除了防止崩潰 - 如何?

而不是崩潰它應該出了一個錯誤信息,例如。 (「無效輸入,只有數字」)

我試過使用string.isdigit和string.isnumeric,但它不會接受負整數的度數。

有什麼建議嗎? (代碼如下) 另一個「if」語句是否工作?

This is the code so far.

+0

也許刪除'-'了'.isdigit' ...'userstr.replace之前( ' - ', '')ISDIGIT()' – beroe

+0

。你不應該編輯這樣的問題,如果問題得到解決,將其標記爲答案,然後提出一個新問題。如果您繼續編輯並更改所要求的內容,則會弄亂網站。另外,人們不喜歡「實時寫博客」功課,他們傾向於投票。 – beroe

+0

@beroe說什麼。編輯功能應該用來澄清你的問題並添加更多細節。請不要濫用它來問一個不同的問題。我現在已經回滾了編輯。 – Kos

回答

0

更換標點符號:

if temperature.replace('-','').replace('.','').isnumeric(): 
+0

有人倒投我的帖子,所以我不能要求一個單獨的問題...你認爲你可以回答嗎? –

0

使用一個無限循環,並檢查一切似乎是正確的。 每當出現錯誤時,請使用continue語句。當所有檢查和轉換完成後,使用break語句。

import re 
import sys 
while True: 
    print("Temperature") 
    s = sys.stdin.readline().rstrip('\n') 
    if re.match("^-?[0-9]+(\\.[0-9]+)?$", s) is None: 
     print("Doesn't look like a number") 
     continue 
    if '.' in s: 
     print("Number will be truncated to integer.") 
    temp = int(float(s)) 
    if not (-50 <= temp <= 5): 
     print("Out of range") 
     continue 
    break 
+0

感謝您的快速響應,但我的問題指定不使用Try/Except塊。 –

+0

猜猜它太快了。您可以使用正則表達式而不是string.isnumeric()。 「^ - ?[0-9] +(\\。[0-9] +)?$」應該做的竅門,它也允許一個小數點。 –

+0

我更新了我的問題,更具體些。它必須不接受非數字,而是顯示錯誤消息。另一個「如果」的陳述將不得不被正確使用? –