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\nage is %s\nsex is %s\niph 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\nage is %s\nsex is %s\niph 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"\n"
    print "make a choice 1:add user,2:list user,3:search user,4:modify user,5,exit!"
    print "\n"
    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里面,每次创建一个字典都是不同的对象,就不会更改之前的字典的值

时间: 2024-10-26 17:42:47

python练习题1的相关文章

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

python练习题:循环打印嵌套列表

好久没写博文了,添加一个练习题,选自<head_first_python>~~ python列表:以中括号开始和结束"[]":列表项以逗号","分隔开,使用赋值操作符"="赋予一个标识符.如: movies=["the holy",1975,"terry jones",91,["graham",["michael","john",&qu

Python练习题 028:求3*3矩阵对角线数字之和

[Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得代码太啰嗦.矩阵这东西,应该有个很现成的方法可以直接计算才对-- 啰嗦代码如下: str = input('请输入9个数字,用空格隔开,以形成3*3矩阵:') n = [int(i) for i in str.split(' ')] #获取9个数字 mx = [] #存储矩阵 for i in ra

Python练习题 027:对10个数字进行排序

[Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获取输入的10个数字,然后用 lst.sort() 就完成排序了.代码如下: s = input('请输入10个数字,以空格隔开:') n = [int(x) for x in s.split(' ')] n.sort() print(n) 输出结果如下: 请输入10个数字,以空格隔开:3 23 4

Python练习题 023:比后面的人大2岁

[Python练习题 023] 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问第一个人,他说是10岁.请问第五个人多大? ----------------------------------------------------- 这题真是--用心算就能算出来好吗?好吧,应该又是要训练递归函数,最近这几题总是跟递归纠缠不清.不过,似乎慢慢理解了递归函数的写法了.本题代码如下:

Python练习题 003:完全平方数

[Python练习题 003]一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ------------------------------------------------- 所谓的“完全平方数”,就是开完根号仍然是整数. 数学渣是这么思考的:假设这个数 i 在10000以内.第一步:x = sqrt(i+100).如果 x == floor(x),则证明 x 是个整数.第二步道理也相同,但要记得把 x**2 把根号还原回来,再加上 168,然后再来

Python练习题 016:猴子吃桃

[Python练习题 016] 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下一个桃子了.求第一天共摘了多少. -------------------------------------------------- 这题得倒着推.第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 -

Python练习题 009:水仙花数

[Python练习题 009] 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方. ---------------------------------------------------------------------- 这题也是送分题,只要能把任意三位数的百位.十位.个位拆解出来就好办了.思路:将任意3位数除以100再向下取整,即可得到百位数.将这个3位数减去(百位数*10

Python练习题 025:判断回文数

[Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. ----------------------------------------------- 做题做到现在,这种题目已经很轻车熟路了.希望下一题能增加点难度啊~~~ x = input('请输入一个5位数:') if x[0] == x[4] and x[1] == x[3]: print('%s是个回文数' % x) else: print('%s不是回文数' % x) 输

Python练习题 015:一颗自由落地的球

[Python练习题 015] 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹多高? ---------------------------------------------------------- 这题其实都可以笔算出来,因为也就是落地10次.看网上给出的结果也是五花八门,也不知道自己算的对不对,请大神们赐教. 我的思路是:除了第1次从100米高度落下,其余的9次都经历了"反弹-落地"的过程,每个过程来回走过的长