2014-10-31 63 views
0

我试图编写一个简单的代码块,让用户输入一个利率。该数字必须为0或更大,其他任何值都将被拒绝,必须轮询用户直到输入有效数字。如果该数字大于10%,则必须询问用户是否真的预期利率高,如果用户回答是肯定的,则使用该号码,否则将要求用户输入价值再次和上述检查将作出。我无法理解这个嵌套的循环方面。任何帮助是极大的赞赏!Python嵌套循环输入值并确认答案

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() 
+1

如果输入的利率是10,该怎么办? – davidc 2014-10-31 00:35:14

+0

10很好。以上任何情况都应该要求确认。 – Ben 2014-10-31 00:38:15

+0

和利率真的是整数? – davidc 2014-10-31 00:43:09

回答

1

做这一切的尝试,if inp > 10,询问用户是否是快乐,如果它们不,ELIF用户输入阈值之内只是打破循环:

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() 
+0

事后看来,一气呵成做事更有意义。我对编程相当陌生,所以我倾向于尝试在块之后的块之后进行块处理。这看起来更有效率。谢谢! – Ben 2014-10-31 00:45:20

+0

@本,没有问题,不客气,应该会更容易阅读和做你需要的东西。 – 2014-10-31 00:46:53

0

三件事跳出:

1)ValueErrrorValueError

2)你不处理的最终测试用户输入

3)你可能想将< 10更改为<= 10

0

使print("Entered interest rate is greater than 10%. Are you sure? (y/n): ")输入

answer = int(input("Are you sure?")) 
if answer == "y": 
    break 
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没有后break

0

我通常喜欢打破解决方案和验证到不同的模块相关的if

elif是不必要的。请检查下面的代码,看看我如何分解它们。所以在调试和测试时很容易。

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()