2014-03-29 40 views
1

試圖通過在python號碼串進行迭代和打印頭5數的乘積,則第二5,則第三5,等等等等不幸的是,我只是不斷得到前五位數字的產品。最終我會將它們追加到列表中。爲什麼我的代碼卡住了?Python的迭代 - 問題找到的數字的產物在一個字符串

編輯:原始號碼是一個整數,所以我必須做出一個字符串

def product_of_digits(number): 
     d= str(number) 
     for integer in d: 
      s = 0 
      k = [] 
      while s < (len(d)): 
       print (int(d[s])*int(d[s+1])*int(d[s+2])*int(d[s+3])*int(d[s+4])) 
      s += 1 

    print (product_of_digits(a)) 
+0

因爲縮進是錯誤的。將右邊的's + = 1'移到'while'循環中。 – devnull

+0

當你說「讀第二個5」時,你的意思是2到6或6到10? – slezica

+0

並且不要忘記在'while'中改變條件。你無法讀取超出列表大小的內容。 [訪問索引'S + 4'如果'S = LEN(d)-1' ...] – devnull

回答

1

有你的代碼的幾個問題:

1)你s+=1縮進 不正確2)應s+=5代替(假設要的產品1-5,6-10,11-15等否則S + = 1是罰款)

def product_of_digits(number): 
    d = str(number) 
    s = 0 
    while s < (len(d)-5): 
     print (int(d[s])*int(d[s+1])*int(d[s+2])*int(d[s+3])*int(d[s+4])) 
     s += 5 (see point 2) 

print (product_of_digits(124345565534)) 
+0

謝謝!我的意思是1-5,2-6,3-7等,這很好。不知道什麼時候將其移出循環>< – chauxvive

+0

@chauxvive,如果我的回答很有幫助,請隨時[接受它作爲答案](http://meta.stackexchange.com/questions/5234/how-does-接受答案) – sshashank124

+0

謝謝,我是新來的。我真的很感謝faq – chauxvive

1

讓我列出程序中的錯誤。

  1. 你正在遍歷d什麼都沒有。你不需要那個。

  2. s += 1不是while循環的一部分。因此,s將永遠不會增加,導致無限循環。

  3. print (product_of_digits(a))位於函數本身內部,其中a未定義。

  4. 要查找所有連續5個數字的乘積,您不能循環到d的末尾。所以,環路應該已經while s <= (len(d)-5):

  5. 你已經初始化k,但無處使用它。

所以,校正程序看起來像這樣

def product_of_digits(number): 
    d, s = str(number), 0 
    while s <= (len(d)-5): 
     print(int(d[s]) * int(d[s+1]) * int(d[s+2]) * int(d[s+3]) * int(d[s+4])) 
     s += 1 

product_of_digits(123456) 

輸出

120 
720 

你也可以使用一個for循環,這樣

def product_of_digits(number): 
    d = str(number) 
    for s in range(len(d) - 4): 
     print(int(d[s]) * int(d[s+1]) * int(d[s+2]) * int(d[s+3]) * int(d[s+4])) 
+0

我需要將整數轉換爲一個字符串,這就是d的用途。謝謝,我把s + = 1移過來,效果很好。 – chauxvive

0

numpy.product([INT(ⅰ),其中i在STR(S)])

其中s是數。