1.基本数据类型
2.与用户交互
3.格式化输出
4.诸多运算符
5.流程控制简介
基本数据类型 | 作用 | 特点 |
---|---|---|
列表(list) | 能够存储多个数据 并且能够方便的获取整体或者局部 | 数据值可以是任意数据类型 |
字典(dict) | 能够存储多个数据 并且能够方便的获取整体或者局部 并且数据key vlaue形式存在 | 字典取值:字典无法使用索引取值(因为字典是无序的) 可以使用按K取值。并且key不存在是会报错 |
布尔(bool) | 用来表示事物是否可行 是否正确 是否合理 | is 开头 使用频率最高的 程序中所有的数据类型都可以转成布尔值 布尔值为False的数据有 0 None 空字符串 空列表 空字典 ... 除上述之外所有的数据对于的布尔值都是True |
元组(tuple) | 能够存储多个数据 并且能够方便的获取整体或者局部与列表的区别在于元组内数据值 | 不能"直接修改" 而列表可以 所以元组有一个小外号>>>:不可变的列表 一般用于存储一些只能看不能改的数据 |
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
基本使用 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
基本使用 is_right = True # 真 可以 正确 is_delete = False # 假 不可以 错误
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