新手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
答案 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