2014-05-07 68 views
0

新手Pythoner在這裏。我正在努力完成我的第一個程序(一個小費計算器),並且我有最後一段代碼要寫。下面是代碼,我需要添加到該部分:如何限制float輸入中給定的數字量? (Python)

bill_amt = True 
while bill_amt: 
    try: 
     bill_amt = float(input('First, what was the price of your meal?:')) 
    except: 
     print('Please enter a number only.') 
     continue 
    if bill_amt <= 0: 
     print('Your meal wasn\'t $',bill_amt,'! Please try again.') 
     bill_amt = True 
    else: 
     x = float(bill_amt) 
     bill_amt = False 

我想要做的就是當代碼問你吃飯了多少這樣的用戶添加一個命令,這將限制你可以輸入數字量無法輸入4511511513545513513518451.32。我試過使用len(bill_amt)> 8,但我得到一個錯誤,浮動沒有字符串。我如何解決這個問題?謝謝,對不起,如果它是重複的! -Pottsy

+2

應該'除了ValueError:'不只是'除了' –

+0

它是Python 3嗎? – ElmoVanKielmo

+0

'if bill_amt> 99999.99:'? – jonrsharpe

回答

1

使用正則表達式匹配,這也會阻止用戶喜歡"12.123456"

import re 
# ... 

while True: 
    inp = input('First, what was the price of your meal?:')) 
    if bool(re.match(r"^\d{1,8}\.\d\d$", inp)): 
     return float(inp) 
    else: 
     print('invalid entry') 

\d的東西打字意味着數字,{1,8}手段允許從1至8位數字的任何地方。 \d\d會在.之後尋找兩位數字,所以此正則表達式將匹配1-8位數字,後跟一個點,然後是兩個數字。

請注意,如果您正在處理金錢,您通常不想使用花車,而是使用decimal.Decimal s。試試做

decimal.Decimal(inp) 

而不是。

0

Float沒有長度,但str作用:

bill_amt_str = input('First, what was the price of your meal?:') 
if len(bill_amt_str.replace(".", "")) > 8: 
    print("No more than 8 digits please.") 
    continue 
bill_amt = float(bill_amt_str) 
+0

或者,使用就地轉換而不添加額外變量;有bill_amt,因爲它是,只要檢查'如果len(str(bill_amt))> 8:' –

+0

@GMGray垃圾回收器將消滅這個小小的字符串無論如何。 – ElmoVanKielmo

+0

@GGGray有一個額外的名字,但沒有更多的空間分配給變量 –

0

爲了得到長度使用STR(bill_amount)

LEN(STR(123.53))是6

注即使Python允許您使用浮點值並將其更改爲布爾值,但最好將其設置爲不同的名稱,而不是將浮點數和布爾值都設置爲bill_amt 。