簡體   English   中英

對與錯陳述,查找變量類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM