2015-11-03 27 views
0

我有一塊用於數據驗證用戶輸入的代碼,以確保只有數字大於零取,如下:使用INT()與十進制數

while True: 
x = raw_input("Please enter a number greater than zero.") 
try: 
    x = int(x) 
    num = True 
except ValueError: 
    print "Sorry, you entered an invalid input. Please ensure you enter only numbers greater than zero." 
if x > 0: 
    if num == True: 
      break 
elif x <= 0: 
    print "Sorry, you entered an invalid input for time. Please ensure you enter only positive numbers. \n" 

然而,該語句被捕捉十進制數大於比零,我想通過。我應該改變什麼才能防止這種情況發生?

P.S:另外,任何人都可以精確解釋爲什麼它的發生?

+0

我想我是如何做到這一點是改變詮釋爲浮動,只是假設一切都是浮動數據類型?當然,你可以嘗試一個int,拋出,嘗試一個浮點數,拋出 – DTSCode

+0

這是模糊的。請發佈工作代碼,樣本輸入,預期產出和實際結果。 – RobertB

+1

如果用戶輸入「0.5」,結果是什麼? –

回答

2

使用float而不是int。 Float允許小數,並且會爲不是數字的字符串引發錯誤。一輪價值

使用INT(值)總是向下:

+0

或使用'int(float(user_input))'獲取float的int部分,如果這是你想要的。我們正在抓秸稈,因爲問題不明確。 – RobertB

+0

這完美地工作。謝謝! – Jay

1

對於爲什麼發生這種情況的部分。即使0.99將變爲0,這就是爲什麼你的系統捕捉小數。正如MartínMuñozdelRío所建議的那樣,使用float將不會圓整,這就是它工作的原因。

作爲一個方面說明,在代碼中使用

if num == True: 

因爲你設置NUM爲(NUM = TRUE)早一個布爾值已經可以簡化爲

if num: 

而且,你的代碼中有一個縮進錯誤(代碼while循環下沒有縮進),但這不是這樣大的交易在這裏我猜的)

我希望我能幫助!

+0

當我將代碼輸入到stackoverflow中時發生縮進錯誤。此外,它捕獲的小數大於1 - 例如1.2,6.66等。任何想法爲什麼_that_發生? – Jay