我嘗試過只使用input(), 但輸入選項1,2,3的時候, 它不認為輸入的是數字, 而是當作字符串。
input = int("Option: 1)Display all records, 2)Add a record, 3)Exit System \n > Type your option: ")
然後我試着在input()改動:
int(input("Option: 1)Display all records, 2)Add a record, 3)Exit System \n > Type your option: "))
這次輸入選項123沒有問題了, 但是如果輸入abc, 就沒法繼續下去, 我不想出現錯誤訊息, 請問可以怎麼解決?
一般輸入控制,很難同時存在數值及字串類型。
基本上要萬用的話一定是得用字串類型。
這也是其預設用字串類型的原因之一。
所以得要換個想法。
一般我會建議用正則的方式先判斷其字串內是否為純數字。
是的話才做int轉換。
另外一想法就是從接收值來下手。讓它統一能接受字串。
在input又要判斷字串或數值的話。實在不太建議從這步下手。
choice = input("Option: 1)Display all records, 2)Add a record, 3)Exit System \n > Type your option: ")
if (choice=='1' or choice=='2' or choice=='3'):
choice = int(choice) * 10
print choice
同浩瀚星空大所說的,建議都先用Sring的方式儲存。再使用dict.get()的方法做對映(類似達到switch case
的效果。)
choice = input("(1)Display all records(2)Add a record(3)Exit System \n > Type your option:")
a = int(choice) if {"a":1,"b":2,"c":3}.get(choice) is None else {"a":1,"b":2,"c":3}.get(choice)
print()
連我自己都快看不懂我再寫什麼。請容我解釋:
如果dict.get()沒有對映的索引值(即代表它不是abc),就將它做型別轉換賦值給a。如果有,就將回傳它對映到的索引值。
option = input("Option: 1)Display all records, 2)Add a record, 3)Exit System \n > Type your option: ")
try:
print(int(option))
except:
print(option)
我嘗試過只使用input(), 但輸入選項1,2,3的時候, 它不認為輸入的是數字, 而是當作字符串。
看到這個描述我的第一個感覺是你應該是初學Python,學習Python一段時間的人應該都能理解,input()不管你在裡面輸入的是 中文 英文 日文 阿拉伯數字 甚至火星文,輸進去的東西都會變成"字串",你的問題應該問作"如果輸入字串裡面包含了非數字字元時,用int()字串會報錯,要如何處理...之類的",底下舉個例,參考星空大的建議用re.search判斷字串內容是否為純數字("0"~"9"),若是則int(input_val),若否則為"Not Number"。
import re
print((lambda x:int(x) if re.search("^[0-9]+$",x)!=None else "Not Number!")(input("Option: 1)Display 2)Add 3)Exit\n ")))
個人不太建議一開始學習就用上面的這種寫法,單行做很多事很酷沒錯,但是也很容易誤導新手,解決同樣的問題用結構化程式的寫法如下提供您參考:
import re
choice=input("Option: 1)Display 2)Add 3)Exit\n ")
if re.search("^[0-9]+$",choice)!=None:
choice=int(choice)
else:
choice="Not Number!"
print(choice)
結構化程式寫法的優點就是看一眼就知道它在做啥。