2012-12-18 18 views
0

現在我的函數不會將列表coeff中的數字識別爲數字。我試圖將兩個列表中的項目配對,然後根據mul的值將它們分類到不同的列表中。但是,一切都將進入負面清單。我如何確保它正在考慮多個進入每個if語句的數字。看一個數組中的數字

def balance_equation(species,coeff): 
    data=zip(coeff,species) 
    positive=[] 
    negative=[] 
    for (mul,el) in data: 
    if mul<0: 
     negative.append((el,mul)) 
    if mul>0: 
     positive.append((el,mul)) 

編輯; 我彪原來包括這個 balance_equation([ 'H2O', 'A2'],[ '6', ' - 4'])

+2

你可以張貼值的一個例子'species'和'coeff'之前,它不會給出預期輸出? –

+2

什麼是coeff?數字或字符串列表? – Xzhsh

+1

您確實需要發佈示例輸入,期望的輸出和實際輸出,以便我們可以知道代碼的實際錯誤。否則,我們只是猜測。 – abarnert

回答

1

你的問題是,在你的方式調用它(balance_equation(['H2O','A2'],['6','-4'])) ,mul是一個字符串而不是int('6''-4'而不是6-4)。改變你的if語句:

if int(mul)<0: 
    negative.append((el,mul)) 
if int(mul)>0: 
    positive.append((el,mul)) 

這種轉換mul爲整數比較它與0

+0

我認爲他希望在這裏使用'int'而不是'float'......但除此之外,在if前面而不是在整個列表中進行轉換似乎更清晰一些,至少對初學者來說是+1,所以+1。 – abarnert

+0

找出相同的,所以我把它改爲int。 –

+0

這工作,謝謝! – user1819717

1

好了,第一個問題是你的函數只是返回None,只是扔把這兩個名單拿走,所以沒有辦法看到它是否做得正確。

如果你修復了這個問題,你會發現它正確的選擇。

def balance_equation(species,coeff): 
    data=zip(coeff,species) 
    positive=[] 
    negative=[] 
    for (mul,el) in data: 
    if mul<0: 
     negative.append((el,mul)) 
    if mul>0: 
     positive.append((el,mul)) 
    return negative, positive 

>>> n, p = balance_equation(balance_equation('abcdef', range(-3,3)) 
>>> n 
[('a', -3), ('b', -2), ('c', -1)] 
>>> p 
[('e', 1), ('f', 2)] 

所以,有兩種可能性:

  1. 既然你粘貼的代碼顯然不是你正在運行的實際代碼,也許你固定的bug,同時改寫它張貼在這裏。
  2. 你不會用明智的輸入來調用它。例如,如果您向後傳遞參數,因爲species可能是字符串的集合,它們最終都會變爲正值。或者,同樣,如果您將coeffs作爲整數的字符串表示形式傳遞。

如果這是最後一個問題 - 你傳球,​​比方說,'abcdef', ['-3', '-2', '-1', '0', '1', '2', '3'],並且要balance_equation,而不是在調用代碼中的處理是,這很容易。就在zip前加入這一行:

coeff = [int(x) for x in coeff] 

或更改zip到:

data = zip((int(x) for x in coeff), species) 

順便說一句,我假設你在CPython的2.在Python 3,嘗試比較字符串爲0將提高TypeError,而不是總是返回True,而在其他Python 2實現中,它可能總是返回False而不是True ...

0

我想你有你的答案,但也有在Python這樣做的一個簡單的方法:

for (mul, el) in data: 
    append_to = negative.append if mul < 0 else positive.append 
    append_to(el) 

不知道什麼是「應該發生」,以0雖然

+0

這很簡單,但我並不認爲它更簡單。特別是對於一個初學程序員來說,它至少需要一個抽象來思考,而且看起來不那麼明確。 (對於一個經驗豐富的ocaml或haskell程序員來說,另一方面,肯定。) – abarnert

+0

@abarnert批評指出和讚賞。也許只是把它放在「稍後的日期」。 –

相關問題