Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何简化我的Python程序?_Python_Loops - Fatal编程技术网

如何简化我的Python程序?

如何简化我的Python程序?,python,loops,Python,Loops,我正在尝试在互联网上发现的复利问题: A=p(1+r)n,其中p是投资金额,r是年百分比率(十进制5.0%=0.050),n是投资年数 3个代表投资、费率和条款的列表 investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00] rate = [5.0, 5.0, 10.0, 10.0, 50.00] term = [20, 40, 20, 40, 40] 我的程序是这样编写的,但我觉得我可以使用一种叫做循环的东西,而不是像以前那样把

我正在尝试在互联网上发现的复利问题:

A=p(1+r)n,其中p是投资金额,r是年百分比率(十进制5.0%=0.050),n是投资年数

3个代表投资、费率和条款的列表

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40]
我的程序是这样编写的,但我觉得我可以使用一种叫做循环的东西,而不是像以前那样把所有的东西都写出来,但我不确定如何正确地使用for循环,因为每次我这样做时,我都会把它搞砸:

rateindecimal = [int(rate[0])/100.0, int(rate[1])/100.0, int(rate[2])/100.0), int(rate[3])/100.0, int(rate[4])/100.0]
我将百分比转换为十进制,但是如何使用循环来运行速率列表并轻松转换它呢

然后我做了这个。我觉得它太重复了,再一次,我觉得我需要一个循环,但我不太擅长使用一个

A1 = int(Investment[0]) * (1 + ratedecimal[0])**int(term[0])
A2 = int(Investment[1]) * (1 + ratedecimal[1])**int*term[1])
等等

print "$" + str(round(A1, 2))
print "$" + str(round(A2, 2))
等等

如果这真的很长,我很抱歉。我只想知道如何循环完成这一切,这样我就不必如此重复

谢谢

  Alist = [int(Investment[i]) * (1 + ratedecimal[i])*int(term[i]) for i in range(0,len(investment)]
这将给出一个包含您预期A1、A2、A3……等的列表

这将给出一个包含您想要的A1、A2、A3…等的列表

使用
zip()
将它们压缩在一起,然后
.format()
输出:

for investment, rate, term in zip(investments, rates, terms):
    A = investment * (1 - rate / 100) ** term

    print '${0:.02f}'.format(A)
使用
zip()
将它们压缩在一起,然后使用
.format()
输出:

for investment, rate, term in zip(investments, rates, terms):
    A = investment * (1 - rate / 100) ** term

    print '${0:.02f}'.format(A)

为什么不尝试以下基本方法,这是python中循环的最简单方法之一:

A = list()
# The following will execute the body of the loop for all numbers from 0 to the number
# of items in investment - 1. So in your case i = 0 to 4
for i in range(len(investment)):
   rateindecimal = int(rate[i])/100
   A.append(int(investment[i]) * (1 + ratedecimal)**int(term[i]))
   print "$", str(round(A,2))
但是我不确定舍入,因为我认为因为您经常使用int(), 将不会有要舍入的浮点数。。。也许你应该试试float()


有关python中For循环的更多信息,请查看。

为什么不尝试以下基本方法,这是python中循环的最简单方法之一:

A = list()
# The following will execute the body of the loop for all numbers from 0 to the number
# of items in investment - 1. So in your case i = 0 to 4
for i in range(len(investment)):
   rateindecimal = int(rate[i])/100
   A.append(int(investment[i]) * (1 + ratedecimal)**int(term[i]))
   print "$", str(round(A,2))
但是我不确定舍入,因为我认为因为您经常使用int(), 将不会有要舍入的浮点数。。。也许你应该试试float()


有关python中For循环的更多信息,请查看。

我认为这里有一些循环可以满足您的需要

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40]

# this is how I would use a loop in your first problem
rateindecimal = list()
for i in range(0, len(rate)):
    rateindecimal.append(int(rate[i])/100.0)

# this is how i'd solve your second problem
a = list()
for i in range(0, len(investment)):
    a.append(int(investment[i]) * (1 + rateindecimal[i])**int(term[i]))

# then a loop for the printing
for result in a:
    # print "${0}".format(str(round(result, 2)))
    print '$%.3f' % round(result, 2)

我想这里有一些循环可以满足你的需要

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40]

# this is how I would use a loop in your first problem
rateindecimal = list()
for i in range(0, len(rate)):
    rateindecimal.append(int(rate[i])/100.0)

# this is how i'd solve your second problem
a = list()
for i in range(0, len(investment)):
    a.append(int(investment[i]) * (1 + rateindecimal[i])**int(term[i]))

# then a loop for the printing
for result in a:
    # print "${0}".format(str(round(result, 2)))
    print '$%.3f' % round(result, 2)

对于这样的基本问题,我认为最好保持代码简单。简单的代码易于阅读和理解,并且易于编写

下面是一个使用三个嵌套的
循环的解决方案:

lst_investment_amt = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
lst_rate = [5.0, 5.0, 10.0, 10.0, 50.00]
lst_term = [20, 40, 20, 40, 40]


for amt in lst_investment_amt:
    for rate in lst_rate:
        for term in lst_term:
            r = 1.0 + (rate / 100.0)
            final = amt * r**term
            print("amt: $%6d\trate: %2.1f\tterm: %2d\tfinal: %15.2f" %
                (int(amt), rate, term, final))
    print('') # insert blank line to set off previous amount from next one
请注意,因为我们有三个实际的嵌套循环,所以我可以添加一个
print(“”)
语句来打印一个空行,将每个金额与下一个金额分开

Python有一些非常灵活的特性:列表理解、生成器表达式、
zip()
。但是对于一个如此简单的问题,我真的认为上面的代码是可行的

注意我是如何在这里使用
%
格式代码的。当您执行类似于
%6.2f
的代码时,这意味着“打印一个浮点值,其中总值将为6个字符长,小数点后将有两位数字”。小数点计为一个字符,因此这将是一个格式为
123.45
的数字,小数点前三位,后两位。如果数字太大(例如,
100000.55
),则允许其超出6个字符的限制,但如果数字太小(例如,
1.0
),则会用空格填充

请注意,我使用了
\t
在打印输出中放置制表符、分隔值并使内容垂直排列


这样的代码,嵌套循环,以及带有格式代码的打印语句,可以用在C语言、C++和各种其他语言以及Python中。

< P>对于这样的基本问题,我认为最好是保持代码简单。简单的代码易于阅读和理解,并且易于编写

下面是一个使用三个嵌套的
循环的解决方案:

lst_investment_amt = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
lst_rate = [5.0, 5.0, 10.0, 10.0, 50.00]
lst_term = [20, 40, 20, 40, 40]


for amt in lst_investment_amt:
    for rate in lst_rate:
        for term in lst_term:
            r = 1.0 + (rate / 100.0)
            final = amt * r**term
            print("amt: $%6d\trate: %2.1f\tterm: %2d\tfinal: %15.2f" %
                (int(amt), rate, term, final))
    print('') # insert blank line to set off previous amount from next one
请注意,因为我们有三个实际的嵌套循环,所以我可以添加一个
print(“”)
语句来打印一个空行,将每个金额与下一个金额分开

Python有一些非常灵活的特性:列表理解、生成器表达式、
zip()
。但是对于一个如此简单的问题,我真的认为上面的代码是可行的

注意我是如何在这里使用
%
格式代码的。当您执行类似于
%6.2f
的代码时,这意味着“打印一个浮点值,其中总值将为6个字符长,小数点后将有两位数字”。小数点计为一个字符,因此这将是一个格式为
123.45
的数字,小数点前三位,后两位。如果数字太大(例如,
100000.55
),则允许其超出6个字符的限制,但如果数字太小(例如,
1.0
),则会用空格填充

请注意,我使用了
\t
在打印输出中放置制表符、分隔值并使内容垂直排列


这样的代码,带有嵌套循环和带有格式代码的打印语句,可以用C语言、C++和各种其他语言以及Python。< /P>可能要将索引从0更改为I,而不是将第二个循环更改为“i”。KevinMullin非常感谢你的帮助!不过,有什么办法可以让我绕过A到达第一百位吗?我试过了,但不起作用…@user2006236我调整了答案,以不同的方式输出浮点值。您可以通过更改此字符串中的数字来自行调整,该数字指定要显示的小数位数。“%”。对于第二个循环,3f'可能希望将索引从0更改为i;)@KevinMullin非常感谢你的帮助!不过,有什么办法可以让我绕过A到达第一百位吗?我试过了,但不起作用…@user2006236我调整了答案,以不同的方式输出浮点值。您可以通过更改此字符串中的数字来自行调整,该数字指定要输入的小数位数