【发布时间】:2021-10-14 19:36:10
【问题描述】:
我的任务是创建一个 python 程序,该程序将询问用户输入并计算每月还款额,这是我必须解决的公式:Formula。这样做并不太难,但是作为奖励,导师要求尝试使用户输入“牢不可破”,这意味着如果输入了预期之外的任何值,它不会破坏程序。我认为这可以通过 Try except 轻松完成,这就是我所做的,但是我相信我的代码可以以更简洁的方式编写,而不是对每个输入都使用 Try except,如下所示:
err = "Please enter a number only!!"
while True:
try:
A = int(input("How much were you loaned? "))
except ValueError:
print(err)
continue
else:
break
while True:
try:
R = float(input("At what monthly rate interest? ")) / 100
except ValueError:
print(err)
continue
else:
break
while True:
try:
N = int(input("And how many years is the loan for? "))
except ValueError:
print(err)
continue
else:
break
RA = R * A
RN = 1 - (1 + R) ** -N
P = RA / RN
print("You will pay £", P, "yearly", "or, £", P / 12, "monthly")
我觉得也许用户输入可以放入一个 For 循环,或者可能所有这些都放入一个 Try except 块?在考虑之后,我将所有输入放入一个 Try except 块中,但是一旦您未能正确输入用户输入的预期数据,它就会立即回到开头,而不是您所在的问题。这不是我想要的。看看:
err = "Please enter a number only!!"
while True:
try:
A = int(input("How much were you loaned? "))
R = float(input("At what monthly rate interest? ")) / 100
N = int(input("And how many years is the loan for? "))
except ValueError:
print(err)
continue
else:
break
RA = R * A
RN = 1 - (1 + R) ** -N
P = RA / RN
print("You will pay £", P, "yearly", "or, £", P / 12, "monthly")
您认为我可以如何修改此代码以使其更简洁、更短且更高效,而无需对每个用户输入都进行尝试?
【问题讨论】:
-
任何时候您编写几乎相同的代码块,解决方案是将该块移动到一个函数中,并使用指定每个原始块的唯一详细信息的参数调用它。
-
尝试只通过while循环。写while True and if type(A)==int and type(R)==float and type(N)==int: break else: continue。我随便写的,用适当的缩进写????
标签: python user-input try-except