2014-12-06 122 views
0

我很难理解Python中的循环。 我在Javascript以下代码(Modolus 11测试),我想转换到Python:在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相当于是什么?

+0

你会用'i'和'sum'做什么? – 2014-12-06 21:35:02

+0

查看上面更新的代码。谢谢。 – 7c9d6b001a87e497d6b96fbd4c6fdf 2014-12-06 21:36:46

+0

你可以显示你的字符串将如何看起来像? – Hackaholic 2014-12-06 21:39:22

回答

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范围内的整数序列。

如果你想解释字符数字,使用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中使用条件表达式来产生布尔结果。

2

读关于在Python文档:

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 
1

在Python有for循环没有“传统的”,但也有许多结构,其使在Python环路非常强大:

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

这将打印从0到9的整数,范围创建与间隔一个迭代[低,高)

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

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

你也可以通过你的因素列举:

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 
2
ssum = sum(int(x) * y for (x, y) in zip(S, factors)) 
1

Python不会严格有C /使用Javascript风格的for循环,但更喜欢一个更简单的语法。

的C/JS样式有:

  • 初始化var i=0, sum=0
  • 一个条件测试i< factors.length
  • 迭代i++
  • 和任务重复sum += string.substring(i, i + 1) * factors[i]

for循环Python的只有一个变量和一个列表或可迭代和一个任务,并且看起来像这样:

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

其中范围(长度)是一个内置的功能扩展为[0 ,1,2,3,..,length-1] 并且任务由冒号后面的缩进块组成

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