初学者在这里。我已经制定了计算器计划来帮助我获得不同种类的贷款。我有两个问题要完成我的计划。这是程序。我试着查找问题,但我不确定如何说出来,所以我想我只是问一个问题。
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
答案 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
请求宽恕比允许更容易:您尝试转换。如果转换失败,则打印通知并继续循环else
您break
。
答案 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)
你的问题很简单。您必须明智地使用continue
或break
。这些称为控制流语句。它们控制程序的正常执行流程。因此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"
,则继续。如果没有发生任何事情,那么(else
)continue
。
让我们说他们连续三次输入文字,那时它只是执行程序我该如何做呢?
不确定我是否理解了您的问题,您可以通过不同的方式进行三次输入:
for line in range(3):
in = input("Enter text for lineno", line)
...do something...