2011-02-04 38 views
1

嘿,我很新的python,但我想做一個簡單的註冊系統。我想在添加成員時能夠更新功能,但我無法弄清楚。正如你將在下面的代碼中看到的,一旦我完成了在菜單選項2中添加一個成員,當我回去嘗試菜單選項1時,我剛添加的成員不會顯示出來。我如何使show_members函數重新加載更新的字典?在python中重新加載一個函數?

除了我上面的問題,關於如何改進下面的代碼的任何建議都會受到歡迎。是的,我知道這是非常不完整的,但它是一個在製品。

import sys 
import shutil 
import os 

tmp = os.path.isfile("members.py.tmp") 
if tmp == True: 
    os.remove("members.py.tmp") 
shutil.copyfile("members.py", "members.py.tmp") 

from members import members 

def show_menu(): 
    os.system("clear") 
    print "\n","*" * 12, "MENU", "*" * 12 
    print "1. List members" 
    print "2. Add member" 
    print "3. Delete member" 
    print "99. Save" 
    print "0. Abort" 
    print "*" * 28, "\n" 
    return input("Please make a selection: ") 

def show_members(members): 
    for keys in members.keys(): 
     os.system("clear") 
     print "\nNames", "  ", "Code" 
     print keys, " - ", members[keys] 

def add_member(members): 
    os.system("clear") 
    name = raw_input("Please enter name: ") 
    code = raw_input("Please enter code: ") 
    members[name] = code 
    return members 


#with open("foo.txt", "a") as f: 
#  f.write("new line\n") 

running = 1 

while running: 
    selection = show_menu() 
    if selection == 1: 
     show_members(members) 
     print "\n> " ,raw_input("Press enter to continue") 
    elif selection == 2: 
     add_member(members) 
     print "\n> " ,raw_input("Press enter to continue") 
    elif selection == 99: 
     shutil.copyfile("members.py.tmp", "members.py") 
    elif selection == 0: 
     os.remove("members.py.tmp") 
     sys.exit("Program Aborted") 
    else: 
     os.system("clear") 
     print "That is not a valid option!" 
     print "\n> " ,raw_input("Press enter to continue") 

回答

1

在此代碼:

if selection == 2: 
    add_member(members) 

你正在返回members,但不是做與返回任何有價值的東西。

最簡單的事情做的是將其更改爲:

if selection == 2: 
    members = add_member(members) 
0

我不會每次都重裝一個Python文件。相反,只需將您的成員存儲在字典中,然後使用pickle庫在腳本的開始和結尾加載和保存字典。由於字典是可變的,所以在一個函數中字典的修改應該顯示在其他函數中;您只需在開頭和結尾處撥打pickle.load(file_pathpickle.dump(members, file_path)即可。

要重新加載一個Python模塊,使用reload()功能(但要注意,如果源代碼文件已經改變,只會重新加載!)

另一件事 - 你可能要移動的os.system('clear')show_membersfor循環的

+0

謝謝,我想我明白你的建議是什麼?它會像這樣工作? 「members = pickle.load(members.py.tmp)」 – wKavey 2011-02-04 00:51:48

+0

是的!只需選擇一個不同的文件名。 – 2011-02-04 01:57:43