5. 尝试实现一个管理系统
=======通讯录管理系统=======
1.增加姓名和手机
2.删除姓名
3.修改手机
4.查询所有用户
5.根据姓名查找手机号
6.退出
============================
代码如下
tab = ('通讯录管理系统','增加姓名和手机号','删除姓名','修改手机','查询所有用户','根据姓名查找手机','退出') dic = {'张三':'6350555','李四':'6666666','王二':'65656565'} while 1: print('{:=^20}'.format(tab[0])) for i in range(1,len(tab)): print('{},{:<20}'.format(i,tab[i])) print("{:=^28}".format('=')) fc = int(input('请输入序号选择功能:')) #增加姓名和手机 while fc==1: new_name = input('请输入新的姓名:') if new_name in dic: print('用户已存在,请重新输入:') else: new_num = input('请输入%s的手机号码'%new_name) dic[new_name] = new_num print(dic) print('增加完成!') fc = int(input('继续增加请输入1,返回主界面输入0,退出请输入6:')) #删除姓名 while fc==2: del_name = input('请输入要删除的姓名:') if del_name not in dic: print('通讯录中无此姓名,请重新输入:') else: dic.pop(del_name) print('删除完成') fc = int(input('继续删除请输入2,返回主界面输入0,退出请输入6:')) #修改手机号 while fc==3: change_name = input('请输入要手机号的用户:') if change_name in dic: change_num = input('请输入的%s新号码:'%change_name) dic[change_name] = change_num print('修改完成\n姓名:{} 号码:{}'.format(change_name,dic[change_name])) fc = int(input('继续修改请输入3,返回主界面输入0,退出请输入6:')) else: print('通讯录中无此用户,请重新输入:') #查找所有用户 while fc==4: print('所有用户如下:') print(dic) for u in dic.keys(): print(u) fc = int(input('继续请输入4,返回主界面输入0,退出请输入6:')) #根据姓名查找手机号 while fc==5: search_name= input('请输入要查找的用户姓名:') if search_name in dic: print('查找完成\n姓名:{} 号码:{}'.format(search_name,dic[search_name])) fc = int(input('继续查询请输入5,返回主界面输入0,退出请输入6:')) else: print('无此用户名,请确认后重新输入!') #退出 if fc==6: break
5. 随机产生密码:
在26个大小写字母和10个数字组成的列表中,随机生成10个8位密码
答:
import random l= [] for s in range(26): l.append(chr(ord('a')+s)) for s in range(26): l.append(chr(ord('A')+s)) for s in range(10): l.append(chr(ord('0')+s)) ls = [] for x in range (10): s='' for y in range(8): s+= random.choice(l) ls.append(s) print(l) print(ls)
1.通过代码实现如下转换:
• 二进制转换成十进制:v = “0b1111011”
• 十进制转换成二进制:v = 18
• 八进制转换成十进制:v = “011”
• 十进制转换成八进制:v = 30
• 十六进制转换成十进制:v = “0x12”
• 十进制转换成十六进制:v = 87
答:
#二进制转十进制 v= '0b1111011' v= int(v,2) #十进制转二进制 v = 19 v = bin(v) #八进制转十进制 v = '0o11' v = int(v,8) #十进制转八进制 v = 39 v = oct(v) #十六进制转十进制 v = '0xab' v = int(v) #十进制转十六进制 v = 255 v= hex(v)
3.求结果
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1
答:
v1 = 1
v2 = 3
v3 = 0
v4 = 1
v5 = 1
v6 = False
7.求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
答:
a得到的结果是:[0,1,0,1,0,1,0,1,0,1]
b得到的结果是一个生成器,用一下代码可以将生成器里的所有元素打印。
for j in (i%2 for i in range(10)): print(j,end=" ") print()
8.求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
答:
a: 1
b : 2
c: False
d: True
小作业6
1.请写出与 10 < cost < 50 等价的表达式
cost >10 and cost<50
2.Python3 中,一行可以书写多个语句吗?
Python3 中,一个语句可以分成多行书写吗?
答:
python3 中,一行只能输入一条语句
一条语句可以分成多行书写,在行末加上换行符‘\’即可
3.我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四舍五入”的方式取整吗?
new_i = int(i+0.5)
4.请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
答:not优先级高于and高于or
结果是4
5.爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请编程求解该阶梯至少有多少阶?
i = 1 while i: i+=1 if i%2 ==1 and i%3 ==2 and i%5 ==4 and i%6 ==5 and i%7==0: print(i) break
6.假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?
a = x x = y y = z z = a
7.目测以下程序会打印什么?
while True: while True: break print(1) print(2) break else: print(3)
答:会打印出 2
8.member.append(['竹林小溪', 'Crazy迷恋']) 和member.extend(['竹林小溪', 'Crazy迷恋']) 实现的效果一样吗?
答:
不一样,member.append(['竹林小溪', 'Crazy迷恋'])是把圆括号中的列表作为一个元素追加到member,
In [8]: member = [1,2,3,4] In [9]: member.append(['竹林小溪', 'Crazy迷恋']) In [10]: member Out[10]: [1, 2, 3, 4, ['竹林小溪', 'Crazy迷恋']]
member.extend(['竹林小溪', 'Crazy迷恋']) 是把圆括号中的列表作为列表合并到member
In [5]: member = [1,2,3,4] In [6]: member.extend(['竹林小溪', 'Crazy迷恋']) In [7]: member Out[7]: [1, 2, 3, 4, '竹林小溪', 'Crazy迷恋']
9.请问如何将下边这个列表的'小笨蛋'修改为'小坏蛋'?
list1 = [1, [1, 2,['小笨蛋']],3, 5, 8, 13, 18]
答:
list[1][2][0] = '小坏蛋'
10.要对一个列表进行顺序排序,请问使用什么方法?
答:
ls = [1,2,3,5,6,1,6] ls.sort() print(ls)
11.要对一个列表进行逆序排序,请问使用什么方法?
答:
ls = [1,2,3,5,6,1,6] ls.sort(reverse= True) print(ls)
12.什么情况下你需要使用元组而不是列表?
当元组和列表掉下水,你会救谁?
答:
当一个列表定义完成后不需要做任何改变时,使用元祖比较好
比如定义一年中有三十一天的月份,或有三十天的月份。使用元祖较好。
救列表吧,还是比较喜欢会可以想灵活多变的。
13.x, y, z = 1, 2, 3 请问x, y, z是元组吗
答:
是元组。
14.编写一个进制转换程序(提示,十进制转换二进制可以用bin()这个BIF):
t = ('','b','o','h') x = input('请选要输入的进制数:\n 默认输入十进制,b为二进制,0 为八进制\ ,h为十六进制:') if x ==t[1]: num=input('请输入一个数:') #输入的是二进制数 print('{}转为十进制是 {}'.format(num,int(num,2))) print('{}转为八进制是 {}'.format(num,oct(int(num,2)))) print('{}转为十六进制是 {}'.format(num,hex(int(num,2)))) elif x ==t[2]: num=input('请输入一个数:') #输入的是八进制数: print('{}转为十进制是 {}'.format(num,int(num,8))) print('{}转为二进制是 {}'.format(num,bin(int(num,8)))) print('{}转为十六进制是 {}'.format(num,hex(int(num,8)))) elif x == t[0]: #输入的是十进制 num=input('请输入一个数:') print('{}转为二进制是 {}'.format(num,bin(int(num,10)))) print('{}转为八进制是 {}'.format(num,oct(int(num,10)))) print('{}转为十六进制是 {}'.format(num,hex(int(num,10)))) else: #输入的是十六进制数: num=input('请输入一个数:') print('{}转为二进制是 {}'.format(num,bin(int(num,16)))) print('{}转为八进制是 {}'.format(num,oct(int(num,16)))) print('{}转为十进制是 {}'.format(num,int(num,16)))
15.我们根据列表、元祖和字符串的共同特点,把它们三统称为什么?有什么共性
答:统称为 序列类型
都可以索引,切片,都可以使用的成员运算符有:in ,not in
都可以用的算数运算符有 + *
都可用的函数有: max() min() len() .index() .count()
18.猜字游戏,随机产生10以内的整型数,可供用户猜,如果猜对,打印“厉害了!500万属于你”,如果猜错,如果比随机数大,提示,“大了,再给你一次机会”,如果
比随机数小,提示“大胆一点”。用户最多有三次机会
答:
import random x = random.randint(0,10) for i in range(3): num = int(input('请猜下这个数:')) if num == x: print('厉害了!五百万数于你') break elif num > x: print('大了,再给你一次机会') else: print('大胆一点') else: print('游戏结束')
19.盒子里有3个红球,3个蓝色球,4个黄球,现刘柱要从盒子里拿出8个球,问有多少种情况
red = 3 blue = 3 yellow = 4 for r in range(red+1): for b in range(blue+1): for y in range(yellow+1): if r+b+y == 8: print('{}个红球,{}个蓝球,{}个黄球。'.format(r,b,y))
20.打印9 9乘法表
for i in range(1,10): for j in range(1,1+i): print('{}*{}={:>2}'.format(i,j,i*j),end=' ') print()
21.猴子得到一堆桃,当天吃了一半之后,又多吃了1个。以后每天,猴子都吃了剩余的一半桃子之后,又多吃一个。在第10天,只剩下1个桃子。输出这堆桃最初有多少个。
y = 1 for i in range(10): y = (y+1)*2 print('这堆桃子最初有%d个'%y)
总结,
数据类型,相同,不同。
附加文件:
不懂的点。需要重新讲的只知识点,,交给组长:马宝华