3 回答

TA貢獻1868條經(jīng)驗 獲得超4個贊
我建議您要求用戶輸入兩個信息:首先輸入他/她的名字,然后輸入幻數(shù)。
如果您確實想從單個輸入中獲取此信息,則可以這樣嘗試
while True:
name_and_num = raw_input("Your input: ")
parts = name_and_num.split()
try:
firstname, lastname, num = parts[0], parts[1], int(parts[2])
break
except (IndexError, ValueError):
print "Invalid input, please try again"
print firstname, lastname, num

TA貢獻1783條經(jīng)驗 獲得超4個贊
2種解決方法:
這種古老的經(jīng)典嘗試捕獲方法:
message = 'Please enter ...'
while(True):
print message
user_input = raw_input().split()
if len(user_input) != 3:
message = 'Incorrect number of arguments please try again'
continue
try:
num_value = int(user_input[2])
except ValueError:
message = 'Incorrect int value'
continue
break
另一種方法是僅使用正則表達式,它應(yīng)如下所示:
import re
regex = '^\s*(\w+)\s+(\w+)\s+(\d+)\s*$'
p = re.compile(regex)
print 'Please enter ...'
while(True):
user_input = raw_input()
m = p.match(user_input)
if m:
value1 = m.group(1)
value2 = m.group(2)
int_value = int(m.group(3))
break
else:
print 'Incorrect input format, it should be ...'
并不是使用此正則表達式,您就可以匹配具有3個元素(由任意數(shù)量的空格分隔并以int值結(jié)尾)的任何字符串。所以'a b 10'和' a b 10 '都匹配。

TA貢獻1712條經(jīng)驗 獲得超3個贊
對于第一部分:一種簡單的方法是:
try:
float(l[2])
except ValueError:
#error - bad input. user must re enter...
對于第二部分:只需檢查由拆分形成的列表的長度。
添加回答
舉報