python学习之变量、数据类型和运算符

我爱海鲸 2023-04-02 01:48:33 python、python学习

简介python基础、py、解释型语言、变量、数据类型和运算符、类型判断、数学函数、中文帮助文档

0、链接上一篇文章:python学习之基础知识

1、数据类型

不同类型的变量可以进行的运算是不同的,所以必须理解变量的类型,python中数据类型可以分为:

  • 内置类型

    • 数值类型:整型int,浮点型float,复数(complex) 3+5j

    • str:字符串

    • bool:布尔值【True,False】

    • None:空值,表示变量没有确定的值

    • list:列表

    • tuple:元组

    • dict:字典

    • set:集合

  • 自定义类型

    • class :类

1.1 基础类型

  • 数值类型:

    • 整型(int): python3中只有int一种,可以表示整数,例如:10,-5,10000

    • 浮点型(float): 表示带小数点的实数,有两种表示法:

      • 小数表示: 1.9 .23

      • 科学计数法: 用e来表示10的指数,1e2就代表了100,注意e前面必须有数值,e后面必须为整数

    • 复数(complex):表示数学上的无理数,形如:a+bj

  • 布尔型(bool):表示事务的两种状态,男女、阴晴、亮暗等,它只有两个值:True,False

  • None:表示空对象,一般用于判断,不同于0和空字符

  • 字符串(str):在python中,用引号(单引号、双引号、三引号)表示字符串

    • 字符串的表示

# 用单引号表示: 'hello'
# 用双引号表示:"我用python"
# 用3个单引号表示:可以表示多行文本,例如:
	'''伟大
	   的
	   祖国
	 '''
# 用3个双引号表示:可以表示多行文本,例如:
	"""生死看淡,
	不服就干"""

转义字符:有些特殊字符无法从键盘输入,可以使用转义字符表示,另外,无论是单引号、双引号还是三引号字符串,其中引号是字符串界定符,引号并不是字符串的内容,那么如何在单引号字符串中表示一个单引号呢,这也可以使用转义字符表示。常见的转义字符

转义字符 描述 转义字符 描述
\' 表示一个普通字符单引号 \n 换行
\" 表示一个普通字符双引号 \r 回车
\''' 一个普通的三单引号 \\ 一个普通的字符\
\""" 一个普通的三双引号 \a 响铃
\t tab键 \b 回删一个字符

字符串编码:计算机只能识别二进制,那么字符串如何存储到计算机里呢

计算机不能直接存储字符串,但我们可以将字符编码,例如用65表示大写字符A,66表示大写字符B....等这种表示方式就是美国类的ASCII码,只能表示127个字符,但对于美国人来说已经足够了。一但能用整数表示字符,我们可以很方便的把整数用二进制表示,那么字符串也就和容易存储到计算机了。
但还有很多其他国家的语言是不能用ASCII表示的,所有ISO组织就推出了unicode码,用来表示任何一种语言的字符,unicode码也称之为万国码,通用码,可以表示任何一种语言的任何一个字符。unicdoe码有多中表示方式,例如:utf-8、utf-16、utf-32等。一般使用较多的是utf-8,utf-8是一种变长的编码,表示一个字符可能用一个字节,也可能是三个字节
中文常用编码一般用GBK编码,用2个字节表示一个汉字

1.2、类型判断

我们可以使用type和isinstance来测试和判断数据类型

#type用法:
  type(obj)
  功能:返回obj的数据类型
  参数:obj是你要测试变量或数值
  示例:
    age = 10
    name = 'hello'
    print(type(name),type(age))
    
    #判断变量是否是指定类型
    if type(age) is int:
       print('是')
    else:
       print('否')

#isinstance用法:
  isinstance(obj,typename)
  功能:判断obj是否是指定类型,是返回True,否返回False
  参数: objobj是你要判断的变量或数值
        typename是指定数据类型,可以是int,float,str等。也可是一个
                 类型的元组,例如:(int,float)
  示例:
    age = 10
	name = 'hello'	
	print(isinstance(age,int))
	print(isinstance(name,(str,int)) #只要name是str或int的一种就返回True
	
	if isinstance(age,int):
	    print('是')
	else:
	    print('否')
	    
#type和isinstance的区别
type判断基本类型是没问题的,但无法判断子类对象是父类的一种
isinstance可以判断子类对象是父类的一种
class A:
    pass

class B(A):
    pass

objA = A()
objB = B()

#输出否
if type(objB) is A:
    print('是')
else:
    print('否')
    
print(isinstance(objB,A))  #True

结论:优先使用isinstance

2、运算符和表达式

在数学上为了计算结果,我们会写一些式子计算,例如:

30 + 5

这是数学中的计算式,python中为了计算也有类似的式子,叫表达式。在表达式中30和5称作操作数,+称之运算符。表达式的目的在于计算结果。表达式构成:

  • 最基本的表达式就是一些数值,变量、函数,例如: 3, a(变量) print('hello')

  • 由基本表达式加上适当的运算符构成复杂的表达式: 3 + a

综合上述,所谓表达式就是由操作数和运算符组成䄦符合python语法的式子。要写表达式首先要学习运算符。关于运算符要知道两件事情

  • 计算顺序 : 是从左向右算还是从右向左算

  • 优先级 : 比如先乘除后加减

2.1 算术运算符

a = 20

b = 10

运算符 说明 示例
- 负号,取原数的相反数 a = 10 print(-a) #-10
+ - * / 加减乘除,同数学上一样 a + b = 30 a - b = 10 a * b = 200 a / b = 2
% 模运算,即求 a整除以b的余数 a % 10 = 0
// 整除 a // b = 2
** 对运算符进行指数(幂)计算 a ** b 表示20的10次方

模运算说明

  • 模运算的符号取决于第二个操作数(右操作数)

  • 模运算的计算公式:r = a % b = a - n * b,其中n是小于a/b的最大整数

  • 整除(//)运算如果有一个操作数是浮点数,结果是浮点数

  • 用途:判断奇偶、判断是否能够整除、最大公约数、水仙花数

数学函数

函数名 函数的说明 示例
abs 取绝对值 abs(-10)
pow(x,y) x的y次方 pow(10,2)求10的平方
round(x,[n]) 浮点数的4舍5入, n代表保留小数的位数 round(3.456)
max() 求给定参数的最大值 max(21,43,65,75,86,32,3,45)
min() 求给定参数的最小值 min(21,43,65,75,86,32,3,45)
math.ceil() 需要导入import math库 向上取整 math.ceil(18.1) #19
math.floor() 需要导入import math库 向下取整 math.floor(18.1) #18
math.sqrt 需要导入import math库 求平方根 math.sqrt(100)

python3.5.2中文帮助文档 https://yiyibooks.cn/xx/python_352/index.html

随机函数

获取随机数,需要引入random库。

import random

函数名 函数说明
random.randrange(start,stop,step) start 指定范围的起始值 包含本身,默认是0;stop 指定范围的结束值 不包含本身; step 步长,默认步长是1。该函数返回一个整数
random.randint(start,end) 返回[start end]之间的一个随机整数,start必须小于end
random.random() 返回一个[0.0,1.0)之间的随机小数

注意

  • 优先级: ** >正负号 > // % * / > + -

  • 从左向右算

  • 在幂运算和一元运算符联合计算时,从右向左算,例如: -1 ** 2 = -1

2.2 赋值运算符

a = 5; b = 10; c = 20

运算符 说明 示例
= 简单赋值, 将b+c的结果赋给a a = b +c #a=30
+= a += b等价于 a = a +b a = 15
-= a -= b等价于 a = a - b a = -5
*= a *= b等价于 a = a * b a = 50
/= a /= b 等价于a = a / b a = 0.5
%= a %= b等价于a = a % b a = 5
//= a //= b等价于 a = a // b a = 0
**= a **= b等价于a = a ** b  

注意:

  • 赋值运算符左边必须是变量

  • 从右向左算

  • 没有赋值表达式

  • 所有赋值运算符优先级相同,赋值运算符优先级非常低,仅高于成员运算符和身份运算符、逻辑运算符

  • 注意在复合赋值中

a = 2
b = 3
a *= b + 2  #等价于 a = a * (b + 2)
print(a)  # a = 10

2.3、关系运算

关系运算就是比较运算,如果表达式成立,返回True,否则返回False。关系运算的结果是布尔值。

运算符 示例 说明
== a == b a和b值相等,结果是True,a和b值不相等结果为False
!= a != b a不等于b 结果为True,否则结果为True
> a > b a大于b结果为True,否则为False
>= a >= b a大于等于b结果为True,否则为False
< a < b a小于b结果为True,否则为False
<= a <= b a小于等于b结果为True,否则为False

注意:

  • 优先级: 比较运算符优先级相同

  • 从左向右算

  • 可以这样算:1 < a < 3 等价于 a > 1 and a < 3

2.4 逻辑运算

逻辑运算符可以用于构造复杂条件。逻辑运算符包括:

  • 逻辑与 and 对应汉语的意思是“并且” 、 “同时”

  • 逻辑或 or 对应汉语意思为"或者"

  • 逻辑非 not 对应汉语意思为”相反“

在逻辑运算中,False、None、0、0.0、‘’(空字符串)被看做假(False),其它的看做真(True)

2.4.1 逻辑与

a b a and b
任意值 b的值
任意值 a的值

表达式 a and b的值为: 如果a为真,结果为b的值,否则结果是a的值

2.4.2 逻辑或

a b a or b
任意值 a的值
任意值 b的值

表达式a or b的值为:如果a为真结果为a的值,否则结果是b的值

2.4.3 逻辑非

a not a
False
True

小结:a为真则表达式为False,否则表达式为True

2.4 短路计算

  • 对于逻辑与表达式 a and b,如果a为假,则不计算b

  • 对于逻辑或表达式 a or b ,如果a为真,则不计算b

2.4.5 注意事项

优先级 not > and >or

2.5 身份运算符

is: 判断两个标识符是否引用自同一个实体【对象】,比较的是两个对象的id是否一样,如果相同为真,否则为假

is not:判断两个标识符是不是引用自不同的实体【对象】如果两个对象的id不同结果为真,否则为假

id()函数获取实体的id(地址)

注意:is和==的区别

  • is用于判断两个变量引用实体是否为同一个【id】

  • ==用于判断两个变量的值是否相同,但id不一定相同

2.6 成员运算符

主要应用在序列中

in:如果在指定的序列中找到指定的值,则返回True,否则返回False

not in:如果在指定的序列中未找到指定的值,则返回True,否则返回False

2.7 if-else表达式

表达式1 if 条件 else 表达式2

如果条件为真假结果是表达式1的值,否则结果是表达式2的值

相关代码

# 位运算

# 二进制: 0 1
'''

       1  1

 8  4  2  1  


'''
a =3

print(bin(a))   # 0b 11 

a=13

print(bin(a))

b = 0b10111   # 0b  二进制   二进制的表示: 0b1000101

print(int(b))

c=-8  #  -0b1000       0000  1000

print(bin(c)) 


c= 0o6430   # 0o 开头的都是八进制   里面的数字不能超过8

print(int(c))

# 开头表示0x  0-9 a-f 
# 应用: FFFFFF   000000  FF0000   00FF00

d=0x9ab16

print(int(d))

'''
& 
|
~
^
<<
>>

'''

print(3 & 2)
'''
 类似and
 1 True  0  False
  0000 0011
& 0000 0010
------------
  0000 0010

 |  类似or
 
  1 True  0  False


'''

print(5 | 3)
'''
   0000 0101
 | 0000 0011
 --------------
   0000 0111
'''

print(~5)  # 取反  将十进制的数字对应的二进制进行取反操作。     

'''
 0000 0101
取反:
 1111 1010

 -6

 1111 1010  减1

 1111 1001  取反

 0000 0110  6


 看第一位(第一位是符号位,只要第一位是1的就是负数,第一位是0的就是整数)

-6:
 0000 0110  

 1111 1001  反码

 1111 1010  补码

'''




# 异或  ^   相同的是0  不同的是1

print(3^5)    
'''
# 步骤:
1. 左边的数字转成二进制
2. 右侧的数字转成二进制
3. 对齐,上下进行比较(相同的是0  不同的是1)
4. 将计算的结果转成十进制

3    0000 0011
5    0000 0101
----------------
     0000 0110     -----> 6

'''



# 左移:

print(2<<1)  # 4

print(2>>1)  # 1


'''
2的二进制:

0000  0010 
左移: m<<n  m*2的n次方
右移:  m>>n  m//2的n次方
'''


print(16<<2)

print(16>>2)

print(-0b1000000)

print(64<<1)
# n1 = int(input('请输入第一个数:'))
# n2 = int(input('请输入第二个数:'))

# # 判断n1 与 n2

# result = n1 > n2     # 结果False  True
#     #    8 > 12   --->False
# print('n1>n2:',result)


# result = n1 == n2
# print('n1==n2:',result)


# m1='hello'
# m2='hello'

# result = m1==m2

# print('m1==m2:',result)

# username= input('输入用户名:')

# uname ='admin123'

# # result = username==uname
# result = username != uname   # 如果两者不相等则会返回True,相等则返回False
# print('用户名的验证结果是:',result)


# is   用户对象的比较

age = 20

age1 = 20
print(id(age))
print(id(age1))

print(age is age1)

money = 2000000
salary = 2000000
print(id(money))
print(id(salary))

print(money is salary)

# and   or   not
# and  逻辑与  
# or   逻辑或
# not  逻辑非

# 逻辑运算符的运算结果也是返回True  False

#  
'''
只要有一边为假False,结果就是False
左          右
True  and  True   ----》True  其他情况
True  and  False  --->False
False and  True ----》False
False and False  ----》False

8>10  and  6<8

False and  True ---->False
 
'admin' == 'admin123' and '123456'=='123456'    ---->False
     False                      True

'''


n1= 8
n2 =5
n3=3

result = n1>=(n2+n3) and n1>n2 

'''
步骤:
1. n1>=(n2+n3)   8  >= 8   True
2. n1>n2    8>5   True
3. True  and True 
4. 结果:True

'''
n2=n2+n3
# n2--->8

result = n1>=n2 and n1==n3
#         True  and  False  ---->False


n4=(n1+n3)-n2  # n4=3

result = n4<n1 and (n4+n3)>n2  # False


'''
or: 或者
手机号  或者  账户名

只要有一边为真True,结果即为真True
True  or  True  ---->True
True  or  False ---->True
False or True  ---->True
False or False  ---->False

''' 

# 判断是否存在用户
username = ''

email ='63478364@qq.com'    

result = username=='admin123' or email =='63478364@qq.com'
       #   False             or          True   ---->True

print('or ---->',result)


a=2
b=5
c=7

result = (a+b)!=c or c>a

print('or--222-->:',result) 


flag = False

result = not flag    # not就是取反
print('not ---->:',result)

 

你好:我的2025