第一模块:开发基础 第2章 练习及作业
练习
1. 请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain']
li = ['alex', 'eric', 'rain'] print("_".join(li))
输出:
alex_eric_rain
2. 查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素
for i in li: i = i.strip() if i.startswith("a") or i.startswith("A") and i.endswith("c"): print(i)
输出:
alec aric
3. 写代码,有如下列表,按照要求实现每一个功能
li = ['alex', 'eric', 'rain']
# 计算列表长度并输出 print(len(li)) # 输出3 # 列表中追加元素“seven”,并输出添加后的列表 li.append("seven") print(li) # 输出: ['alex', 'eric', 'rain', 'seven'] # 请在列表的第1个位置插入元素“Tony”,并输出添加后的列表 li.insert(1,"Tony") print(li) # 输出 :['alex', 'Tony', 'eric', 'rain'] # 请修改列表第2个位置的元素为“Kelly”,并输出修改后的列表 li[2] = "Kelly" print(li) # 输出:['alex', 'eric', 'Kelly'] # 请删除列表中的元素“eric”,并输出修改后的列表 li.remove("eric") print(li) # 输出:['alex', 'rain'] # 请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表 print(li.pop(2)) print(li) 输出: rain ['alex', 'eric'] # 请删除列表中的第3个元素,并输出删除元素后的列表 li = ['alex', 'eric', 'rain'] li.append("seven") li.insert(1, "Tony") li.pop(3) print(li) 输出: ['alex', 'Tony', 'eric', 'seven'] # 请删除列表中的第2至4个元素,并输出删除元素后的列表 del li[2:4] print(li) 输出: ['alex', 'Tony', 'seven'] # 请将列表所有的元素反转,并输出反转后的列表 li.reverse() print(li) 输出: ['seven', 'rain', 'eric', 'Tony', 'alex'] # 请使用 for、len、range输出列表的索引(没搞懂这个问题) for i in li: print(li.index(i)) # 请使用enumrate输出列表元素和序号(序号从100开始) for index, i in enumerate(li): print(i, index + 100) 输出: alex 100 Tony 101 eric 102 rain 103 seven 104 # 请使用for循环输出列表的所有元素 for i in li: print(i) 输出: alex Tony eric rain seven
4. 写代码,有如下列表,请按照功能要求实现每一个功能
li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446] # 根据索引输出“Kelly” print(li[2][1][1]) # 请使用索引找到“all”元素并将其修改为“ALL”,如:li[0][1][9]... li[3] = "ALL" print(li) # 输出:['hello', 'seven', ['mon', ['h', 'kelly'], 'all'], 'ALL', 446]
5. 写代码,有如下元组,请按照功能高要求实现每一个而功能
tu = ('alex', 'eric', 'rain') # 计算元组的长度并输出 print(len(tu)) # 输出:3 # 获取元组的第2 个元素,并输出 print(tu[2]) # 输出:rain # 获取元组的第1-2个元素,并输出 print(tu[1:2]) # 输出:('eric',) # 请使用for输出元组的元素 for i in tu: print(i) # 请使用for、len、range输出元组的索引 for i in range(len(tu)): print(i) # 请使用enumrate输出元组元素和序号(序号从10开始) for index, i in enumerate(tu): print(i, index + 10)
6. 有如下变量,请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) # 讲述元组的特性: # 元组元素不可变,元组里面元素包含可变元素,则该元素可变 # 请问 tu变量中的第一个元素“alex”是否可被修改? # 不可被修改 # 请问tu变量中的“k2”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个“Seven” # 可以修改。 tu[1][2]["k2"].append("Seven") print(tu) # 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个“Seven” # 元组类型,不可修改
7. 字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # 请循环输出所有的key for key in dic: print(key) # 请循环输出所有的value for key in dic: print(dic[key]) # 请循环输出所有的key和balue for key in dic: print(key, dic[key]) # 请在字典中添加一个键值对,"k4":"v4" ,输出添加后的字典 dic["k4"] = "v4" print(dic) # 请修改字典中"k1"对应的值为"alex" ,输出修改后的字典 dic["k1"] = "alex" print(dic) # 请在k3对应的值中追加一个元素44,输出修改后的字典 dic["k3"].append(44) print(dic) # 请在k3对应的值的第1个位置插入个元素18,输出修改后的字典 dic["k3"].insert(1, 18) print(dic)
8. 转换
# 将字符串s= "alex" 转换成列表 s = "alex" s = list(s) print(s) # 将字符串s= "alex" 转换成元组 s = "alex" s = tuple(s) print(s) # 将列表li=["alex","seven"]转换成元组 li = ["alex", "seven"] tu = tuple(li) print(tu) # 将元组tu = ("Alex","seven")转换成列表 tu = ("Alex", "seven") li = list(tu) print(li) # 将列表 li=["alex","seven"]转换成字典且字典的key按照10开始向后递增 dic = {} for index, i in enumerate(li, 10): dic[index] = i print(dic)
9. 元素分类
有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。
即:{'k1':大于66的所有值,'k2':小于66的所有值}
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] dic = {"k1":[],"k2":[]} for i in li: if i > 66: dic["k1"].append(i) elif i < 66: dic["k2"].append(i) print(dic)
输出:
{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55]}
10. 输出商品列表,用户输入序号,显示用户选中的商品
商品li = ["手机","电脑","鼠标垫","游艇"]
允许用户添加商品
用户输入序号显示内容
li = ["手机", "电脑", "鼠标垫", "游艇"] while True: for index, i in enumerate(li): print(index, i) put = input("请输入:商品序号 或 a添加商品,q退出: ") if put.isdigit(): put = int(put) if put >= len(li): print("没有你选择的商品.") else: print("你已选择:", li[put]) elif put == "a": add = input("请输如你要添加的商品: ") li.append(add) elif put == "q": print("bye bye.") break else: print("输入不正确.")
运行结果:
0 手机 1 电脑 2 鼠标垫 3 游艇 请输入:商品序号 或 a添加商品,q退出: 3 你已选择: 游艇 0 手机 1 电脑 2 鼠标垫 3 游艇 请输入:商品序号 或 a添加商品,q退出: a 请输如你要添加的商品: 萝卜 0 手机 1 电脑 2 鼠标垫 3 游艇 4 萝卜 请输入:商品序号 或 a添加商品,q退出: 4 你已选择: 萝卜 0 手机 1 电脑 2 鼠标垫 3 游艇 4 萝卜 请输入:商品序号 或 a添加商品,q退出: q bye bye.
11. 稍后更新
12. 稍后更新
13. 有两个列表
l1 = [11,22,33]
l2 = [22,33,44]
# 获取内容相同的元素列表 s1 = set(l1) s2 = set(l2) print(s1.intersection(s2)) # 获取l1中有,l2中没有的元素列表 print(s1.difference(s2)) # 获取l2中有,l1中没有的元素列表 print(s2.difference(s1)) # 获取l1和l2中内容都不同的元素 print(s1.symmetric_difference(s2))
14. 利用for循环和range输出
# for循环从大到小输出1-100 for i in range(100,0,-1): print(i) # for循环从小到大输出100-1 for i in range(1,101): print(i) # While循环从大到小输出1-100 count = 100 while count > 0: print(count) count-=1 # while循环从小到大输出100-1 count = 0 while count < 101: print(count) count+=1
15. 使用for循环和range输出9 * 9乘法表
方法一:
for i in range(1, 10): for j in range(1, 10): print("%s x %s = %s" % (j, i, j * i), end="\t") if j == i: print("") break
方法二:
for x in list(range(1, 10)): for y in list(range(1, x + 1)): if x == y: print("%d x %d = %d" % (y, x, x * y)) else: print("%d x %d = %d" % (y, x, x * y), end='\t')
运行结果:
1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
作业
""" 需求: 可依次选择进入各子菜单 可从任意一层往回退到上一层 可从任意一层退出程序 所需新知识点:列表、字典 踩分点: 1.只用一个while循环,且整体代码量少于15行按完成需求/条—25分 2.只用一个while循环,且整体代码量多于15行需求全部完成给90分 3.其他情况按完成需求/条—20分 """ menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车站': { '携程': {} } }, '浦东': {}, }, '山东': {}, } current = [menu] while True: for i in current[-1]: print(i) choose = input("输入进入下一级,b返回上级,q退出 >>") if choose in current[-1]: current.append(current[-1][choose]) elif choose == "b": if len(current) == 1: continue current.pop() elif choose == "q": break else: print("!!输入错误!!")
""" 功能要求: 基础要求: 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 扩展需求: 1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 2、允许查询之前的消费记录 """ import os goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] username = input("请输入用户名:") password = input("请输入密码:") if username != "alex" or password != "123": print("用户名或密码错误!") else: cart = {} salary = "" if os.path.exists("salary_file.txt"): salary_f = open("salary_file.txt", "r", encoding="UTF-8") salary_content = salary_f.read() salary_f.close() if salary_content.isdigit(): put = input("检测到你还有剩余金额 %s,y继续使用余额,n输入新金额:" % (salary_content)) if put == "y": salary = salary_content elif put == "n": salary = input("请输入你的工资:") if salary.isdigit(): salary = salary else: print("工资必须是数字.") else: print("输入错误") else: print("存储余额文件包含非数字字符.") salary = input("请输入你的工资:") if salary.isdigit(): salary = salary else: print("工资必须是数字.") else: salary = input("请输入你的工资:") if salary.isdigit(): salary = salary else: print("工资必须是数字.") while True: salary = int(salary) print("商品列表".center(20, "-")) for index, i in enumerate(goods): print("%s\t%s\t%s" % (index + 1, goods[index]["name"], goods[index]["price"])) choose = input("请输入商品编号进行购买(q.进行结算, h.查看上次购物):") if choose.isdigit(): choose = int(choose) - 1 if choose >= len(goods): print("没有你选择的商品.") elif salary >= goods[choose]["price"]: if cart.get(goods[choose]["name"]) == None: cart[goods[choose]["name"]] = [goods[choose]["price"], 1] else: cart[goods[choose]["name"]][1] += 1 print("添加\033[1;31;40m%s\033[0m 到购物车成功." % (goods[choose]["name"])) salary -= goods[choose]["price"] else: print("你的余额不足,你还有: %s" % (salary)) elif choose == "q": # 打印购物车 if len(cart) == 0: print("你啥都没买,你的余额还是:%s" % (salary)) break else: print("你购买了以下商品".center(50, "-")) print("序号 商品名称 单价 数量 总价") total = 0 for index, i in enumerate(cart): print("%s %s %s %s %s" % ( index + 1, i, cart[i][0], cart[i][1], cart[i][0] * cart[i][1])) total += cart[i][0] * cart[i][1] print("你的总消费为:%s" % (total)) print("你的余额为:%s" % (salary)) salary_file = open("salary_file.txt", "w", encoding="UTF-8") salary_file.write(str(salary)) salary_file.close() cart_file = open("cart_file.txt", "w", encoding="UTF-8") cart_file.write(str(cart)) cart_file.close() break elif choose == "h": if os.path.exists("cart_file.txt"): cart_file = open("cart_file.txt", "r", encoding="UTF-8") content = eval(cart_file.read()) total_last = 0 print("上次购物明细".center(50, "*")) print("序号 商品名称 单价 数量 总价") for index, i in enumerate(content): print("%s %s %s %s %s" % ( index + 1, i, content[i][0], content[i][1], content[i][0] * content[i][1])) total_last += content[i][0] * content[i][1] print("上次总消费为:%s" % (total_last)) cart_file.close() print("上次购物明细 end".center(50, "*")) else: print("没有上次购物记录") else: print("商品编号必须是数字")