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

今天先继续DAY2的问题,就是python中赋值号和复制的区别。

看了一篇很有帮助的文章,这里附上链接:https://blog.csdn.net/u012768474/article/details/79951518(希望大家都支持原创,禁止恶意转载和抄袭)

里面其实已经很详细的讲述了3者的不同。我这里只做简单的总结:

# encoding: utf-8
'''
@author: ccq
@file: differentscopy.py
@time: 2019/5/22 9:43
'''
# 赋值号,浅拷贝,深拷贝三者的区别

# 赋值号
a = [1, 2, 3, "hello", ["python", "you"]]
b = a
b.append(4)
print("赋值号:", a, b)

# 浅拷贝
c = list(a)
c.append("what")
print("浅拷贝:", a, c)

c[4].append("important")
print("浅拷贝2:", a, c)

# 深拷贝
import copy

d = copy.deepcopy(a)
print("深拷贝:", a, d)

d.append("deepcopy")
print("深拷贝2:", a, d)

d[4].append("thedeep")
print("深拷贝3:", a, d)

# 列表copy
e = a.copy()
e.append("thee")
e[4].append("nomatter")
print("列表拷贝:", a, e)

赋值号 = :赋值操作不会开辟新的内存空间,它只是复制了新对象的引用。如果有

a=[1,2,3,"hello",["python","you"]]
b=a
b.append(4)
print(a,b)

那么结果为:[1, 2, 3, 'hello', ['python', 'you'], 4] [1, 2, 3, 'hello', ['python', 'you'], 4]

简单来说就是当使用赋值号时,注意修改b就是在修改a。(b相当于a的小名)

浅拷贝:我这里使用c=list(a)

c=list(a)
c.append("what")
print(a,c)

那么结果为:[1, 2, 3, 'hello', ['python', 'you'], 4] [1, 2, 3, 'hello', ['python', 'you'], 4, 'what']

可以看到c多了个what,而a没有。(说明c不再是a的小名,而是独立的个体)

但是注意以下情况:

c[4].append("important")
print(a,c)

代码意思是在列表中的列表里追加元素,此时结果为:

[1, 2, 3, 'hello', ['python', 'you', 'important'], 4] [1, 2, 3, 'hello', ['python', 'you', 'important'], 4, 'what']

可以看到都出现了important这个元素。

这就是浅拷贝与深拷贝的区别。浅拷贝只能拷贝一层。

深拷贝:需要引入copy模块

import copy

d = copy.deepcopy(a)

再进行追加操作

d.append("deepcopy")
print("深拷贝2:", a, d)

d[4].append("thedeep")
print("深拷贝3:", a, d)

可以看到无论是在末尾追加,还是在嵌套列表中追加,都只会改变d不会改变a。

这里补充一个列表拷贝,就是我在day2里说的使用list自带的copy功能

# 列表copy
e = a.copy()
e.append("thee")
e[4].append("nomatter")
print("列表拷贝:", a, e)

经过测试可以看到,列表拷贝属于浅拷贝的一种,大家以后使用要当心

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

问题解决,继续

第一个程序

列表循环-listcirculate

# encoding: utf-8
'''
@author: ccq
@file: listcirculate.py
@time: 2019/5/22 10:26
'''
# 列表循环
list=[1,2,3,4,5,6,7,8,9,10]
print(list[0:-1:2])
print(list[::2])
for i in list:
    print(i)

#接着上次的列表操作继续,记录格式

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

第二个程序

乘法表-multiplicationtables

# encoding: utf-8
'''
@author: ccq
@file: multiplicationtables.py
@time: 2019/5/22 10:33
'''
# 乘法口诀表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(i, "*", j,"=",i*j,end=" ")
    print("")

#权当娱乐

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

第三个程序

元组-Tuple

# encoding: utf-8
'''
@author: ccq
@file: Tuple.py
@time: 2019/5/22 15:58
'''
# 元组
tuple = ("apple", "banana", "cat", "dog")
print(tuple.count("apple"))
print(tuple.index("apple"))

#元组只有这两个操作,元组是不可更改的。

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

第四个程序

购物车-shoppingCart

# encoding: utf-8
'''
@author: ccq
@file: ShoppingCart.py
@time: 2019/5/22 16:03
'''
# 购物车
'''
要求:
程序开始时,输入工资,然后打印商品列表
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购商品和余额
'''

print("请输入您的工资:")
# 输入工资并转换成Int型
salary = int(input())
# 这里使用元组,以防被更改
commoditylist1 = ("1号商品:apple 10元", "2号商品:banana 20元", "3号商品:cat 30元", "4号商品:dog 40元")
commoditylist2 = ("1号商品:apple", "2号商品:banana", "3号商品:cat", "4号商品:dog")
commodityprice = [10, 20, 30, 40]
# 创建一个空的列表
buylist = []
# 进入循环
while True:
    # 如果余额低于最便宜商品的价格,退出
    if salary < 10:
        print("你没有足够的钱!")
        print("您的余额为:", salary)
        break
    print(commoditylist1)
    print("你想选择几号商品?")
    print("输入q退出...")
    # 读入序号或退出按钮
    choice1 = input()
    # 如果是退出按钮,就退出
    if choice1 == "q":
        break
    # 不是退出按钮,转换成int型
    choice = int(choice1)
    # 如果输入的商品编号小于1或者大于4,报错
    if choice < 1 or choice > 4:
        print("请输入正确的商品编号!")
    # 如果是正确的商品编号,判断能否购买
    else:
        # 如果余额不够买商品,报错
        if commodityprice[choice - 1] > salary:
            print("你没有足够的钱!")
            print("您的余额为:", salary)
            print()
            # 这里用continue不用break因为余额可能不够买这件商品,但是也许可以买别的商品,在循环头部加了判断,以防任何商品也买不了
            continue
        else:
            # 余额足够购买商品,就扣钱,并把买的商品添加到购买栏,打印出购买的商品
            salary = salary - commodityprice[choice - 1]
            buylist.append(commoditylist2[choice - 1])
            print("您购买了", choice, "号商品")
            print()

print()
# 结束时打印余额和购买的商品
print("您的余额为:", salary)
print("您购买了:")
for i in buylist:
    print(i)
print("谢谢使用,欢迎下次光临!")

#简易的购物车系统,当做练手。一起学习的朋友可以看看开头的要求,自己写一下,进行对比。

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

今天就学习这么多,加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值