如何将输入限制为只有两位小数的整数或数字,否则(字母或其他符号)它将显示“无效”并允许用户再次输入。
代码:
counter = 100
income = input("Enter income: ")
while counter >0:
try:
val = int(income)
print ("YES")
income = input("Enter money: ")
counter = counter - 1
except ValueError:
print("NO")
income = input("Enter money: ")
counter = counter - 1
我从另一个问题中取得了val = int(???),如果仅限于整数输入,它就有效,因为我的程序涉及金钱,我需要它才能达到两位小数,但它不接受小数点。 (该计数器仅供我测试程序)
答案 0 :(得分:1)
您可以定义自己的input
功能
def input_number(msg):
while True:
try:
res = round(float(input(msg)), 2)
break
except:
print("Invalid")
return res
income = input_number("Enter money:\n")
答案 1 :(得分:1)
您可以使用regexp:
import re
is_number=re.compile('^\d+\.?\d{,2}$')
>>>is_number.match('3.14') is not None
True
>>>is_number.match('32222') is not None
True
>>> is_number.match('32A') is not None
False
>>> is_number.match('3.1445') is not None
False
答案 2 :(得分:1)
在我看来,你需要一个正则表达式来表示你需要的功能,特别是确保小数点后面正好两位数,同时使其成为可选项。
我把收入强加为便士或美分。这是因为您可能会使用float
来解决问题。
import re
# income as pence/cents
income = None
while income is None:
instr = input("Enter money: ")
m = re.fullmatch(r'(\d+)(?:\.(\d{2}))?', instr)
if m:
full, cents = m.groups()
if cents == '' or cents is None:
cents = '0'
income = (int(full) * 100) + int(cents)
else:
print("NO")
print("Income is %d.%02d" % (income/100, income % 100))
答案 3 :(得分:1)
由于对模式有这么多限制,我真的认为正则表达式更具说明性和可读性。
import re
NUM_REGEX = re.compile(r"^\d+(?:\.\d{,2})?$")
input_str = input("give me a number")
while NUM_REGEX.match(input_str) is None:
input_str = input("Nope, not valid. Give me another.")
return float(input_str)