要求用户输入,直到正确为止

  • 本文关键字:用户 python-3.x
  • 更新时间 :
  • 英文 :


重复请求用户正确输入的最佳方式是什么?

例如,我想继续检查a值是否为int,当它最终说ok时,您选择了数字。

我被困在这里:

try:
a = int(input())
except:
print("incorrect pick a number and try again")

#Somewhere here
print("Ok thanks you finally picked a number")

如果int无法将其参数转换为整数,则您想要捕获的唯一异常是它引发的ValueErrortry语句将处于一个循环中,如果没有获得异常,则将显式中断该循环。

while True:
response = input()
try:
a = int(response)
except ValueError:
print("incorrect pick a number and try again")
else:
print("Ok thanks you finally picked a number")
break

如果你想/必须参与这段代码,我认为唯一的方法是使用循环。

while True:
try:
a = int(input('Insert a number:'))
print ('Your number is {}'.format(a))
break
except ValueError:
print("incorrect pick a number and try again")

因此,如果用户插入一个整数,代码将打印数字并中断循环,否则将重复请求。我希望它对你有用!

你可以这样做:

a = None
while type(a) != int:
try:
a = int(input())
except:
print("incorrect pick a number and try again")
print("Ok thanks you finally picked a number")

本质上:

  • NoneType创建一个变量,这样当您第一次运行程序时,它就可以访问while循环,因为条件苛刻
  • 循环,直到该变量的类型不是int
  • 请求用户输入并尝试转换为整数,如果失败,请打印错误并重试
  • 当输入为整数类型时,它将退出循环并打印最终消息

您可以使用type()isinstance()进行检查,但正如@chepner所建议的,避免使用type,因为它只是返回对象的类型,而如果对象参数是classinfo参数或其(直接、间接或虚拟(子类的实例,则isinstance()返回true

帮助您理解:

class foo:
pass
class bar(foo):
pass
isinstance(foo(), foo)  # returns True
type(foo()) == foo      # returns True
isinstance(bar(), foo)    # returns True
type(bar()) == foo        # returns False,and this probably won't be what you want.

如果您想使用isinstance(),代码将显示为:

a = None
while not isinstance(a, int):
try:
a = int(input())
except:
print("incorrect pick a number and try again")
print("Ok thanks you finally picked a number")

正如@L3viathan所指出的,你也可以做:

a = None
while a is None:
try:
a = int(input())
except:
print("incorrect pick a number and try again")
print("Ok thanks you finally picked a number")

在这种情况下,循环直到a得到一个值,只有在没有抛出异常的情况下才会这样做。

while True:
try:
number=int(input("Enter a number: ")) 
except:
print("incorrect pick a number and try again")
else:
print("ok Thanks you finally picked  a number ")
break

最新更新