如何限制浮点输入中给出的数字量? (蟒蛇)

时间:2014-05-07 22:38:43

标签: python input numbers limit

新手Pythoner在这里。我正在尝试完成我的第一个程序(一个小费计算器),我有最后一段代码要写。以下是我需要添加的代码部分:

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)&gt; 8,但我得到一个错误,浮动没有字符串。我该如何解决这个问题?谢谢,对不起,如果它是重复的! -Pottsy

3 个答案:

答案 0 :(得分: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。尝试做

decimal.Decimal(inp)
最后是

答案 1 :(得分: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)

答案 2 :(得分:0)

为了获得长度,使用str(bill_amount)

len(str(123.53))是6

请注意,即使Python允许您使用浮点值然后将其更改为布尔值,最好将其设置为不同的名称,而不是将浮点数和布尔值都设为bill_amt