2014-12-06 120 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()轉換爲浮點數。