2013-03-29 41 views
0

下面的代碼IM試圖實現一個例子:如何在第二次調用方法時添加到列表中而不覆蓋它?

def notes():    
    print "\nPlease enter any notes:" 
    global texts 
    texts = [] 
    if not texts: 
     print "no notes exist." 
     write_note() 
    else: 
     print "this note already exists" 

def write_note(): 
    while True: 
     global txt 
     txt = raw_input(">>> ") 
     if not txt: 
      break 
     else: 
      texts.append(txt) 
    print "\nNote(s) added to report." 
    notes_menu() 

def print_note(): 
    new_report.write("\nNotes:") 
    for txt in texts: 
     new_report.write("\n-%r" % txt) 
    print "Note Printed to %r. Goodbye!" % file_name 
    exit(0) 

我的目標在這裏是爲了使它所以如果/當「筆記()」被稱爲第二個(或無限)時間的新的投入是添加到「文本」列表並且不覆蓋列表。我試圖至少確定在調用「notes()」時列表是否爲空。但每次我這樣做,無論在上次調用期間在「文本」中創建了多少項目,它總是打印出「不存在註釋」。

在這一點上我有點虧本。我已經看了字典功能,但我不知道如何將其納入此代碼。任何人有任何意見/建議?

+0

發現你爲什麼做'txt'全球? – Blender

+3

刪除'texts = []'。 – grc

+1

這看起來好像將它組織爲一個名爲'Notes'的類的方法,並帶有'self.texts'屬性。然而,我對它做的事情感到有些困惑(看起來像'note()'被調用,但是任何註釋已經存在,它會說'請輸入任何註釋:\ n這個註釋已經存在',甚至不允許任何輸入。)並且不清楚'new_report'或'notes_menu'是什麼。 –

回答

0

我同意那些建議更好的設計是創建一個包含文本的類的評論。但是,就代碼而言,在我看來,texts = []應該位於notes()之外的主代碼中,以便該行只能運行一次。

+0

這有助於!我將這兩行移至主體並且測試工作正常!但現在的問題是,如果列表中已列出項目,而不是打印「已存在」。我如何將它添加到列表中而不覆蓋它? –

+1

你已經在使用'texts.append(txt)'了,它應該可以正常工作。 – Simon

+0

HUZZAH謝謝 –

0

不改變太多的你有什麼上面,我可以建議僅要求一個新的筆記,並追加註到現有列表的功能:

>>> notes = [] 
>>> def write_note(notes): 
...  while True: 
...   new_note = raw_input('>>> ') 
...   if not new_note: 
...    break 
...   else: 
...    notes.append(new_note) 

這是不是你所追求的?

0

當您調用texts = []時,將文本設置爲空列表,清空之前設置的任何項目。刪除該行應該有所幫助。

此外,我想你可能想使用.extend()函數。追加到列表的末尾添加項,即:

>>li = [1,2,3] 
>>li2 = [4,5,6] 
>>li.append(li2) 
li = [1,2,3,[4,5,6]] 

凡爲延長()連接兩個列表:

>>li = [1,2,3] 
>>li2 = [4,5,6] 
>>li.extend(li2) 
li = [1,2,3,4,5,6] 

這可以在dive into python

+0

如附圖所示,append和extend之間的區別很重要,但是在這種情況下,問題是將一個字符串「txt」附加到列表「texts」中。 'append()'是在這種情況下使用的恰當方法,因爲使用帶字符串參數的'extend()'首先將字符串分解爲字母,然後將字母附加到列表中。 – Simon

相關問題