[英]How do I condense my code? (formatting & calculations
抱歉,我是編碼新手,所以如果這是一個業余問題,我深表歉意。 一個練習要求我創建代碼來計算 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))
這使您免於轉換為字符串並再次轉換回來。
這個問題在Code Review中可能更合適,但是:
year1 = "{0:.2f}".format(year1)
可以替換為:
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}")
.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-strings 或 .format 來格式化你的字符串。
為避免編寫相同的代碼,您可以創建 function 來計算最終余額和利潤。 然后您可以使用其他答案來了解如何格式化變量並返回它們
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)
現在在每個循環中,您可以打印新余額的值,最后在 printg 行中添加一個漂亮的 output:您可以得到如下內容:
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()
產生以下 output:
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
我希望這可以幫助你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.