Python嵌套循环输入值并确认答案

0 投票
5 回答
698 浏览
提问于 2025-04-30 18:34

我正在尝试写一段简单的代码,让用户输入一个利率。这个数字必须是0或更大,其他任何值都会被拒绝,用户必须一直输入,直到输入一个有效的数字。如果这个数字大于10%,就要问用户是否真的期待这么高的利率。如果用户回答是,那就用这个数字;如果不是,用户就需要重新输入,之前的检查还会继续进行。我对嵌套循环的部分有点困惑,希望能得到一些帮助!

def main():

    while True:
        try:
            interest_rate = int(input("Please enter an interest rate: "))
        except ValueErrror:
            print("Entered value is not a number! ")
        except KeyboardInterrupt:
            print("Command Error!")
        else:
            if 0 <= interest_rate < 10:
                break
            elif interest_rate > 10:
                print("Entered interest rate is greater than 10%. Are you sure? (y/n): ")

main()
暂无标签

5 个回答

0

我通常喜欢把解决方案和验证过程分成不同的模块。请看下面的代码,看看我是怎么把它们分开的。这样在调试和测试的时候就会简单很多。

def validating_user_input(num):
    """
    """
    return num > 0

def getting_user_input():
    """
    """
    user_input = int(raw_input("Enter the number that is greater than 0: "))
    return user_input

def confirming_choose():
    """
    """
    try:
        user_choose = int(raw_input("Can you confirm your input? [0|1]? "))
    except ValueError:
        return False
    return user_choose == 1



def main():
    """
    """
    initial_cond = True
    while initial_cond:
        user_input = getting_user_input()
        if validating_user_input(user_input):
            if user_input > 10:
                confirmation = confirming_choose()
                while not confirmation:
                    getting_user_input()
                #do you operating here
            initial_cond = False
        else:
            print "It is not valid input."


if __name__ == "__main__":
    main()
0

把这句 print("输入的利率大于10%。你确定吗?(y/n): ") 改成一个输入

answer = int(input("Are you sure?"))
if answer == "y":
    break
0

有三点需要注意:

1) ValueErrror 应该是 ValueError

2) 你没有处理最后测试中的用户输入

3) 你可能想把 < 10 改成 <= 10

0
else:
    if 0 <= interest_rate < 10:
        break
    elif interest_rate > 10:
        print("Entered interest rate is greater than 10%. Are you sure? (y/n): ")

可以是:

if 0 <= interest_rate <= 10:
    break
print("Entered interest rate is greater than 10%. Are you sure? (y/n): ")

除了最后一行必须获取响应并进行处理。

你的 elseif 没有关系。

break 之后,你的 elif 是多余的。

1

在尝试的过程中,先判断一下输入的值是否大于10。如果大于10,就问用户是否满意,如果用户满意就结束这个过程。如果用户输入的值在允许的范围内,就直接结束循环。

def main():
    while True:
        try:
            interest_rate = int(input("Please enter an interest rate: "))
            if interest_rate > 10:
                confirm = input("Entered interest rate is greater than 10%. Are you sure? (y/n): ")
                if confirm =="y":
                    break
            elif 0 <= interest_rate < 10:
                break
        except ValueError:
            print("Entered value is not a number! ") 
    return interest_rate

main()

撰写回答