月薪两万五python之路 DAY(五)

第一个程序
三级菜单-ThreeLevelMenu

# encoding: utf-8
'''
@author: ccq
@file: ThreeLevelMenu.py
@time: 2019/5/24 18:00
'''
# 三级菜单
data = {
    '北京': {
        "朝阳": {
            "望京": ["奔驰", "陌陌"],
        },
        "昌平": {
            "沙河": ["oldboy", "test"],
        },
    },
    '山东': {
        "青岛": {},
        "济南": {},
    },
    '广东': {
        "东莞": {},
        "佛山": {},
    },
}
# 判断符
flag = False
while not flag:
    for i1 in data:
        print(i1)
    choice = input("选择进入1>>>:")
    if choice in data:
        while not flag:
            for i2 in data[choice]:
                print("\t", i2)
            choice2 = input("选择进入2>>>:")
            if choice2 in data[choice]:
                while not flag:
                    for i3 in data[choice][choice2]:
                        print("\t", i3)
                    choice3 = input("选择进入3>>>:")
                    if choice3 in data[choice][choice2]:
                        for i4 in data[choice][choice2][choice3]:
                            print(i4)
                        choice4 = input("最后一层,按b键返回>>>4:")
                        if choice4 == "b":
                            pass  # 占位符
                        elif choice4 == "q":
                            flag = True
                    if choice3 == "b":
                        break
                    elif choice3 == "q":
                        flag = True
            if choice2 == "b":
                break
            elif choice2 == "q":
                flag = True

#用最基础的语法和字典实现一个三级菜单栏,以北京区为例,所以下面两个都没有补全。

#这里就表现出了python比较恶心的一点:python非常注重格式,不然它的嵌套就会有问题。但是代码一多,在没有编辑器的情况下,就显得很难去阅读。

===========================================分割线================================================

第二个程序

列表去除重复-RemoveListDuplication

# encoding: utf-8
'''
@author: ccq
@file: RemoveListDuplication.py
@time: 2019/5/27 10:27
'''
# 去除列表重复


list1 = [1, 2, 3, 4, 5, 2, 3, 1, 5, 6, 7, 8, 7, 4, 7, 8, 9, 9, 1, 2]
list2 = []
for i in list1:
    if i in list2:
        continue
    else:
        list2.append(i)

print(list2)

#这个代码其实一点也不复杂,甚至可以说是基操。但是我在写的时候就遇到了一点问题。这里分享一下问题:在java或者别的语言中,想要实现列表去除重复也不难,但是和python的操作不同。我刚开始写的时候,一度写出了如下代码:

for i in list1:

    list2[i]=i

#但是这显然是不对的。以为i这个变量每一次循环后都代表一个list1中的值。但是我确实又需要下标,那怎么办呢?于是又写了以下代码:

for index,i in enumerate(list1):

    list2[index]=i

#这里做个tip:enumerate方法对前面参数的顺序十分重要,如果你是i在前,index在后,就像这样:

for i,index in enumerate(list1):

那么此时i才是下标,index是list1中的元素!千万别搞错!

#继续回到刚才的问题。这样写显然也是不对的,在写python的时候,那就应该变成一个python人,而不是java人或者c++人或者别的什么。

#当然,读懂报错信息也是特别重要的一环。写上面的代码的时候报的错误是:list assignment index out of range 翻译成中文就是:列表分配索引超出范围   

#因为list2是个空列表,所以list2[index]显然是会出现越界的问题。

#记录一下自己犯的错误,避免以后再犯。

===========================================分割线================================================

第三个程序

集合操作-SetOperations

# encoding: utf-8
'''
@author: ccq
@file: SetOperations.py
@time: 2019/5/27 11:03
'''
# 集合操作

list1 = [1, 1, 4, 5, 5, 6, 3, 2, 2]
list1 = set(list1)
print(list1, type(list1))
list2 = set([4, 7, 6, 8, 9, 8])
print(list2, type(list2))

# 交集
print("交集")
print(list1.intersection(list2))
print(list1 & list2)

# 并集
print("并集")
print(list1.union(list2))
print(list1 | list2)

# 差集
print("差集")
print(list1.difference(list2))
print(list1 - list2)

# 子集
print("子集")
print(list1.issubset(list2))

# 父集
print("父集")
print(list1.issuperset(list2))

# 对称差集
print("对称差集")
print(list1.symmetric_difference(list2))
print(list1 ^ list2)

# 判断两个集合是否包含相同的元素,不包含返回true
print("判断两个集合是否包含相同的元素,不包含返回true")
print(list1.isdisjoint(list2))

# 添加
list3 = set([1, 2, 3, 4, 5])
# 添加一项
list3.add(6)
print(list3)
# 添加多项
list3.update([7, 8, 9])
print(list3)

# 随机删除项
print(list3.pop())

# 删除指定项
list3.remove(2)
list3.discard(3)
print(list3)

#集合是无序的!

#都是一些常用的集合操作

===========================================分割线================================================

第四个程序

文件操作-FileOperations

# encoding: utf-8
'''
@author: ccq
@file: FileOperations.py
@time: 2019/5/27 14:35
'''
# 文件操作

# 文件句柄
file1 = open("yesterdayoncemore", "r", encoding="utf-8")

# 读文件
data = file1.read()
print(data)
file1.close()

# 写文件
file2 = open("yesterday", "w", encoding="utf-8")
text = "ttttt\nnnnnnnnnn"
file2.write(text)
file2.close()

# 写文件
file3 = open("yesterdayonce", "a", encoding="utf-8")
file3.write("\n最后一颗子弹留给我")
file3.close()

# 读5-10行的内容
file4 = open("yesterdayoncemore", "r", encoding="utf-8")
print("\nfile4:")
for i in range(10):
    if i < 4:
        file4.readline()
    else:
        print(file4.readline())

# 读5-10行的内容2,如果文件过大会把内存撑满,low
print("fil4,secondway:")
for index, i in enumerate(file4.readlines()):
    if index < 4:
        continue
    print(i.strip())
    if index > 10:
        break
file4.close()

# 读5-10行的内容,比较好的方法
file5 = open("yesterdayonce", "r", encoding="utf-8")
print("\nfile5:")

count = 0
# 这里的ifle5变成了迭代器
for i in file5:
    if count < 5:
        count += 1
        continue
    if count > 10:
        break
    print("\033[31;1m %s \033[0m" % (i))
    count += 1
file5.close()

#对文件进行操作时,一定要注意格式:file = open("yesterdayoncemore", "r", encoding="utf-8")

#第一个表示文件名,第二个表示模式,第三个表示字符编码。

#r模式下只能读,不能写;w模式下只能写不能读;a模式下也是只能写不能读。

#w模式和a模式的区别:w模式每次重新创建一个名字相同的新文件覆盖原文件;而a模式只在末尾追加。

#读5-10行的内容2,这样的写法是一种不太好的写法,因为循环时,要预先把所有的东西都放到内存里来,如果文件过大,则内存会被撑满。

#对文件进行操作的时候,记得操作完要关闭。

===========================================分割线================================================

今天到此为止!明天继续努力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值