如何限制浮点输入中的数字数量?(Python)
我是一个刚入门的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)
来替代。