今日学习
1.基本数据类型
2.与用户交互
3.格式化输出
4.诸多运算符
5.流程控制简介
基本数据类型
| 基本数据类型 | 作用 | 特点 | 
|---|---|---|
| 列表(list) | 能够存储多个数据 并且能够方便的获取整体或者局部 | 数据值可以是任意数据类型 | 
| 字典(dict) | 能够存储多个数据 并且能够方便的获取整体或者局部 并且数据key vlaue形式存在 | 字典取值:字典无法使用索引取值(因为字典是无序的) 可以使用按K取值。并且key不存在是会报错 | 
| 布尔(bool) | 用来表示事物是否可行 是否正确 是否合理 | is 开头 使用频率最高的 程序中所有的数据类型都可以转成布尔值 布尔值为False的数据有 0 None 空字符串 空列表 空字典 … 除上述之外所有的数据对于的布尔值都是True | 
| 元组(tuple) | 能够存储多个数据 并且能够方便的获取整体或者局部与列表的区别在于元组内数据值 | 不能”直接修改” 而列表可以 所以元组有一个小外号>>>:不可变的列表 一般用于存储一些只能看不能改的数据 | 
1.数据类型之列表(list)
2.基本使用
	l1 = [1, 2, 3, 4, 5]
3.语言描述
	中括号括起来 内存可以存放多个数据值 数据值与数据值之间逗号隔开
	数据值可以是任意数据类型
    	l2 = [11, 11.11, 'jason', [11, 22, 33]]
- 列表练习
#列表
#练习
#取出5555和88888
l2 = [11, 22, [111, 222, 333, [1111, 3333, 5555], 88888]]
print(l2[2][3][2])
5555
print(l2[2][4])
88888
2.数据类型之字典(dict)
基本使用
	info_dict = {'姓名': 'jason', '年龄': 18, '爱好': 'read'}
    按K取值
	 info_dict = {'姓名': 'jason', '年龄': 18, '爱好': 'read'}
    '''字典取值:字典无法使用索引取值(因为字典是无序的) 可以使用按K取值'''
    print(info_dict['姓名'])  # jason
    print(info_dict['年龄'])  # 18
    print(info_dict['家产'])  # K不存在直接报
- 字典练习
#取出打印age字符
例:
data = {
    'name': 'jason',
    'others': [
        111,
        222,
        {
            'a1': '嘿嘿',
            'a2': '哈哈',
            'a3': [
                123,
                {
                    'name': 'jason1',
                    'age': 18
                }]}]}
思路
#print(data)
#print(data['others'])
#print(data['others'][2])
运行结果
#{'name': 'jason', 'others': [111, 222, {'a1': '嘿嘿', 'a2': '哈哈', 'a3': [123, {'name': 'jason1', 'age': 18}]}]}
#[111, 222, {'a1': '嘿嘿', 'a2': '哈哈', 'a3': [123, {'name': 'jason1', 'age': 18}]}]
#{'a1': '嘿嘿', 'a2': '哈哈', 'a3': [123, {'name': 'jason1', 'age': 18}]}
#最终打印命令
print(data['others'][2]['a3'][1]['age'])
18
3.基本类型之布尔(bool)
基本使用
	is_right = True  # 真 可以 正确
	is_delete = False  # 假 不可以 错误
4.基本数据类型之元组(tuple)
1.基本使用
	t1 = (111, 222, 333)
2.与列表对比	
	 l1 = [11, 22, 33]
    t1 = (11, 22, 33)
    # print(l1[0])
    # print(t1[0])
    # l1[0] = 'jason'  # 将列表索引0重新绑定数据值jason
    # print(l1)  # ['jason', 22, 33]
    t1[0] = 'tony'  # 将元组索引0重新绑定数据值tony  直接报错!!!
    print(t1)
用户交互
| 输入 | input() | 
|---|---|
| 输出 | print() | 
练习
username=input("请输入您的用户名:")
passwd=input("请输入您的密码:")
# 默认print功能有一个end参数,该参数的默认值为"/n"(代表换行),可以将end参数的值改成任意其它字符
print("aaaa",end='')
print("bbbb",end='&')
print("cccc",end='@')
#整体输出结果为:aaaabbbb&cccc@
格式化输出
格式化输出用到了占位符
| %s 占位符 | 可以接受任意类型的值 | 
|---|---|
| %d 占位符 | 只能接受数字 | 
print('亲爱的%s你好!你的%s月的花费是%d,余额是%d' %('tony',12,103,11))
亲爱的tony你好!你的12月的花费是103,余额是11
运算符
算数运算符
| 算数运算符 | 描述 | 示例 | 
|---|---|---|
| + | 加 | 5+3=8 | 
| – | 减 | 5-3=2 | 
| * | 乘 | 5*3=15 | 
| / | 除 | 5*3=5/3 | 
| // | 整除,只保留整数部分 | 5//3=1 | 
| % | 取余 相除只返回余数 | 5%3=2 | 
| ** | 幂 一个数的n次方 | 5**3=125 | 
例子
x = 10
#新手           #老手
x = x + 100  # x += 100 
x = x - 10   # x -= 10
x = x * 10   # x *= 10
x = x / 10   # x /= 10
ps:学习阶段还是能多敲就多敲!!!
比较运算符
| 比较运算符 | 描述 | 示例 | True/fasle | 
|---|---|---|---|
| == | 等于; 两个对象相等返回true,不相等返回false | 1==1 | true | 
| != | 不等于; 两个对象不相等返回true,相等返回false | 1!=2 | true | 
| > | 大于 | 2>1 | true | 
| >= | 大于等于 | 2>=1 | false | 
| < | 小于 | 1<2 | true | 
| <= | 小于等于 | 1<=2 | false | 
赋值运算符
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简。我们以x=9,y=2为例先来介绍一下增量赋值
增量赋值
| 赋值运算符 | 描述 | 示例 | 
|---|---|---|
| = | 简单赋值运算 | x=10 | 
| += | 加法赋值运算 | x+=1等于x=x+1 | 
| -= | 减法赋值运算 | x-=1等于x=x-1 | 
| *= | 乘法赋值运算 | x * =1等于x=x * 1 | 
| / | 除法赋值运算 | x/=1等于x=x/1 | 
| //= | 取整除赋值运算 | 同上 | 
| %= | 取余赋值运算 | 同上 | 
| **= | 幂赋值运算 | 同上 | 
链式赋值
如果我们把同一个值赋值给多个变量名,可以这么做
z=10
y=z
x=y
x,y,z
(10,10,10)
#链式赋值指的是可以用一行代码搞定这件事
x=y=z=10
x,y,z
(10,10,10)
交叉赋值
我们定义两个变量m与n
m=10
n=20
輸出
m,n
(20,10)
如果想将m和n的值交换
t=m
m=n
n=t
輸出
mn
(20,10)
例2
m = 999
n = 100
# 让m绑定n绑定的数据值 让n帮忙m绑定的数据值
# m = n
# n = m
# print(m)
# print(n)
'''方式1:利用中间变量'''
# tmp = m
# m = n
# n = tmp
# print(m, n)
'''方式2:交叉赋值'''
m, n = n, m
print(m, n)
解压赋值
解压赋值,等号两边的变量名个数必须与右面包含值的个数相同,否则会报错
我们把列表中的多个值取出来依次赋值给多个变量名
nums=[11,22,33,44,55]
a=nums[0]
b=nums[1]
c=nums[2]
d=nums[3]
a,b,c,d,e
(11,22,33,44,55)
一行搞定
a,b,c,d,e=nums #nums包含多個值,就好比一個压缩包,解压赋值因此得名
a,b,c,d,e
(11,22,33,44,55)
如果只想取头尾的几个值,可以用*—匹配
a,b,*_=nums
a,b
(11,22)
例2
name_list = ['jason', 'tony', 'kevin']
# 用三个不同的名字存储三个不同的人名
# name1 = name_list[0]
# name2 = name_list[1]
# name3 = name_list[2]
'''解压赋值:赋值符号的左边至少有两个及以上的名字 才能称之为解压赋值'''
# name1, name2, name3 = name_list
# 1.上述操作需要保证左边的名字和右边的数据值 个数一致
# a, b = name_list
# a, b, c, d, e = name_list
"""特殊情况 带解压的数据非常的多"""
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# a, b, *c, d = l1  # *在解压赋值的时候会自动将多余的数据值组织成列表赋值给*号后面的变量名
# print(a)  # 11
# print(b)  # 22
# print(c)  # [33, 44, 55, 66, 77, 88]
# print(d)  # 99
*c, a, b = l1
print(a)
print(b)
print(c)
ps:字符串,字典,元祖,集合类型都支持解压赋值
逻辑运算符
| 逻辑运算符 | 描述 | 
|---|---|
| and | 逻辑与,用于链接两个条件,两个条件同时成立才会返回true | 
| or | 逻辑或,用于链接两个条件,两个条件任何一个成立才会返回true | 
| not | 取反 | 
连续多个and,可以用多个and链接多个条件,从左到右一次判断,一旦一个条件不成立,就会被判为false
连续多个or,可以用多个or链接多个条件,从左到右一次判断,一旦一个条件成立立,就会被判为false
#1、三者的优先级关系:not>and>or,同一优先级默认从左往右计算。
>>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3
False
#2、最好使用括号来区别优先级,其实意义与上面的一样
'''
原理为:
(1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割
(2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可
(3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运算
'''
>>> (3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3
False 
#3、短路运算:逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回
>>> 10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4
我们用括号来明确一下优先级
>>> (10 and 0) or ('' and 0) or 'abc' or ('egon' == 'dsb' and 333) or 10 > 4
短路:       0      ''            'abc'                    
            假     假              真
返回:                            'abc'
#4、短路运算面试题:
>>> 1 or 3
1
>>> 1 and 3
3
>>> 0 and 2 and 1
0
>>> 0 and 2 or 1
1
>>> 0 and 2 or 1 or 4
1
>>> 0 or False and 1
False 
成员运算符
| 成员运算符 | 描述 | 
|---|---|
| in | 某一个对象包含于另外一个对象则返回true | 
| not in | 某一个对象没有包含另外一个对象则返回true | 
in
#
'hello' in 'hello world' 
true
#
'age' in {'xxx'yyy','mmx'}
true
#判断的是字典的key
18 in {'name':'lili','age':18}
false
not in
注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为not in语义更加明确
#
>>> not 'lili' in ['jack','tom','robin']
True
>>> 'lili' not in ['jack','tom','robin']
True
身份運算符
| 身份运算符 | 描述 | 
|---|---|
| is | is 比较的是id,两个对象的id相同则返回true | 
| is not | 在两个对象的id | 
需要强调的是 “==”双等号比较的是value是否相等,而is比较的是id是否相等
#1. id相同,内存地址必定相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Tony:18'
>>> y='Info Tony:18'
>>> id(x),id(y) # x与y的id不同,但是二者的值相同
(4327422640, 4327422256)
>>> x == y # 等号比较的是value
True
>>> type(x),type(y) # 值相同type肯定相同
(<class 'str'>, <class 'str'>)
>>> x is y # is比较的是id,x与y的值相等但id可以不同
False
原创文章,作者:jamestackk,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/272134.html
