python 基础02 基本数据类型/与用户交互/格式化输出/运算符/流程控制简介
今日学习
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