首页 > 解决方案 > 不同的输入失败后,输入提示不返回到先前的提示

问题描述

我有这个任务来检查是否输入了姓名和年龄,如果它们是空白的,它会提示用户再次输入。

当它到达年龄输入时,如果用户输入一个空白输入,那么它将正确提示他们,但如果用户输入一个无效输入,然后再次输入一个空白输入,它不会再次给他们空白输入提示,只是无效输入。我不确定如何解决这个问题。

这是我的代码:

import test_module as module
 print("\nAssignment 4")

def main():

    """
    Collects first name input, checks if input was blank and prompts for entry until entered.
    """
    firstname=input("\nPlease enter your first name. ")
    while module.is_field_blank(firstname)==False:
        print("\nFirst name must be entered.")
        firstname=input("\nPlease enter your first name. ")
        continue
    """
    Collects last name input, checks if input was blank and prompts for entry until entered.
    """
    lastname=input("\nPlease enter your last name. ")
    while module.is_field_blank(lastname)==False:
        print("\nLast name must be entered.")
        lastname=input("\nPlease enter your last name. ")
        continue
    """
    Collects age input, checks if field is blank, if field is not blank checks if field is a number, prompts for entry until entered for both
    """
    raw_age=input("\nWhat is your age? ")
    while module.is_field_blank(raw_age)==False:
        print("\nAge must be entered.")
        raw_age=input("\nwhat is your age? ")
        continue
    while module.is_field_a_number(raw_age)==False:
        print("\nAge must be a number.")
        raw_age=input("\nWhat is your age? ")
        continue
    """
    Changes raw_age string to age integer
    """
    age=int(raw_age)
    """
    Brigns all inputs together, checks against age integer and outputs depending.
    """
    if age>40:
        print("\nWell, "+firstname+" "+lastname+" it looks like you are over the hill.")
    else:
        print("\nIt looks like you have many programming years ahead of you "+firstname+" "+lastname)
        

if __name__ == "__main__":
    
     main()

print("\nEnd of assignment 4")

这是我的模块代码:

def is_field_blank(arg):
    """
    This checks if the field is blank
    """
    if arg == "":
        return False
    else:
        return True

def is_field_a_number(yrs):

    """
    This checks if the entered field is a number or not
    """
    if yrs.isdigit() !=True:
        return False
    else:
        return True

标签: pythoninput

解决方案


您可以使用带有检查和中断的 while True 循环来遍历提示列表并返回值

def prompt2ints(*args):
    vals = []
    for i in args:
        while True:
            val = input(i)
            if val == "": print("you must enter a value")
            try:
                if int(val): vals.append(val); break
            except ValueError: print("value needs to be int")
    return vals

print(prompt2ints("one prompt here: ", "something here too: ")

输出:

enter age: 10
something here too: 20
['10', '20']

推荐阅读