python练习题1

需求:

控制台根据用户选择实现:

     1、添加用户(个别信息必填)add user

     2、展示用户列表 list user

     3、根据名字搜索用户信息 search user

     4、根据名字修改用户信息 modify user

     5、退出 exit

listinfo=[]
def add_user():
    print "Please fill in according to the prompt information:"
    choise="y"
    
    while choise=='y':
        dictinfo={}
        name=raw_input("name*:")
        if name=="":
            name=raw_input("name cannot be empty:")
        age=raw_input("age:")
        sex=raw_input("sex:")
        iph=raw_input("iphone*:")
        if iph=="":
            iph=raw_input("iph cannot be empty:")
        
        dictinfo['name']=name
        dictinfo['age']=age
        dictinfo['sex']=sex
        dictinfo['iph']=iph
        listinfo.append(dictinfo) 
        print listinfo
        choise=raw_input("go on? y/n:")
    make_choice()
       
    return listinfo
def list_user(listinfo):
    print "The following information for all users"
    i=1
    for dictinfo in listinfo:
        print "*"*15
        print "%s user:"% i
        print "name is %s
age is %s
sex is %s
iph is %s" % (dictinfo['name'],dictinfo['age'],dictinfo['sex'],dictinfo['iph'])
        
        i+=1
    make_choice()

def search_user(listinfo):

    name=raw_input("Please enter the name of you want to search:")
    for dictinfo in listinfo:

        if dictinfo['name']==name:
            print "name is %s
age is %s
sex is %s
iph is %s" % (dictinfo['name'],dictinfo['age'],dictinfo['sex'],dictinfo['iph'])
        else:
            continue
    make_choice()



def modify_user(listinfo):
    name=raw_input("Who do you want to modify the information:")
    i=0
    for dictinfo in listinfo:
        if dictinfo['name']==name:
            print dictinfo
            modione=raw_input("what do you want to modify:")
            dictinfo[modione]=raw_input("new content:")
            listinfo[i]=dictinfo
            print "sucess"
        
        i+=1
    print listinfo
    make_choice()
        


def make_choice():
    print"
"
    print "make a choice 1:add user,2:list user,3:search user,4:modify user,5,exit!"
    print "
"
    choice=raw_input("please make a choice:")
    if choice=="1":
        add_user()
    elif choice == "2":
        list_user(listinfo)
    elif choice=="3":
        search_user(listinfo)
    elif choice=="4":
        modify_user(listinfo)
    elif choice=="5":
        print'DONE!'
        exit()
    else:
        print "please enter a number between 1-5:"  
        
listinfo=add_user()  

 

遇到的问题,看下图:

 

开始把字典的定义放在了while循环外层,这样,每次往list中添加一个新字典,就会使得之前添加的字典值全部更改为新的值

问题原因,放在外层,列表中添加的字典引用的全是同一个对象,一旦字典值进行了变化,其他字典也跟着变化

解决方法,把字典的定义放在while里面,每次创建一个字典都是不同的对象,就不会更改之前的字典的值

原文地址:https://www.cnblogs.com/sunyucui/p/6786205.html