2011-02-04 1 views
1

Эй, я очень новичок в python, но я пытаюсь создать простую систему регистрации. Я хотел бы иметь возможность обновлять функцию, когда добавляю элемент, но я не могу понять, как это сделать. Как вы увидите в приведенном ниже коде, как только я закончу добавлять участника в пункт меню 2, когда я вернусь и попробую вариант меню 1, член, который я только что добавил, не отображается. Как заставить функцию show_members перезагрузить обновленный словарь?Обновить функцию в python?

В дополнение к моему рассмотренному выше вопросу, любые советы по улучшению кода ниже будут приветствоваться. И да, я знаю, что он очень неполный, но это WIP.

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

Aha! Это прекрасно работает вам. Если вы не возражаете также упомянуть, как сохранить словарь (участников) в файле? – wKavey

0

Я бы не перезаряжал файл Python каждый раз. Вместо этого просто сохраните своих членов в словаре, а затем используйте библиотеку pickle для загрузки и сохранения словаря в начале и конце скрипта. Поскольку словарь изменчив, изменения в словаре в одной функции должны отображаться в других; вам просто нужно позвонить pickle.load(file_path и pickle.dump(members, file_path) в начале и конце.

Чтобы перезагрузить модуль Python, используйте функцию reload() (но учтите, что он будет перезагружать только если файл исходного кода изменился!)

одна вещи - вы можете двигаться os.system('clear') в show_membersза пределы цикла for.

+0

Спасибо, я думаю, я понимаю, что вы предлагаете ... она будет работать, как это? "members = pickle.load (members.py.tmp)" – wKavey

+0

Да! Просто выберите другое имя файла. –