Python中的循环增量

时间:2014-12-06 21:33:12

标签: python

我很难理解Python中的循环。 我在Javascript(Modolus 11测试)中有以下代码我想转换为Python:

    var secNumber = this.dob + lastDigits;
    var factors = [4, 3, 2, 7, 6, 5, 4, 3, 2, 1];

    for (var i = 0, sum = 0; i < factors.length; i++) {
      sum += secNumber.substring(i, i + 1) * factors[i];
    }

    // modulus 11 test
    return sum % 11 !== 0 ? false : true;

Python等价物是什么?

5 个答案:

答案 0 :(得分:4)

Python使用for each loops,因此迭代数字会要求您首先生成一系列数字。 Python使用range() type

sum = 0
for i in range(len(factors)):
    pass

请注意sum已明确指定0

通常但是,你只是直接循环对象,而不是生成索引:

sum = 0
for element in factors:
    pass

但如果要总结这些因素,只需使用sum() function

total = sum(factors)

请注意,我避免在那里使用名称sum来避免屏蔽内置函数。

要从字节序列中乘以字节,只需将zip()字节和因子放在一起:

sum = 0
for byte, factor in zip(string, factors):
    sum += byte * factor

可以使用sum()和生成器表达式折叠:

total = sum(byte * factor for byte, factor in zip(string, factors))

仅当stringbytes object而非Unicode str string object时才有效; bytes个对象实际上是0-255范围内的整数序列。

如果您想将字符解释为 digits ,请使用Unicode字符串并使用int()将每个字符转换为整数:

total = sum(int(digit) * factor for digit, factor in zip(string, factors))

使用您提供的样本输入演示后者:

>>> sec_number = '0411994545'
>>> factors = [4, 3, 2, 7, 6, 5, 4, 3, 2, 1]
>>> sum(int(digit) * factor for digit, factor in zip(string, factors))
164
>>> total = sum(int(digit) * factor for digit, factor in zip(string, factors))
>>> total % 11 == 0
False

注意==测试已经产生了一个布尔值;没有必要在Python中使用条件表达式来生成布尔结果。

答案 1 :(得分:2)

在python中阅读有关for的文档:

 for i in range(len(factors)):
     # do stuff

注意:索引从0开始,少结束一次

演示:

>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

我认为这就是你想要的:

>>> s="0411994545"
>>> f="1234567894"
>>> sum([int(x)*int(y) for x,y in zip(s,f)])
238

>>> sum([int(s[i])*int(f[i]) for i in range(len(s))])
238

答案 2 :(得分:2)

ssum = sum(int(x) * y for (x, y) in zip(S, factors))

答案 3 :(得分:1)

在Python中没有“传统的”for循环,但是有许多构造使得Python中的循环非常强大:

for i in range(0, 10):
    print(str(i))

打印从0到9的整数,范围创建一个间隔为[low,high]的迭代器

for i in range(0, 10, 2):
    print(str(i))

打印0,2,4,6,8因为步骤(第三个可选参数设置为2)。

您还可以列举您的因素:

for key, val in enumerate(factors):
    pass

这会为您提供关键因素以及因子中每个元素的相应值。

如果您不需要钥匙,那么只需为您完成工作:

for val in factors:
    # some stuff to do

这会迭代因子中的每个元素。

如果您需要检查特殊条件,可以使用break或continue:

for val in factors:
    if val == 0:
        continue # skips one iteration
    elif val == 1:
        break # cancels the whole loop
    else
        # do some stuff

答案 4 :(得分:1)

Python没有严格的循环C / Javascript样式,但更喜欢更简单的语法。

C / JS风格为:

  • 初始值设定项 var i=0, sum=0
  • 条件测试i< factors.length
  • 迭代器i++
  • 以及重复sum += string.substring(i, i + 1) * factors[i]
  • 的任务

pythonic for循环只有一个变量和一个列表或可迭代的任务,如下所示:

mysum = 0
for i in range(length):
    mysum += int(strings[i])*factors[i]

其中range(length)是一个内置函数,扩展为[0,1,2,3,..,length-1] 并且任务包括冒号后面的缩进块

在JS中,字符串和数字类型会自动转换(即使你不想要它),但在Python中却不是这样。 int()转换为整数,float()转换为浮点数。