我试图从下面的“year_calc”函数(python3.5)中获得一些返回值的帮助。本质上,代码用于返回“b”,因为每次迭代都需要将“b”的新起始值传递给“year\u calc”—我可以让它正常工作。但是,我希望从每年的计算迭代中返回“总成本”值,并将其相加,直到完成为止。注意while循环下的“grand_total”。我意识到这并不像我所说的那样有效——只是添加它,这样它就可以让我的目标更加清晰。我只是不知道如何提取返回的特定值。有什么见解吗?在
def main():
archive_total = float(input('Enter archive total (GB): '))
transfer_rate = float(input('Enter transfer rate (Gbps): '))
days_to_transfer = ((((archive_total*8/transfer_rate)/60)/60)/24)
xfer_per_day = archive_total/days_to_transfer
day_cost = xfer_per_day * 0.007 / 30
days = 365
total_days = 0
sum = 0
b = xfer_per_day * 0.007 / 30
total_years = 1
grand_total = 0.0
total_cost = 0.0
while total_years < years_to_transfer + 1:
b = year_calc(day_cost, days, total_days, sum,b,total_years,total_cost)
total_years += 1
grand_total += total_cost
def year_calc(day_cost,days,total_days,sum,b,total_years,total_cost):
while total_days < days -1:
b += day_cost
sum += b
total_days += 1
total_cost = sum + day_cost
print('Year',total_years,'cost: $', format(sum + day_cost, ',.2f'))
return (b, total_cost)
main()
嗯,看起来有点像是用Python编写VBA。。。:-)
好吧,首先:我不认为你想把总成本传递到功能年计算中,因为你不依赖于你得到的任何值。从定义中删除该行:
下一步:计算total_cost的新值并从函数返回一个元组。这是非常正确的。在
现在,当调用year\u calc时,应该从调用函数中删除total_cost变量。但您应该记住,您返回的是元组,因此将该值赋给元组:
^{pr2}$底线:在python中,函数中没有ref变量(或输出变量,…)要发送。加上参数,没别的了。如果要返回两个不同的计算,则返回一个元组,但也将该值分配给一个元组。干净多了。在
如果我正确地理解了您的描述,这将实现您想要的:
year_calc
与任何返回多个项的函数一样,将在元组中返回其值。因此,您只需更改以下行:对于这个:
^{pr2}$这是因为Python处理多个赋值的方式:
另外,您应该尽量避免对变量使用内置名称,如
sum
。我不确定years_to_transfer
是什么-你在代码的其他地方定义了它吗?在相关问题 更多 >
编程相关推荐