Python嵌套循环输入值并确认答案
我正在尝试写一段简单的代码,让用户输入一个利率。这个数字必须是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): ")
除了最后一行必须获取响应并进行处理。
你的 else
和 if
没有关系。
在 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()