兴趣计算器循环问题Python

时间:2016-09-21 17:08:23

标签: python

初学者在这里。我已经制定了计算器计划来帮助我获得不同种类的贷款。我有两个问题要完成我的计划。这是程序。我试着查找问题,但我不确定如何说出来,所以我想我只是问一个问题。

x=1
while x==1:
    import math
    loan=input("Enter Loan amount: ")
    rate=input("Enter rate: ")
    if rate.isalpha() or loan.isalpha():
        print("Hey that's not a number!")
        break
    rate=rate.replace("%","")
    loan=float(loan)
    rate=float(rate)*0.01
    amount1y=round(loan*(math.e**(rate*1)),2)
    amount5y=round(loan*(math.e**(rate*5)),2)
    amount10y=round(loan*(math.e**(rate*10)),2)
    monthlypay=round(amount1y-loan,2)
    print("Year 1 without pay: " + str(amount1y))
    print("Year 5 without pay: " + str(amount5y))
    print("Year 10 without pay: " + str(amount10y))
    print("Amount to pay per year: " + str(monthlypay))
    print("Want to do another? Y/N?")
    ans=input('')
    ans=ans.lower()
    y=True
    while y==True:
        if ans=="n" or ans=="no":
            x=0
            break
        elif ans=="y" or ans=="yes":
            y=False
        else:
            print("You gotta tell me Yes or No fam...")
            print("I'll just assume that mean's yes.")
            break

我的问题出在两个地方。

期间
if rate.isalpha() or loan.isalpha():
        print("Hey that's not a number!")
        break

我如何写这个,以便它不是一起结束程序,而是从顶部重新开始,直到它们输入一个数字。也是为了娱乐和知识的一面。让我们说他们连续三次输入文本,那时它只是执行程序我该如何做呢? 最后在这部分代码中:

 while y==True:
        if ans=="n" or ans=="no":
            x=0
            break
        elif ans=="y" or ans=="yes":
            y=False
        else:
            print("You gotta tell me Yes or No fam...")
            print("I'll just assume that mean's yes.")
            break

最后的其他人,没有那个休息,将继续印刷“你必须告诉我是或否家人......”永远。我怎样才能这样做,而不是打破while语句,它只是重新启动while语句再次询问问题?

感谢您的帮助! 附:这是python 3.4.2

3 个答案:

答案 0 :(得分:1)

你做了一个无限循环,当你一切顺利的时候你break。简化为:

while True:
    x_as_string = input("Value")
    try:
         x = float(x_as_string)
    except ValueError:
         print("I can't convert", x_as_string)
    else:
         break

请求宽恕比允许更容易:您尝试转换。如果转换失败,则打印通知并继续循环elsebreak

答案 1 :(得分:0)

在您的两个示例中,我相信您正在寻找Python的continue statement。来自Python Docs:

(强调我的)

  

continue可能只在语法上嵌套在for或while循环中,但不嵌套在该循环中的函数或类定义或finally子句中。 继续进行最近的封闭循环的下一个循环。   当continue使用finally子句将控制权移出try语句时,finally子句在真正开始下一个循环周期之前执行。

这基本上意味着它将“重启”你的for/while循环。

如果在三次尝试后输入错误,要解决打破循环的注意事项,请使用计数器变量。每次用户提供错误输入时递增计数器变量,然后检查并查看计数器变量是否大于3.示例:

counter = 0
running = True:
while running:
    i = input("Enter number: ")
    if i.isalpha():
        print("Invalid input")
        counter+=1
    if counter >= 3:
        print("Exiting loop")
        break

无关的说明:

  • 为什么不同时使用x的布尔值?
  • 我通常建议在模块级别为结构添加任何导入,以便读取一个程序。

答案 2 :(得分:0)

你的问题很简单。您必须明智地使用continuebreak。这些称为控制流语句。它们控制程序的正常执行流程。因此continue会跳转到循环中的最顶行,而break只会完全跳过 out 循环,无论是for还是{{} 1}}循环。

回到你的代码:

  

我如何写这个,以便它不是一起结束程序,而是从顶部重新开始,直到它们输入一个数字。

while

这样,你就可以在循环中跳回(继续)到第一行:if rate.isalpha() or loan.isalpha(): print("Hey that's not a number!") continue 。在循环中执行导入并不是很有用,因为导入的模块已经在import math列表中,导入语句无效,因此sys.modules语句无法导入它;如果您在3.X中使用import中的reload或在Python 2.x中使用imp中提供__builtin__,那么这可能听起来更合理。

同上:

if ans=="n" or ans=="no":
    x=0
    break
elif ans=="y" or ans=="yes":
        continue
else:
    print("You gotta tell me Yes or No fam...")
    print("I'll just assume that mean's yes.")
    continue

用英语说明此代码段:如果ans等于"n""no",则打破循环;如果ans等于"y""yes",则继续。如果没有发生任何事情,那么(elsecontinue。 while循环。

  

让我们说他们连续三次输入文字,那时它只是执行程序我该如何做呢?

不确定我是否理解了您的问题,您可以通过不同的方式进行三次输入:

for line in range(3):
    in = input("Enter text for lineno", line)
    ...do something...