如何压缩我的代码?(格式和计算



对不起,我是编码新手,所以如果这是一个业余问题,我深表歉意。一个练习要求我创建代码来计算 1、2 和 3 年投资的 4% 利息。我已经复制了很多代码,想知道我该如何以不同的方式做到这一点:以更精简的方式。

例如,是否可以每年在这样的float(year1, year2, year3)中转换为具有多行代码?

startingBalance = input("Please enter your starting bank balance: ")
startingBalance = int(startingBalance)
year1 = (startingBalance * 1.04)
year2 = (year1 * 1.04)
year3 = (year2 * 1.04)
year1 = "{0:.2f}".format(year1)
year2 = "{0:.2f}".format(year2)
year3 = "{0:.2f}".format(year3)

print("Starting Balance: " + str(startingBalance) + "n" + "Year 1 Balance: " + year1 + "n" + "Year 2 Balance: " + year2 + "n" + "Year 3 Balance: " + year3)
answer=str(input("would you like to withdraw your profits? Y/N: "))
if answer in ['Y', 'y']:
startingBalance = float(startingBalance)
year1 = float(year1)
year2 = float(year2)
year3 = float(year3)
year1Profit = year1 - startingBalance
year1Profit = "{0:.2f}".format(year1Profit)
year2Profit = year2 - startingBalance
year2Profit = "{0:.2f}".format(year2Profit)
year3Profit = year3 - startingBalance
year3Profit = "{0:.2f}".format(year3Profit)
str(year3Profit)
print("Year   | Balance | Profit " + "n" + "Year 1  " + str(year1) + "       " + year1Profit  + "n" + "Year 2  " + str(year2) + "       " + year2Profit  + "n" + "Year 3  " + str(year3) + "       " + year3Profit)
elif answer in ['N', 'n']:
print("Goodbye")
else:
print("Invalid Entry")

从技术上讲,这是一行:

year1, year2, year3 = float(year1), float(year2), float(year3)

但我认为如果您在初始化后不更改变量的类型会更清楚。 您可以将它们一直保留为浮点数,将打印行更改为:

print("Starting Balance: " + str(startingBalance) + "n" + "Year 1 Balance: " + "{0:.2f}".format(year1) + "n" + "Year 2 Balance: " + "{0:.2f}".format(year2) + "n" + "Year 3 Balance: " + "{0:.2f}".format(year3))

这样可以避免转换为字符串并再次转换回来。

这个问题在代码审查中可能更合适,但是:

year1 = "{0:.2f}".format(year1)

可以替换为:

year1 = round(year1, 2)

您在相同的代码中使用 .format 和 print("foo" + bar(,我建议使用一种类型:

F 字符串(如果 Python3.6 或更高版本(

print(f"Starting Balance: {startingBalance}nYear 1 Balance: {year1}nYear 2 Balance: {year2}nYear 3 Balance: {year3}")

.format 如果 Python2 或 3 <3.6

print("Starting Balance: {}nYear 1 Balance: {}nYear 2 Balance: {}nYear 3 Balance: {}".format(startingBalance, year1, year2, year3))

无需在此处放置 str((:

answer=str(input("would you like to withdraw your profits? Y/N: "))

input(( 总是返回一个字符串。

当你想要(我猜(表格而不是一堆空格(丑陋(时使用"\t":

print("Year   | Balance | Profit " + "n" + "Year 1  " + str(year1) + "       " + year1Profit  + "n" + "Year 2  " + str(year2) + "       " + year2Profit  + "n" + "Year 3  " + str(year3) + "       " + year3Profit)

同样的事情在这里使用f字符串或.format来格式化你的字符串。

为了避免编写相同的代码,您可以创建一个函数来计算最终余额和利润。然后,您可以使用其他答案来了解如何格式化变量并返回它们

def compute_year(starting_balance, number_of_year):
return (startingBalance * 1.04 ** number_of_year, startingBalance * 1.04 ** number_of_year - startingBalance)
year1, year1Profit = compute_year(startingBalance, 1) 
year2, year2Profit = compute_year(startingBalance, 2) 
year3, year3Profit = compute_year(startingBalance, 3)

是的,这是很有可能的! 当您发现自己在编写重复的代码行时,请尝试使用函数! 这样,您只需定义一次表达式!

例:

year1 = (startingBalance * 1.04)
year2 = (year1 * 1.04)
year3 = (year2 * 1.04)

可以更改为

def interest(balance):
return balance * 1.04
year1 = interest(startingBalance)
year2 = interest(year1)

但这似乎仍然是重复的,对吧? 现在尝试使用for循环:

current_balance = startingBalance
for year in range(4):
current_balance = interest(current_balance)
print(current_balance)

现在在每个循环中,您可以打印新余额的值! 最后添加行打印以获得漂亮的输出,您可以得到如下所示的内容:

def interest(balance, years):
return balance * (1.04 ** years)

def print_gains(balance, year):
header = 'Year | Balance    | Profit   '
print(header)
print('-' * len(header))
for year in range(1 + year):
new_balance = interest(balance, year)
print('%5d| %10.2f | %10.2f' % (year, new_balance, new_balance - balance))
print()

def main():
print_gains(10000, 5)
main()

生成以下输出:

Year | Balance    | Profit
-----------------------------
0|   10000.00 |       0.00
1|   10400.00 |     400.00
2|   10816.00 |     816.00
3|   11248.64 |    1248.64
4|   11698.59 |    1698.59
5|   12166.53 |    2166.53

希望对您有所帮助!

最新更新