如何限制浮点输入中的数字数量?(Python)

0 投票
3 回答
1419 浏览
提问于 2025-04-18 05:45

我是一个刚入门的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

3 个回答

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

为了获取长度,可以使用 str(bill_amount)。

len(str(123.53)) 的结果是 6。

需要注意的是,虽然 Python 允许你使用浮点数(小数)然后把它转换成布尔值(真或假),但最好给它们起不同的名字,而不是都用 bill_amt 这个名字。

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)

来替代。

撰写回答