2017-07-30 123 views
-3

是否有在構建python模塊pair,我找不到任何如果不是如何解決以下錯誤?NameError:沒有定義全局名稱'pair'

def main (v1): 
#def find_busy_intervals(v1): 

    if v1 == None or len(v1) == 0 : 
    return None 

    v2 = [] 
    v2.append(pair(v1[0].first,v1[0].second)) 

    for i in xrange(1, len(v1)): 
    x1 = v1[i].first 
    y1 = v1[i].second 
    x2 = v2[len(v2) - 1].first 
    y2 = v2[len(v2) - 1].second 

    if y2 >= x1: 
     v2[len(v2)-1].second = max(y1, y2) 
    else: 
     v2.append(pair(x1,y1)) 

    return v2; 

if __name__=="__main__": 
    v1= [(1,5),(3,7),(4,6),(6,8),(10,12),(11,15)] 
    v2 = main (v1) 
    print v2 

錯誤: -

C:\Dropbox\scripts>python pythonCSharp.py 
Traceback (most recent call last): 
    File "pythonCSharp.py", line 26, in <module> 
    v2 = main (v1) 
    File "pythonCSharp.py", line 9, in main 
    v2.append(pair(v1[0].first,v1[0].second)) 
NameError: global name 'pair' is not defined 
+1

什麼是'pair'?你可能是指「元組」? –

+1

...你認爲它會做什麼?解決名稱錯誤,在這種情況下,通過不引用不存在的東西。 – jonrsharpe

+1

*對*應該做什麼?如果它只有一個雙元組元組,你可以簡單地將它刪除,所以只剩下括號。 – guidot

回答

2

沒有必要對這樣簡單的一個模塊。該pair類,你需要能與namedtuple輕鬆構造:

from collections import namedtuple 
pair = namedtuple('pair', 'first second') 

現在你可以在代碼中使用pair喜歡,但要注意的v1的元素必須是對太:

v1 = [pair(1,5), pair(3,7), pair(4,6), pair(6,8), pair(10,12), pair(11,15)] 

。 ..你不能分配給他們,像

v2[len(v2)-1].second = max(y1, y2) 

因此,也許你這時應該使用自定義類:

class pair: 
    def __init__(self, first, second): 
     self.first = first 
     self.second = second 

雖然最簡單的將只是拋棄這個pair和使用純元組,但你需要重新考慮你的算法,這樣你不需要的等效由於元組/元組不能變異,所以賦值爲v2[len(v2)-1].second = max(y1, y2)

相關問題