首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLI工具的合并while循环

CLI工具的合并while循环
EN

Stack Overflow用户
提问于 2018-07-10 10:56:06
回答 4查看 63关注 0票数 0

在CLI工具中,是否有一种干净的方法来组合user true循环以获取用户的输入?我需要3输入3个不同的问题,这必须立即验证以及。现在,我只是在三个时间循环,这很好,但感觉有点不对劲。

代码语言:javascript
复制
while True:
    a = raw_input("Enter a:")
    if validate(a):
        break
    else:
        continue

while True:
    b = raw_input("Enter b:")
    if validate(b):
        break
    else:
        continue
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-10 11:19:49

是的,当然,这就是函数的作用:

代码语言:javascript
复制
def get_input(prompt, validate=validate)
    while True:
        res = raw_input(prompt)
        try:
            res = validate(res):
            return res
        except ValidationError as e:
            print("invalid value: {}".format(e))

请注意,我更改了validate API,以便它现在应该引发一个ValidationError,而不是返回一个布尔值。这允许有一条错误信息来解释出了什么问题.此外,它还返回已验证的值,该值允许在需要时对其进行键入(例如,如果您想要一个int或float),或者实际返回任何您想要的作为最终结果的值。

票数 1
EN

Stack Overflow用户

发布于 2018-07-10 11:03:05

代码语言:javascript
复制
def validate_input(q):
  res = None
  while not res:
    res = validate(raw_input(q))
  return res

a = validate_input('Enter a')
b = validate_input('Enter b')    
票数 1
EN

Stack Overflow用户

发布于 2018-07-10 11:15:00

这个程序首先问这三个问题,验证它们,然后在循环中只问那些没有验证的问题。直到所有问题得到验证:

代码语言:javascript
复制
# This is only example validate function:
def validate(resp):
    if resp == "a":
        return True
    return False

valid = [False, False, False]
while not all(valid):
    a = valid[0] or input("Enter a:")
    b = valid[1] or input("Enter b:")
    c = valid[2] or input("Enter c:")

    valid = [True if valid[i] else bool(validate(v)) for i, v in enumerate((a, b, c))]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51263436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档