iT邦幫忙

0

[發問] Python3 如何在input輸入str和int?

Sisi 2020-11-25 13:38:503979 瀏覽
  • 分享至 

  • xImage

我嘗試過只使用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, 就沒法繼續下去, 我不想出現錯誤訊息, 請問可以怎麼解決?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
leeihsing0127
iT邦新手 5 級 ‧ 2020-11-25 13:45:57

不知道這樣是否ok..

try:
xxx
except:
xxx

不明 檢舉
option = input('請輸入你的選項:')
try:
    print('歡迎', int(option))
except:
    print('歡迎', str(option))
0

一般輸入控制,很難同時存在數值及字串類型。
基本上要萬用的話一定是得用字串類型。
這也是其預設用字串類型的原因之一。

所以得要換個想法。
一般我會建議用正則的方式先判斷其字串內是否為純數字。
是的話才做int轉換。

另外一想法就是從接收值來下手。讓它統一能接受字串。

在input又要判斷字串或數值的話。實在不太建議從這步下手。

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-25 14:32:39
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
0
微甜的酸
iT邦新手 2 級 ‧ 2020-11-25 18:07:59

同浩瀚星空大所說的,建議都先用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。如果有,就將回傳它對映到的索引值。

0
EricChu
iT邦新手 4 級 ‧ 2020-11-26 15:08:22
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)
0
ccutmis
iT邦高手 2 級 ‧ 2020-11-27 09:34:33

我嘗試過只使用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)

結構化程式寫法的優點就是看一眼就知道它在做啥。

尚未脫離python初學者階段+1,看單行程式都看不太懂在寫什麼...
結構化寫法方便閱讀好多了,也可以清楚明白程式是怎麼跑得,自然也知道他在幹麻?

倒是滿好奇業界寫程式都是這樣單行寫!?這技能是必備之一!?

ccutmis iT邦高手 2 級 ‧ 2020-12-01 16:32:46 檢舉

滿好奇業界寫程式都是這樣單行寫!?這技能是必備之一!?

我在自己工作上用到的python code幾乎不用單行...^^"

我要發表回答

立即登入回答