Python 如何压缩代码?(格式和计算)

Python 如何压缩代码?(格式和计算),python,Python,抱歉,我对编码不熟悉,因此如果这是一个业余问题,我表示歉意。一个练习要求我创建一个代码,计算1年、2年和3年的投资4%的利息。我复制了很多代码,想知道如何做得不同:以更简洁的方式 例如,是否可以将每年转换为类似于具有多行代码的浮动(year1、year2、year3)的一年 startingBalance = input("Please enter your starting bank balance: ") startingBalance = int(startingBalance) yea

抱歉,我对编码不熟悉,因此如果这是一个业余问题,我表示歉意。一个练习要求我创建一个代码,计算1年、2年和3年的投资4%的利息。我复制了很多代码,想知道如何做得不同:以更简洁的方式

例如,是否可以将每年转换为类似于具有多行代码的浮动(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 = round(year1, 2)
在相同的代码中使用.format和print(“foo”+bar”),我建议使用一种类型:

如果Python3.6或更高版本,则为F字符串

print(f"Starting Balance: {startingBalance}\nYear 1 Balance: {year1}\nYear 2 Balance: {year2}\nYear 3 Balance: {year3}")
.如果Python2或3<3.6,则为格式

print("Starting Balance: {}\nYear 1 Balance: {}\nYear 2 Balance: {}\nYear 3 Balance: {}".format(startingBalance, year1, year2, year3))
无需将str()放在此处:

input()始终返回一个字符串

如果需要(我猜是)表格而不是一堆空格(丑陋),请使用“\t”:


这里也一样,请使用f-strings或.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=(起始余额*1.04)
第2年=(第1年*1.04)
第三年=(第二年*1.04)
可以换成

def利息(余额):
返回余额*1.04
第1年=利息(起始余额)
第2年=利息(第1年)
但这似乎仍然是重复的,对吗? 现在还可以尝试对-循环使用

current\u balance=startingBalance
对于范围(4)中的年份:
当前余额=利息(当前余额)
打印(当前余额)
现在,在每个循环中,您可以打印新余额的值! 最后在printg行中添加一个漂亮的输出,您可以得到如下结果:

def利息(余额,年):
收益余额*(1.04**年)
def打印单位收益(余额,年度):
标题='年度|余额|利润'
打印(页眉)
打印('-'*len(页眉))
对于范围内的年份(1年以上):
新余额=利息(余额,年度)
打印(“%5d |%10.2f |%10.2f%”(年度,新余额,新余额-余额))
打印()
def main():
打印单位增益(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

我希望这对您有所帮助!

这是一个针对网络站点的问题,您介意将其中一个回复标记为答案吗?这样问题将被关闭。
print("Year   | Balance | Profit " + "\n" + "Year 1  " + str(year1) + "       " + year1Profit  + "\n" + "Year 2  " + str(year2) + "       " + year2Profit  + "\n" + "Year 3  " + str(year3) + "       " + year3Profit)
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)
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