[英]True and False Statements, finding variable types
我試圖確定一個字符串變量是有效的整數還是浮點數,我嘗試了try語句,但是使用ASCII似乎更好。 我無法使其正常工作,可能與返回值和布爾值有關。
def validation(valid):
var=input("no...")
state=True
y=0
for x in range(len(var)):
if state==False or y==2:
valid=False
return valid
if var[x] == chr(46) or chr(48) <= var[x] <= chr(57):
if var[x] == chr(46):
y+=1
state=True
else:
state=False
valid=True
valid = validation(valid)
print(valid)
ASCII字符46和48-57是小數點和數字0-9。 如果有一個以上的小數點(用y表示),則它還會返回一個假語句。
簡單而強大的方法:
def isNum(txt):
try:
float(txt)
return True
except ValueError:
return False
有一種更簡單的方法可以做到這一點:
try:
float(x)
except ValueError as e:
print e
print "Not a float"
else:
try:
int(x)
except ValueError as e:
print e
print "not an integer"
您可以很容易地將它們組合成一個方法。
您的代碼效率不是很高,並且不能處理負數,也不能以科學計數法編寫浮點數。 在fiacre的答案中使用try
是在Python中執行此操作的標准方法。
但是要回答您的問題,在for
循環后沒有return
語句,因此,如果所有測試都成功,則函數將返回默認值None
。 因此,您只需要在函數末尾添加return True
。
通過遍歷字符串值並直接測試字符,而不是索引到字符串並使用chr()
可以使代碼效率更高。 例如,
for c in var:
if c == '.' or '0' <= c <= '9':
# etc
或者,
valid_chars = set('-.0123456789')
for c in var:
if c in valid_chars:
# etc
FWIW,在您現有的代碼中,Python必須在每個循環上重新計算chr(46)
等。 當然,這是一個相當快的操作,但是仍然很浪費。
另外,功能中既不需要state
又需要valid
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.