python数据类型与运算
- 一、Python中变量的数据类型
- 1、数据类型分类
- 2、数值类型
- 3、布尔类型
- 4、字符串类型
- 5、其他类型(了解)
- 二、Python数据类型转换
- 1、使用Python实现超市的收银系统
- 2、Python数据类型的转换方法
- 3、总结
- 三、Python运算符
- 1、算术运算符
- 3、赋值运算符
- 4、复合赋值运算符
- 5、比较运算符
- 6、逻辑运算符(与或非)
- 7、短路运算
- 8、位运算符
- 四、运算符优先级
- 五、Python中的格式化输出
- 1、格式化输出
- 2、百分号格式化输出
- 3、format方法格式化输出
- 4、format方法简写形式格式化输出(推荐)
- 5、格式化输出中的转义符号
一、Python中变量的数据类型
1、数据类型分类
7种数据类型
数值类型、布尔类型、字符串类型
列表类型、元组类型、集合类型、字典类型
如何判断一个变量到底是什么类型?
答:使用type(变量名称)方法,返回变量的数据类型
2、数值类型
数值类型就是我们日常生活中的数字,数字又分为两种形式:整数 与 小数(带小数点)
整数类型:int类型
小数类型:float类型
3、布尔类型
布尔类型是与逻辑相关一种数据类型,只有两个值:True(真)与False(假)
4、字符串类型
在Python变量定义中,如果其赋值的内容是通过单引号或双引号引起来的内容就是字符串str类型。
5、其他类型(了解)
# 1、list列表类型
list1 = [10, 20, 30, 40]
print(type(list1))
# 2、tuple元组类型
tuple1 = (10, 20, 30, 40)
print(type(tuple1))
# 3、set集合类型:去重
set1 = {10, 20, 30}
print(type(set1))
# 4、dict字典类型:查询、搜索
dict1 = {'name':'itheima', 'age':18}
print(type(dict1))
二、Python数据类型转换
1、使用Python实现超市的收银系统
name = input('请输入您要购买商品名称:')
id = input('请输入您要购买商品编号:')
price = input('请输入您要购买的商品价格:')
print(f'您购买了{name},商品编号为{id},商品价格为{price},欢迎下次光临!')
以上程序虽然可以按照上图完成程序的正常输出,但是遗留了一个非常严重的问题:这个价格price变量无法参与数学运算(如买了两个奥利奥,应该是18.5 * 2),原因在于input()方法返回的所有的结果都是str字符串类型。
怎么解决以上问题呢? 答:使用数据类型转换
2、Python数据类型的转换方法
函数 | 说明 |
---|---|
int(x [,base ]) | 将x转换为一个整数 |
float(x) | 将x转换为一个浮点数 |
complex(real [,imag ]) | 创建一个复数,real为实部,imag为虚部 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
chr(x) | 将一个整数转换为一个Unicode字符 |
ord(x) | 将一个字符转换为它的ASCII整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
bin(x) | 将一个整数转换为一个二进制字符串 |
eval()方法的使用,把字符串中的数字转换为原数据类型
price = input('请输入您购买商品的价格:')
print(eval(price))
print(type(eval(price)))
str1 = ‘10’ 经过eval(str1) 转换为int类型
str2 = ‘10.88’ 经过eval(str1) 转换为float类型
3、总结
数据类型转换方法主要学了4个方法:
int() :转整型
float() :转浮点类型
str() :转字符串类型
eval() :把字符串转换为原数据类型
但是要特别注意:当float浮点类型转换为int整型时,其小数点后面的数据会丢失。
三、Python运算符
1、算术运算符
所谓的算数运算符就是我们日常生活中的加减乘除等待。
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 1 + 1 输出结果为 2 |
- | 减 | 1 - 1 输出结果为 0 |
* | 乘 | 2 * 2 输出结果为 4 |
/ | 除 | 10 / 2 输出结果为 5 |
// | 整除 | 9 // 4 输出结果为 2 |
% | 取余(取模) | 9 % 4 输出结果为 1 |
** | 幂指数 | 2 ** 4 输出结果为 16,即2的4次方,2 * 2 * 2 * 2 |
() | 小括号 | 小括号用来提高运算优先级,即 (1 + 2) * 3 输出结果为 9 |
案例1:了解一下算术运算符
num1 = 10
num2 = 4
# 四则运算 + - * /
print(f'加:{num1 + num2}')
print(f'减:{num1 - num2}')
print(f'乘:{num1 * num2}')
print(f'除:{num1 / num2}')
加:14
减:6
乘:40
除:2.5
案例2:和其他编程语言不太相同的几个算术运算符
num1 = 20
num2 = 6
num3 = 5
# 1、整除
print(f'整除:{num1 // num2}')
# 2、求余数
print(f'余数:{num1 % num2}')
# 3、幂指数
print(f'幂指数:{num2 ** 3}')
# 4、圆括号
print(f'优先级:{(num1 + num2) * num3}')
整除:3
余数:2
幂指数:216
优先级:130
3、赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 赋值 | 将=右侧的结果赋值给等号左侧的变量 |
案例1:把某个值赋值给某个变量
num = 10
1
案例2:多个变量同时进行赋值操作
n = 5
f = 10.88
s = 'hello world'
简写为:
n, f, s = 5, 10.88, 'hello world'
print(n)
print(f)
print(s)
5
10.88
hello world
案例3:多个变量赋予相同的值
a = 11
b = 11
简写为:
a = b = 11
4、复合赋值运算符
复合赋值运算符 = 算术运算符 结合 赋值运算符
复合赋值运算符的计算顺序 = 先执行算术运算符,执行完毕后,把结果在赋值给左边的变量。
案例:综合案例
i = 1
# 相加并赋值,先加1,然后把结果赋值给左边的变量
i += 1
print(f'更新后,i的值为:{i}')
num1 = 9
# 取模并赋值,先求余数,然后在把结果赋值给左边的变量
num1 %= 2
print(f'更新后,num1的值为:{num1}')
num2 = 2
# 幂指数并赋值,先求幂指数,然后把结果赋值给左边的变量
num2 **= 3
print(f'更新后,num2的值为:{num2}')
更新后,i的值为:2
更新后,num1的值为:1
更新后,num2的值为:8
5、比较运算符
特别注意:当我们使用比较运算符对两个变量进行比较时,其返回一个布尔类型的值。
案例:两个数大小的比较
num1 = 10
num2 = 20
print(num1 > num2) # False
print(num1 < num2) # True
print(num1 >= num2) # False
print(num1 <= num2) # True
print(num1 == num2) # False
print(num1 != num2) # True
6、逻辑运算符(与或非)
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 只要有一个运算数是False,结果就是False; 只有所有的运算数都为True时,结果才是True 做取值运算时,取第一个为False的值,如果所有的值都为True,取最后一个值。 | True and True and False–>结果为False True and True and True–>结果为True 1 and 0 and 2–>结果是0;1 and 2 and 3–>结果是3 |
or | x or y | 只要有一个运算数是True,结果就是True; 只有所有的运算数都为False时,结果才是False 做取值运算时,取第一个为True的值,如果所有的值都为False,取最后一个值。 | False or False or True–>结果为True False or False or False–>结果为False 1 or 0 or 2–>结果是1;0 or None or () or ‘’ or {} -->结果是{} |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
注:
当and左侧的表达式结果为false,则右侧表达式不再执行
当or左侧的表达式结果为true,则右侧表达式不再执行
7、短路运算
print(3 and 4 and 5) # 5
print(5 and 6 or 7) # 6
4 > 3 and print('hello world') # 输出hello world
5
6
hello world
在逻辑运算中,不一定逻辑运算符的两边都是纯表达式。也可以是数值类型的数据。
Python把0、空字符串和None看成 False,其他数值和非空字符串都看成 True。
8、位运算符
按位运算符是把数字看作是二进制来进行计算的。 下表中变量 a 为 60,b 为 13,二进制格式如下:
a = 0011 1100 # 60的二进制
b = 0000 1101 # 13的二进制
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
位运算 | 描述 | 示例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
四、运算符优先级
当多种运算符做混合运算时,就会涉及到先运算哪个,后运算哪个问题。以下表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not>and>or | 逻辑运算符 |
在以后的实际开发中,如果有多种运算符进行混合运算时,强烈建议使用小括号来手动的控制运算符的优先级!
b = True or True and False # bad
c = True or (True and False) # good
五、Python中的格式化输出
1、格式化输出
目前为止,我们所有的输出都是直接通过print(变量名称)形式直接打印的。但是实际工作中,我们可能需要对变量的输出进行格式化操作(按照一定格式进行输出)。
2、百分号格式化输出
基本语法:
...
print(变量名称)
print('字符串%格式' % (变量名称))
print('字符串%格式 %格式 %格式' % (变量名称1, 变量名称2, 变量名称3))
%格式常见形式如下:
格式符号 | 转换 |
---|---|
%s | 字符串 |
%d | 有符号的十进制整数 |
%f | 浮点数 |
%c | 字符 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写ox) |
%X | 十六进制整数(大写OX) |
%e | 科学计数法(小写’e’) |
%E | 科学计数法(大写’E’) |
%g | %f和%e的简写 |
%G | %f和%E的简写 |
案例:定义两个变量title=‘大白菜’,price=3.5,按照如下格式进行输出:今天蔬菜特价了,大白菜只要3.5元/斤。
title = '大白菜'
price = 3.5
# 格式化输出“今天蔬菜特价了,大白菜只要3.5元/斤。"
print("今天蔬菜特价了,%s只要%.2f元/斤。" % (title, price))
其实除了%f可以设置小数点位数以外,%d也可以填充序号。
案例:定义两个变量id=1,name=‘itheima’,按照如下格式进行输出:姓名itheima,学号000001
id = 1
name = 'itheima'
print("姓名%s,学号%06d" % (name, id))
3、format方法格式化输出
基本语法:
...
print('字符串{}'.format(变量名称1))
print('{}字符串{}'.format(变量名称1, 变量名称2))
案例:定义两个变量,name=‘孙悟空’,mobile=‘18878569090’,按照以下格式进行输出"姓名:孙悟空,联系方式:18878569090"
name = '孙悟空'
mobile = '18878569090'
print("姓名:{},联系方式:{}".format(name, mobile))
4、format方法简写形式格式化输出(推荐)
在Python3.6以后版本,为了简化format输出操作,引入了一个简写形式:
name = '孙悟空'
mobile = '18878569090'
print(f'姓名:{name},联系方式:{mobile}')
5、格式化输出中的转义符号
在字符串中,如果出现了\t和\n,其代表的含义就是两个转义字符
\t :制表符,一个tab键(4个空格)的距离
\n :换行符
案例:
print('*\t*\t*')
print('hello\nworld')
特别说明:默认情况下,每个print()方法执行完毕后,都会输出一个\n换行符。如果不想让print()方法换行,可以添加一个end参数
print('*', end='')
练习:
print("=" * 10, "我的名片", "=" * 10, "\n姓名:chris", "\nQQ:325555555", "\n手机号:185445654555",
"\n公司地址:徐州人民政府", "\n", "=" * 27, sep="")
==========我的名片==========
姓名:chris
QQ:325555555
手机号:185445654555
公司地址:徐州人民政府
===========================