第一模块:开发基础 第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("商品编号必须是数字")

 

posted @ 2018-05-08 18:54 alexchenx 阅读(...) 评论(...) 编辑 收藏