下面寫一個程序,這個程序接受用戶的輸入一個的正整數,然后與預設的一個正整數數比較,給出比較結果。
其中用戶輸入和預設的正整數范圍是[0,10).
answer = 5
guess = int (input ('請輸入一個[0,10)范圍的正整數:'))
if (guess == answer):
print ('恭喜!猜對了!')
else:
print ('很遺憾!猜錯了!')
int()
將輸入的字符串格式的數字更改為數字格式的數字。
下面兩個執行示例,其中第一次猜對了,第二次猜錯了:
$ python guess_number_v1.py
請輸入一個[0,10)范圍的正整數:5
恭喜!猜對了!
$ python guess_number_v1.py
請輸入一個[0,10)范圍的正整數:2
很遺憾!猜錯了!
但是,如果用戶不輸入數字會怎樣呢?
$ python guess_number_v1.py
請輸入一個[0,10)范圍的正整數:q
Traceback (most recent call last):
File "guess_number_v1.py", line 3, in <module>
guess = int (input ('請輸入一個[0,10)范圍的正整數:'))
ValueError: invalid literal for int() with base 10: 'q'
當用戶輸入一個q
的時候,int()
不能正確工作,于是給出了錯誤。
遺憾的是,在int()
出錯后,python給出錯誤提示,程序直接終止。這個錯誤提示可能對程序員有用,展示了程序編寫的錯誤,卻沒有給用戶提供幫助。
可以使用try...except
結構來捕獲并處理錯誤:
try:
執行語句塊
except:
try語句塊執行時出錯后,執行此語句塊
python會執行try
語句塊中的內容,如果在執行過程中發生錯誤(異常),那么會跳出try
語句塊,執行except
語句塊中的內容。如果一切正常,則不會執行except
語句塊中的內容。
將程序改寫成下面的樣子:
answer = 5
guess = input ('請輸入一個[0,10)范圍的正整數:')
try:
guess = int (guess)
except:
print ('對不起,您輸入的不是整數。')
exit ()
if (guess == answer):
print ('恭喜!猜對了!')
else:
print ('很遺憾!猜錯了!')
我們在程序中添加了try...except
結構,程序會試圖將變量guess
轉換成整數,如果軟換的過程中出錯,就會執行except
語句塊中的內容:輸出對不起,您輸入的不是整數。
并結束程序。
下面是一個運行示例:
$ python guess_number_v2.py
請輸入一個[0,10)范圍的正整數:q
對不起,您輸入的不是整數。
$ python guess_number_v2.py
請輸入一個[0,10)范圍的正整數:5
恭喜!猜對了!
從上面的示例可以看出,如果用戶輸入的內容無法轉換成整數,程序并不會崩潰,而是按照except
塊中的內容執行。
最后,加上對整數范圍的約束,完整的程序如下:
answer = 5
guess = input ('請輸入一個[0,10)范圍的正整數:')
try:
guess = int (guess)
except:
print ('對不起,您輸入的不是整數。')
exit ()
if guess < 0 or guess >= 10:
print ('對不起,您輸入的數字不在范圍內。')
exit ()
if (guess == answer):
print ('恭喜!猜對了!')
else:
print ('很遺憾!猜錯了!')