如何解决在Python中检查多个输入的有效性
我编写了一个程序,在乌龟中绘制凸的正多边形(给定边数和长度)。我还希望它检查无效的输入,以便它立即询问用户是否要尝试其他输入。有没有办法用更少的代码检查两个输入的有效性,同时还要考虑ValueError?
此外,每次成功运行后,都会发生Terminator错误。可能是什么原因导致的,使用此导入命令时甚至可以解决该问题?
from turtle import *
def inp():
while True:
try:
n = int(input("Enter the number of sides of the polygon: "))
except ValueError:
y_n = input("Invalid input,type \"y\" if you'd like to try again: ")
if y_n == "y":
continue
else:
print("Goodbye!")
break
if n >= 3:
pass
else:
y_n = input("Invalid input,type \"y\" if you'd like to try again: ")
if y_n == "y":
inp()
else:
print("Goodbye!")
break
try:
l = float(input("Enter the length of the side in pixels: "))
except ValueError:
y_n = input("Invalid input,type \"y\" if you'd like to try again: ")
if y_n == "y":
continue
else:
print("Goodbye!")
break
if l > 0:
for i in range(1,n + 1):
forward(l)
left(360/n)
exitonclick()
break
else:
y_n = input("Invalid input,type \"y\" if you'd like to try again: ")
if y_n == "y":
inp()
else:
print("Goodbye!")
break
inp()
解决方法
为获得有效的参数输入,请执行以下步骤:
- 以无效值开头
- 使用while循环,要求用户提供有效输入
- 如果输入有效,请退出循环
在您的代码中,两个参数都具有相同的验证检查,因此您可以使用函数来检查这两个参数。
尝试以下代码:
from turtle import *
def validnum(nm):
return str(nm).isdigit() and int(nm) > 0 # integer and greater than zero
def inp():
n = l = '' # both invalid
while not validnum(n): # loop first entry until valid
n = input("Enter the number of sides of the polygon or 'q' to quit: ")
if n == 'q':
print("Goodbye!")
exit()
if not validnum(n):
print("Invalid entry")
while not validnum(l): # loop second entry until valid
l = input("Enter the length of the side in pixels or 'q' to quit: ")
if l == 'q':
print("Goodbye!")
exit()
if not validnum(l):
print("Invalid entry")
n,l = int(n),int(l) # convert entries to integers
for i in range(1,n + 1):
forward(l)
left(360/n)
exitonclick()
inp()
由于两个参数具有相同的验证并且仅在消息提示中有所不同,因此可以通过将提示放在列表中来使代码更紧凑。
from turtle import *
def validnum(nm):
return str(nm).isdigit() and int(nm) > 0 # integer and greater than zero
def inp():
lstinp = ['',''] # both invalid
lstmsg = ['Enter the number of sides of the polygon','Enter the length of the side in pixels'] # both msgs
for i in range(len(lstinp)): # each input value
while not validnum(lstinp[i]): # loop until valid entry
lstinp[i] = input(lstmsg[i] + " or 'q' to quit: ") # msg
if lstinp[i] == 'q':
print("Goodbye!")
exit()
if not validnum(lstinp[i]):
print("Invalid entry")
n,l = int(lstinp[0]),int(lstinp[1]) # convert entries to integers
for i in range(1,n + 1):
forward(l)
left(360/n)
exitonclick()
inp()
运行代码时我没有收到任何错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。