day07补充-数据类型总结及拷贝
数据类型总结
按照存一个值 OR 多个值来分
- 字符串、整型、浮点型存一个值
- 列表、元组、字典、集合存多个值
按照有序 OR 无序来分
- 字符串、列表、元组是有序数据
- 字典、集合是无序数据
按照可变 OR 不可变来分
- 列表、字典、集合是可变数据类型
- 整型、浮点型、字符串是不可变数据类型
拷贝 && 浅拷贝 && 深拷贝&& .copy()
如果 l2 是 l1的拷贝对象,l1发生改变改变,则l2也会发生改变: 因为l1与l2指向同一个内存地址id,l1是可变数据类型,值变化时id不改变,因此l2跟着改变
l1 = ['a','b','c',['d','e','f']]
l2 = l1
l1.append('g')
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
l1内存地址为2068776007112,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']
l1内存地址为2068776007112,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']
浅拷贝:如果l2是l1的浅拷贝对象,l1内部的不可变数据发生改变,则l2不变,如果l1内部的可变对象发生改变,l2也会跟着改变
import copy
l1 = ['a','b','c',['d','e','f']]
l2 = l1.copy()
l1.append('g')        # 改变l1中的不可变数据类型,l2不会改变
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
print('*'*80)
import copy
l1 = ['a','b','c',['d','e','f']]
l2 = l1.copy()
l1[3].append('g')        # 改变l1中的可变数据类型,l2也会跟着改变
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
l1内存地址为2068778801352,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']
l2内存地址为2068778814984,打印值为['a', 'b', 'c', ['d', 'e', 'f']]
********************************************************************************
l1内存地址为2068778811720,打印值为['a', 'b', 'c', ['d', 'e', 'f', 'g']]
l2内存地址为2068778802376,打印值为['a', 'b', 'c', ['d', 'e', 'f', 'g']]
深拷贝:如果l2是l1的深拷贝对象,l1内部的不可变对象发生改变,则l2不变,如果l1内部的可变对象发生改变,l2也不会改变。即:l1的改变不会影响l2
import copy
l1 = ['a','b','c',['d','e','f']]
l2 = copy.deepcopy(l1)
l1.append('g')        # 改变l1中的不可变数据类型,l2不会改变
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
print('*'*80)
import copy
l1 = ['a','b','c',['d','e','f']]
l2 = copy.deepcopy(l1)
l1[3].append('g')        # 改变l1中的可变数据类型,l2不会改变
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
l1内存地址为2068778801992,打印值为['a', 'b', 'c', ['d', 'e', 'f'], 'g']
l2内存地址为2068778811464,打印值为['a', 'b', 'c', ['d', 'e', 'f']]
********************************************************************************
l1内存地址为2068778067016,打印值为['a', 'b', 'c', ['d', 'e', 'f', 'g']]
l2内存地址为2068776735112,打印值为['a', 'b', 'c', ['d', 'e', 'f']]
copy() 从结果上来看就是浅拷贝
l1 = ['a','b','c',['d','e','f']]
l2 = l1.copy()
l1.append('g')        # 改变l1中的不可变数据类型,l2不会改变
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
print('*'*80)
l1 = ['a','b','c',['d','e','f']]
l2 = l1.copy()
l1[3].append('g')        # 改变l1中的可变数据类型,l2也会跟着改变
print(f"l1内存地址为{id(l1)},打印值为{l1}")
print(f"l2内存地址为{id(l2)},打印值为{l2}")
猜年龄游戏
附加一个猜年龄的小游戏,再接再厉....
"""
    功能:登录用户猜年龄
    作者:前辈眼中的小白
    日期: 2019/5/25
"""
real_age = 23       # 给定正确的年龄
login_count = 0     # 控制登录次数
count = 0       # 控制猜游戏的次数
get_prize = []      # 接收奖品
# 奖品列表
prize = {'0': 'buwawa',
         '1': 'bianxingjingang',
         '2': 'aoteman',
         '3': 'Python从入门到放弃'
         }
# 定义用户字典
login_info = {'nick': '123',
               'jishuxiaobai': '123'
               }
# 判断登录的次数,最多三次机会
while login_count < 3:
    # 与用户交互输入登录名和密码
    user = input("请输入登录名:").strip()
    pwd = input("请输入密码:").strip()
    if login_info.get(user) != pwd:
        login_count += 1
        print(f"用户名或密码错误,还有{3-login_count}次机会")
        continue
    login_count = 4
    print("登录成功,请开始你的冒险之旅")
    # 核心代码,开始猜游戏
    while count < 3:
        age_str = input("Please enter age:").strip()  # 与用户交互输入猜的年龄
        # 判断是否是数字
        if not age_str.isdigit():
            print("请输入数字!!!")
            continue
        age_int = int(age_str)
        # 核心思想,年龄判断是否猜对
        if age_int == real_age:
            print(f"恭喜,猜对了!!!您可以在以下奖品中选择两件奖品\n{prize}\n")
            Y_or_n_prize = input('是否领奖(领奖输入"Y"或者"y"),否则按任意键放弃领奖退出游戏:').strip()
            # 放弃领奖
            if not (Y_or_n_prize == 'Y' or Y_or_n_prize == 'y'):
                print("您已放弃领奖,退出游戏")
                break
            # 领两件奖品
            for i in range(2):
                print(f"请选择第{i+1}件奖品,输入对应的数字序号:", end='')
                choice = input().strip()
                # 判断输入奖品
                if choice not in ['0', '1', '2', '3']:
                    print('看不懂提示吗?输错了')
                    continue
                get_prize.append(prize[choice])
            print(f"请领取奖品{get_prize}")
            break
        elif age_int > real_age:
            print("猜大了")
        else:
            print("猜小了")
        count += 1
        # 猜错三次后,判断是否继续游戏
        if count == 3:
            game_again = input('是否继续玩游戏,继续请输入"Y"或者"y",退出游戏请输入"N"或者"n":').strip()
            if game_again == 'Y' or game_again == 'y':
                count = 0
            elif game_again == 'N' or game_again == 'n':
                print("你已退出游戏")
                break
            else:
                print("非法输入,请按照要求输入")
day07补充-数据类型总结及拷贝的更多相关文章
- Python 标准类库-数据类型之copy-深拷贝浅拷贝操作
		标准类库-数据类型之copy-深拷贝浅拷贝操作 by:授客 QQ:1033553122 Python中赋值并不会拷贝对象,只是创建目标和对象的绑定关系. copy.copy(x) 返回x的浅拷贝 ... 
- 基本数据类型补充 set集合  深浅拷贝
		一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲'] s = "_&q ... 
- 基础数据类型补充   set集合  深浅拷贝
		一.基础数据类型补充 1. "拼接字符串".join(可迭代对象) 可迭代对象为列表时,输出列表元素与拼接字符串的拼接 li = ['张三', '李四', '王五', '赵四'] ... 
- 基本数据类型补充,set集合,深浅拷贝等
		1.join:将字符串,列表,用指定的字符连接,也可以用空去连接,这样就可以把列表变成str ll = ["wang","jian","wei&quo ... 
- 第八天- 基础数据操作补充 集合set 深浅拷贝
		字符串的操作补充: .join() 方法用于将序列(字符串/列表/元组/字典)中的 元素 以指定的字符连接生成一个新的字符串 str = "人生苦短我用python!" # 用于字 ... 
- 记录我的 python 学习历程-Day07 基础数据类型进阶 / 数据类型之间的转换 / 基础数据类型总结 / 编码的进阶
		基础数据类型 str(字符串) str:补充方法练习一遍就行 s.capitalize() 首字母大写,其余变小写 s = 'dyLAn' print(s.capitalize()) # Dylan ... 
- day07 python列表 集合 深浅拷贝
		day07 python 一.知识点补充 1."".join() s = "".join(('1','2','3','4','5')) #将字符串 ... 
- day07(数据类型的相互转换 ,字符编码)
		一,复习: ''' 1,深浅拷贝 ls = [1,'a',[10]] 值拷贝:直接赋值 ls1 = ls,ls中的任何值发生改变,ls1也随之发生改变 浅拷贝:通过copy()方法 ls2 = ls. ... 
- python之基本数据类型及深浅拷贝
		一.数据基本类型之set集合 set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key set集合,是一个无序且不重复的元素集合 1.创建 ... 
随机推荐
- centos6.2安装kvm虚拟机
			http://www.wenzizone.com/2012/03/06/centos_6-2_install_kvm.html KVM虚拟机简介 kernel-based Virtual Machin ... 
- [WebGL入门]十二,模型数据和顶点属性
			注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:].另外.鄙人webgl研究还不够深入,一些专业词语.假设翻译有误.欢迎大家指 ... 
- LeetCode 977. Squares of a Sorted Array (有序数组的平方)
			题目标签:Array 题目给了我们一组 从小到大的 integers,让我们平方数字 并且 也排序成 从小到达. 因为有负数在里面,平方后,负数在array的位置会变动. 可以设left 和 righ ... 
- Android数据存储之IO
			Android开发中免不了数据本地的存储,今天我们来说一说怎样利用IO流来进行数据存储. 这里我们通过模拟一个QQ登陆界面的小demo来实际操作IO流. 功能描写叙述:点击button能够保存用户输入 ... 
- cgi程序读取post发送的特殊字符,尤其适合于微信公众平台开发中发送被动消息
			[问题]用c编写cgi程序怎样取出html表单post来的数据? [分析]html表单post来的数据形如username="zhang"&&password=&q ... 
- 布局技巧2:合并布局(merge标签)
			我们已经有文章向你描述如何使用<include />标签来重用和共享你的布局代码.这篇文章将向你阐述<merge />标签的使用以及如何与<include />标签 ... 
- POJ 2610:Dog & Gopher
			Dog & Gopher Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4142 Accepted: 1747 ... 
- 换npm yarn的源让install超时去死吧
			安装npm install时,长时间停留在fetchMetadata: sill mapToRegistry uri http://registry.npmjs.org/whatwg-fetch处, ... 
- Coursera Algorithms week4 基础标签表 练习测验:Java autoboxing and equals
			1. Java autoboxing and equals(). Consider two double values a and b and their corresponding Double v ... 
- Eclipse自定义HTML5,JSP模板
			原文:http://blog.csdn.net/xz2585458279/article/details/78833893 我们知道在MyEclipse里面编写的html和jsp模板并不符合html5 ... 
