我在验证用户输入方面遇到了一些麻烦。对于此任务,用户必须以x / y(例如3/5)的形式输入分数,并在用户键入输入后打印。这里的问题是我不知道如何检查用户输入是否是指定的形式。
错误的输入应该是这样的:
Input a fraction then press enter: 2/3/4
That is not a valid fraction
Input a fraction then press enter: 66
That is not a valid fraction
我目前的代码是
def main():
while True:
try:
question = input("Input a fraction then press enter: ")
break
except:
print("Please enter a valid fraction in the form x/y")
print(question)
正如您所看到的,我坚持如何验证输入。任何人都可以帮助解决这个问题
提前致谢
答案 0 :(得分:4)
这是一个相对简单的验证。基本上检查只有一个'/'
字符,分子和分母都是数字。
def validate(s):
values = s.split('/')
return len(values) == 2 and all(i.isdigit() for i in values)
例如
>>> validate('65/2')
True
>>> validate('43')
False
>>> validate('4/3/2')
False
答案 1 :(得分:2)
您可以使用Python的Fraction
模块:
from fractions import Fraction
try:
f = Fraction('22/7/3')
except (ValueError, ZeroDivisionError):
print "That is not a valid fraction"
else:
print "{}/{}".format(f.numerator, f.denominator)
然而,它不会捕获普通数字,因为这些可以表示为:66 = 66/1
答案 2 :(得分:1)
要涵盖大量可能的输入,请使用regex
:
import re
if re.match(r'^\d+/\d+$', user_input):
# good input, do something with it
else:
print "You did some bad input"