# 讲解原则：
# 作用
# 定义
# 还有其他什么用法

# 1. 数字类型
# 1.1 整形 int
# 作用：记录年龄、身份证数、苹果个数。。。。
# 定义：
age = 18
print(type(age))

# 浮点型 float
# 作用：记录薪资，身高，体重
# 定义：
salary = 3.3
height = 1.87
print(type(salary))

# 其他使用？？？到底干什么用？


# 数字类型的其他使用
level = 1
level = level + 1
print(level)
print(10 * 3)

print(10 + 3.3)  # int 与 float 之间可以相加

age = 19
print(age > 18)

# 字符串类型str
# 作用：记录描述性质的状态、 名字、 一段话、 性别。。。
# 定义：用引号（'';"";''' ''';""" """;）包含的一串字符
info = '''
天下只有两种人。比如一串葡萄到手，一种人挑最好的先吃，另一种人把最好的留到最后吃。
照例第一种人应该乐观，因为他每吃一颗都是吃剩的葡萄里最好的；
第二种人应该悲观，因为他每吃一颗都是吃剩的葡萄里最坏的。
不过事实却适得其反，缘故是第二种人还有希望，第一种人只有回忆
'''
print(type(info))

x = '18'
print(type(x))

# xxx # 代表访问变量名字
'''xxx'''  # 代表值
# 其他作用：
# 字符串的嵌套，注意外层用单引号，内层用双引号，反之亦然
'my name is "egon"'
print('my name is \'egon\'')  # 转义

# 字符串之间可以相加,但仅限于str 与str 之间进行，代表字符串的拼接，了解即可，不推荐使用，因为str之间的相加效率极低
print('my name is ' + 'egon')
print("=" * 20)
print("hello world")
print("=" * 20)

# 3. 列表：索引对应值，索引从0开始，0代表第一个
# 作用：记录多个值，并且可以按照索引取指定位置的值
# 定义：在[]内用逗号分隔开多个任意类型的值，一个值称之为一个元素
l = [10, 3.1, 'aaa', ['bbb', 'ccc'], 'ddd']

print(l[1])
print(l[3])
print(l[3][1])  # 列表的嵌套取值
print(l[-1])  # 取值列表的最后一个值
# 其他的用途-- -- 嵌套取值


# 4. egon老师的信息存起来·信息太多了，怎么记录？索引反映的是顺序、位置、对值没有描述的信息

# 字典类型：key对应值，其中key通常为字符串类型，所以key对值可以有描述性
# 作用：用来存多个值，每个值都有唯一一个key与其对应，key对值
# 定义：在{}内用逗号分开各多个key：value
d = {'name': 'yang', 'age': 18, 'gender': 'male'}
print(d['name'])
print(type(d))

# 其他作用
# 需求需要存多个学生的信息，怎么存？L
student_info = [
    {'name': 'yang', 'age': 18, 'hobby': ['ball', 'book', 'read']},
    {'name': 'yang1', 'age': 18, 'hobby': ['ball', 'book', 'read']},
    {'name': 'yang2', 'age': 18, 'hobby': ['ball', 'book', 'read']}

]
# 取值第二个学生的第二个爱好
print(student_info[1]['hobby'][1])

# 5. 布尔类型
# 作用：记录真还是假这两种状态
# 定义：
is_ok=True
is_ok=False
print(is_ok)

# 定义性别方式0  1 ,计算机对数字更亲切
student = [
    {'name':'yang','gender':1},
    {'name':'yang1','gender':0}
]

# 作业10分钟
'''
1. 什么是变量？为何要有变量？
    变量就是可以变化的量，量指的是事物的状态，比如人的年龄、性别，游戏角色的等级、金钱等等

    为了让计算机能够像人一样去记忆事务的某种状态，并且状态是可以发生变化的
    详细的说：
    程序执行的本质就是一系列状态的变化，变是程序执行的直接体现，所以我们需要有一种机制能够反映或者说是
    保存下来程序执行时状态，以及状态的变化
2. 变量的三大组成部分是什么？每部分的作用是什么？
    先定义后引用
        xxx=10
        print(xxx)
        变量名、赋值符号、变量值。
        门牌号、绑定、值
3. 变量名的命令原则、规范、风格
    见名知意、
    字母数字下划线组成、不能数字开头，不能关键字
    纯小写加下划线的组成、驼峰
4. 变量值的三个特征是什么？
    id(18)  内存地址
    type(18)  类型
    18  值
5. is与==的区别
    is：判断的是id，id是值在内存中的身份证号，所以is称之为身份运算！
    ==：判断的是值是否相等，
    
6. id相同，值是否可以相同？
    id相同，值一定相同
    
7. id不同，值是否可以相同？
    id不同，值可以相同
    
    value1 == value2
    value1 is value2
    
8. 用变量的定义说明，int、float、str、list、dict、bool类型用于记录何种状态，每种类型至少写出三个示例，如下所示
    # int 型
    age = 10
    level = 3
    year = 2021
    
    list和dict
    相同点：都能存多个值，称之为容器类型
    不通电：
        list是用索引对应值，索引反映的是位置、顺序
        dict是用key对应值，其中key通常为字符串类型，而str类型具有描述性功能
            所以key对值可以有描述性功能
    
'''