Python自学指南-第二章-数据类型

1.1【基础】常量与变量

变量:用来存储和访问数据的容器,可以使用变量名称来引用存储在变量中的值。

常量:在程序执行过程中,值不会改变的量。例如数学常量π和e

小结:Python中变量与常量的共同点是都可以用来存储数据,即创建时都会在内存中开辟一块空间,用于保存它的值;而在程序中都可以使用变量名或者常量名来访问所存储的数据。

1.1.1- 变量不需要声明类型

Python有一种称为“动态类型”的特性,可以根据存储在变量中的值自动确定其类型,因此不需要在声明变量时预先指定其类型

PS:在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

实例

name = '航哥'  # 字符串
age = 21  # 整型变量
weight = 141.5  # 浮点型变量

print(name)
print(age)
print(weight)

运行结果

航哥
21
141.5

1.1.2-变量的赋值

在编程语言中,将数据放入变量的过程叫做赋值(Assignment)。Python 使用等号=作为赋值运算符,具体格式为:

name = value

name 表示变量名;value 表示值,也就是要存储的数据。

等号(=)用来给变量赋值。

等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

注意,变量是标识符的一种,它的名字不能随便起,要遵守 python标识符命名规范,还要避免和python内置函数以及python保留字重名。

实例

name = 'Python'


print(name)

运行结果

Python

代码解析

上面实例中的代码就是将字符串python赋值给变量neme
从此以后,name就代表字符串Python,使用name就是使用Python

1.1.3-赋值的方式

第一种:单个直接赋值

age = 21  # 将整数21赋值给变量age
print(age)  # 打印变量age

weight = 124.5  # 将小数124.5赋值给变量weight
print(weight)  # 打印变量weight

name = '航哥'  # 将字符串航哥赋值给变量name
print(name)   # 打印变量name

运行结果

21
124.5
航哥

第二种:多个批量赋值

a = b = c = 1  # 为a、b、c变量赋值为1,该语句等价于 a = 1; b = 1; c = 1
print(a)
print(b)
print(c)

运行结果

1
1
1

第三种:先计算再赋值

sum = 120 + 40  # 将加法的结果赋值给变量
rem = 34 * 43 % 6  # 将余数赋值给变量
www = '百度' + 'https://www.baidu.com/'  # 将字符串拼接的结果赋值给变量
print(www)
print(sum)
print(rem)

运行结果

百度https://www.baidu.com/
160
4

第四种:分别赋值

a, v, b, n = 5, 8, 7, 6  # 将赋值操作右边的各个值,分别赋给左边的每个变量
print(a)
print(v)
print(b)
print(n)

运行结果

5
8
7
6

1.1.4-深度理解赋值

在了解赋值时,理解变量在计算机内存中的表示也非常重要。

为了下面的知识点易于理解;将上面**‘变量’**这个知识点进行深度理解:

变量的定义

  • 变量由三部分组成
  • 标识:表示对象所存储的内存地址,使用内置函数id(obj)来获取
  • 类型:表示的是对象的数据类型,使用内置函数Type(obj)来获取
  • :表示对象所存储的具体数据,使用print(obj)可以将值打印输出

实例

name = '航哥'
tname = name
print(name)
print('标识', id(name))
print('标识', id(tname))
print('类型', type(name))
print('值', name)
name = '无名氏'
print(name)
print('标识', id(name))
print('标识', id(tname))

运行结果

航哥
标识 1815525466736
标识 1815525466736
类型 <class 'str'>
值 航哥
无名氏
标识 2291859990064
标识 1815525466736

看图知义

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

小结:当我们写:name = "航哥" 时,Python解释器干了两件事情:

  1. 在内存中创建了一个'航哥'的字符串对象;
  2. 在内存中创建了一个名为name的变量,并把它指向 '航哥'

而当你把一个变量name赋值给另一个变量tname,这个操作实际上是将变量b指向变量a所指向的数据;

通过id() 可以查看变量值的内存地址,打印出来的 name 和 tname的内存地址是一样的,因此二者其实是一个数据。

但如果继续对 a 进行赋值其他值, 会发现 name 的内存地址变了,而 tname 的并没有变

请牢记:Python中的一切都是对象,变量是对象的引用!

  • 执行name = ‘航哥’,解释器创建字符串‘航哥’对象和变量name,并把name指向‘航哥’对象;
  • 执行tame = name,解释器创建变量tame,并且将其指向变量name指向的字符串‘航哥’对象;
  • 执行name = ‘无名氏’,解释器创建字符串‘无名氏’对象,并把name改为指向‘无名氏’对象,与tame无关。

1.1.5-简易说明常量

说完变量,还要说下常量。

常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:

实例

PI = 3.14159265359

print(PI)

运行结果

3.14159265359

但事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。你完全可以给PI赋值为10,不会弹出任何错误。所以,用全部大写的变量名表示常量只是一个习惯上的用法。

常量通常放置在代码的最上部,并作为全局使用。

2.2【基础】字符串类型

2.2.1-如何定义字符串?

​ 字符串是Python中最常用的数据类型之一。

​ 若干个字符的集合就是一个字符串(String)。

字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有文字。

使用单引号或双引号来创建字符串,使用三引号创建多行字符串。字符串要么使用两个单引号,要么两个双引号,不能一单一双!Python不支持单字符类型单字符在Python中也是作为一个字符串使用。

PS:单字符类型是指只有一个字符的类型,例如C语言中的’a’,Java中的‘b’等。Python不支持这个单字符类型,即使在赋值时,也必须用引号将单字符括起来,使其成为字符串,如"a",“b”。

以下创建字符串的四种写法是等价的

>>> name_1 = '航哥'  # 单引号
>>> name_2 = "航哥"  # 双引号
>>> name_3 =  '''航哥''' # 三个单引号
>>> name_4 = """航哥"""  # 三个双引号
>>> name_1 == name_2 == name_3 == name_4
True

2.2.2-处理字符串中的引号

当字符串内容中出现引号时,我们需要进行特殊处理,否则 Python 会解析出错,例如:

'I'm a great coder!'

由于上面字符串中包含了单引号,此时 Python 会将字符串中的单引号与第一个单引号配对,这样就会把'I'当成字符串,而后面的m a great coder!'就变成了多余的内容,从而导致语法错误。

对于这种情况,我们有两种处理方案:

1) 对引号进行转义

在引号前面添加反斜杠\就可以对引号进行转义,让 Python 把它作为普通文本对待,例如:

str1 = 'I\'m a great coder!'
str2 = "引文双引号是\",中文双引号是“"
print(str1)
print(str2)

运行结果

I'm a great coder!
引文双引号是",中文双引号是“

2) 使用不同的引号包围字符串

如果字符串内容中出现了单引号,那么我们可以使用双引号包围字符串,反之亦然。例如:

str1 = "I'm a great coder!"  # 使用双引号包围含有单引号的字符串
str2 = '引文双引号是",中文双引号是“'  # 使用单引号包围含有双引号的字符串
print(str1)
print(str2)

运行结果和上面相同。

2.2.3-字符串的换行

Python 不是格式自由的语言,它对程序的换行、缩进都有严格的语法要求。要想换行书写一个比较长的字符串,必须在行尾添加反斜杠\,请看下面的例子:

s2 = '我花了一段时间来编写这个 Python 自学指南. \
    请给我更多的支持。 \
    我会保持更新.

上面 s2 字符串的比较长,所以使用了转义字符\对字符串内容进行了换行,这样就可以把一个长字符串写成多行。

另外,Python 也支持表达式的换行,例如:

num = 30 + 3 / 4 + \
    4 * 5
print(num)

2.2.4-Python长字符串

长字符串,就是可以直接换行(不用加反斜杠\)书写的字符串。

Python 长字符串由三个双引号"""或者三个单引号'''包围

在长字符串中放置单引号或者双引号不会导致解析错误。

如果长字符串没有赋值给任何变量,那么这个长字符串就不会起到任何作用,和一段普通的文本无异,相当于被注释掉了。

注意,此时 Python 解释器并不会忽略长字符串,也会按照语法解析,只是长字符串起不到实际作用而已。

当程序中有大段文本内容需要定义成字符串时,优先推荐使用长字符串形式,因为这种形式非常强大,可以在字符串中放置任何内容,包括单引号和双引号。

【实例】将长字符串赋值给变量:

longstr = '''我花了一段时间来编写这个python自学指南.
如果你喜欢这份教学指南请"关注",'点赞',收藏.
你的鼓励将是我创造的最大动力.'''
print(longstr)

运行结果

我花了一段时间来编写这个python自学指南.
如果你喜欢这份教学指南请"关注",'点赞',收藏.
你的鼓励将是我创造的最大动力.

长字符串中的换行、空格、缩进等空白符都会原样输出,所以你不能写成下面的样子:

longstr = '''
          我花了一段时间来编写这个python自学指南.
          如果你喜欢这份教学指南请"关注",'点赞',收藏.
          你的鼓励将是我创造的最大动力.
'''
print(longstr)

虽然这样写格式优美,但是输出结果将变成:


          我花了一段时间来编写这个python自学指南.
          如果你喜欢这份教学指南请"关注",'点赞',收藏.
          你的鼓励将是我创造的最大动力.

字符串内容前后多出了两个空行,并且每一行的前面会多出空格。

2.2.5-字符串对象的方法

字符串对象本身自带了许多非常实用的方法,文章只会为你介绍最常用的那些方法,而剩下的你只要在需要的时候去过一下Python官方文档就 OK了。

去除首尾空格

msg = "    Python自学指南    "
qwe = msg.lstrip()  # 去除左边空格
asd = msg.rstrip()  # 去除右边空格
zxc = msg.strip()  # 去除左右两边空格
print(qwe)
print(asd)
print(zxc)

运行结果

Python自学指南    
    Python自学指南
Python自学指南

判断字符串是否以某字符串开头

msg = "Hello, Python"
msg.startswith("Hello")
msg.startswith("hello")

运行结果

True
False

判断字符串是否以某字符串结尾

msg = "Hello, Python"
asd = msg.endswith("Python")
ads = msg.endswith("python")
print(asd)
print(ads)

运行结果

True
False

分割字符串:以逗号为分割符分割字符串

languages = "Python,Java,Golang"
sdf = languages.split(",")
print(sdf)

运行结果

['Python', 'Java', 'Golang']

判定字符串是否由空格组成

str = "       " 
print (str.isspace())
str = "Runoob example....wow!!!"
print (str.isspace())

运行结果

True
False

判断字符串是否由字母和数字组成

str = "niubi2016"  # 字符串没有空格
print (str.isalnum())
 
str = "www.niubi.com"
print (str.isalnum())

运行结果

True
False

判断字符串是否只由字母或文字组成

str = niubi
print (str.isalpha())

# 字母和中文文字
str = "niubi教程"
print (str.isalpha())

str = "niubi example....wow!!!"
print (str.isalpha())

运行结果

True
True
False

判断字符串是否只由数字组成

str = "123456";
print (str.isdigit())

str = "niubi example....wow!!!"
print (str.isdigit())

运行结果

True
False

PS: isdigit() 方法只对正整数有效,负数及小数均返回不正确。

可以使用以下函数来解决:

实例

# 判断是否为数字
def is_number(s):    
    try:    # 如果能运⾏ float(s) 语句,返回 True(字符串 s 是浮点数)        
        float(s)        
        return True    
    except ValueError:  # ValueError 为 Python 的⼀种标准异常,表⽰"传⼊⽆效的参数"        
        pass  # 如果引发了 ValueError 这种异常,不做任何事情(pass:不做任何事情,⼀般⽤做占位语句)    
    try:        
        import unicodedata  # 处理 ASCII 码的包        
        unicodedata.numeric(s)  # 把⼀个表⽰数字的字符串转换为浮点数返回的函数        
        return True    
    except (TypeError, ValueError):        
        pass    
        return False
 
print(is_number(1))
print(is_number(1.0))
print(is_number(0))
print(is_number(-2))
print(is_number(-2.0))
print(is_number("abc"))

运行结果

True
True
True
True
True
False

判断字符串是否由小写字母组成

str = "NIUBI example....wow!!!"
print (str.islower())

str = "niubi example....wow!!!"
print (str.islower())

运行结果

False
True

判断字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。

str = "This Is String Example...Wow!!!"
print (str.istitle())
 
str = "This is string example....wow!!!"
print (str.istitle())

运行结果

True
False

2.3 【基础】整数与浮点数

Python 支持的数字类型有三种:整数、浮点数和复数。

2.3.1- 整数(Int)

整数就是没有小数部分的数字,Python 中的整数包括正整数、0 和负整数。

Python 整数的取值范围是无限的,不管多大或者多小的数字,Python 都能轻松处理。

a = 100
>>> type(a)
<class 'int'>
>>>
>>> b = -100
>>> type(b)
<class 'int'>

表示数字的时候,有时我们还会用八进制或十六进制来表示:

  • 十六进制:用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2。
  • 八进制:用0o前缀和0-7表示,例如0o12
>>> a = 0x0001 # 十六进制
>>> a
1
>>> type(a)
<class 'int'>
>>>
>>> b = 0o01  # 八进制
>>> b
1
>>> type(b)
<class 'int'>

2.3.2-浮点数(Float)

浮点数也就是小数,如1.23,3.14,-9.01,等等。

>>> a = 1.23
>>> a
1.23
>>> type(a)
<class 'float'>

之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^912.3x10^8是完全相等的。浮点数可以用数学写法,如1.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

>>> 1.23e9
1230000000.0
>>> 12.3e8
1230000000.0

2.3.3-复数(Complex)

复数由实数部分和虚数部分构成,可以用a + bj,或者 complex(a,b) 表示,复数的实部a和虚部b都是浮点型。关于复数,不做科学计算或其它特殊需要,通常很难遇到,这里不做过多解释。

>>> a = 10 + 0.2j
>>> a
(10+0.2j)
>>> type(a)
<class 'complex'>
>>>
>>> b = complex(10, 0.2)
>>> b
(10+0.2j)
>>> type(b)
<class 'complex'>

2.3.4- 常用方法

两数运算

两数相加减

>>> a = 10
>>> b = 20
>>> a + b
30
>>> b - a
10

两数相乘除

>>> a = 10
>>> b = 20
>>> a * b
200
>>> b / a
2.0

取模取余

>>> a = 10
>>> b = 3
>>> a // b
3
>>> a % b
1

计算绝对值

>>> a = -10
>>> abs(a)
10

数值直接取整

>>> a = 3.14
>>> int(a)
3
>>> b = 3.78
>>> int(b)
3

数值四舍五入

>>> a = 3.14
>>> round(a)
3
>>> b = 3.78
>>> round(b)
4

PS:更多计算方法及数字函数可查询python官方文档得知

这里不过多阐述

2.3.5-知识拓展

随机数函数

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

Python包含以下常用随机数函数:

函数描述
choice(seq)从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
randrange([start,]stop[,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
shuffle(lst)将序列的所有元素随机排序
randint(start, stop)指定范围内的整数。

choice() 函数

描述

choice() 方法返回一个列表,元组或字符串的随机项。


语法

以下是 choice() 方法的语法:

import random

random.choice( seq  )

**注意:**choice()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。


参数

  • seq – 可以是一个列表,元组或字符串。

返回值

返回随机项。

实例

import random

print ("从 range(100) 返回一个随机数 : ",random.choice(range(100)))
print ("从列表中 [1, 2, 3, 5, 9]) 返回一个随机元素 : ", random.choice([1, 2, 3, 5, 9]))
print ("从字符串中 'niubi' 返回一个随机字符 : ", random.choice('niubi'))

运行结果

从 range(100) 返回一个随机数 :  88
从列表中 [1, 2, 3, 5, 9]) 返回一个随机元素 :  2
从字符串中 'niubi' 返回一个随机字符 :  u

randrange() 函数

描述

randrange() 方法返回指定递增基数集合中的一个随机数,奇数默认值为1。


语法

以下是 randrange() 方法的语法:

import random

random.randrange ([start,] stop [,step])

**注意:**randrange()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。


参数

  • start – 指定范围内的开始值,包含在范围内。
  • stop – 指定范围内的结束值,不包含在范围内。
  • step – 指定递增基数。

返回值

从给定的范围返回随机项。

实例

import random
 
# 从 1-100 中选取一个奇数
print ("randrange(1,100, 2) : ", random.randrange(1, 100, 2))
 # 从0-100中随机选取一个偶数
print ("randrange(0,100, 2) : ", random.randrange(0, 100, 2))
# 从 0-99 选取一个随机数
print ("randrange(100) : ", random.randrange(100))

运行结果

randrange(1,100, 2) :  97
randrange(1,100, 2) :  98
randrange(100) :  24

shuffle() 函数

描述

shuffle() 方法将序列的所有元素随机排序。


语法

以下是 shuffle() 方法的语法:

import random random.shuffle (lst )

**注意:**shuffle() 是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。


参数

  • lst – 列表。

返回值

返回 None。

实例

import random
 
list = [20, 16, 10, 5];
random.shuffle(list)
print ("随机排序列表 : ",  list)
 
random.shuffle(list)
print ("随机排序列表 : ",  list)

运行结果

随机排序列表 :  [20, 5, 16, 10]
随机排序列表 :  [5, 20, 10, 16]

randint() 函数

描述

randint() 方法用于生成指定范围内的随机整数。

randint(start, stop) 等价于 randrange(start,stop+1).

语法

random.randint() 方法语法如下:

random.randint(start, stop)

参数说明:

  • start – 必需, 一个整数,指定开始值。
  • stop – 必需, 一个整数,指定结束值。

返回值

返回指定范围内的整数。

实例

# 导入 random 包
import random

# 返回一个 1 到 9 之间的数字
print(random.randint(1, 9))

运行结果

8

2.4 【基础】布尔值:真与假

2.4.1- 什么是布尔值

在计算机世界里,都是 01 组成的,代表了开关、真假两种状态。在 Python 里,TrueFalse 代表真假,它都属于布尔型,布尔型只有这两个值。

注意

TrueFalse 首字母都是大写。

2.4.2-布尔值类型的转换和变量(bool())

bool()函数可以将其它类型转换为布尔值类型TrueFalse

实例:

使用bool()对字符串和数字转换布尔值:

print(bool("Hello"))
print(bool(15))

运行结果

True
True

实例:

使用bool()对两个变量转换布尔值:

x = "Hello"
y = 15

print(bool(x))
print(bool(y))

运行结果

True
True

大多数的值都是True

如果它具有某种内容,则几乎所有值都将转换为True

除空字符串(''“”)外,任何字符串均为True

0外,任何数字均为True

任何非空的列表,元组,集合和字典都是True

实例:

以下内容将返回True:

bool("abc")
bool(123)
bool(["c", "java", "python"])

某些值是False

实际上,除了空值(例如()[]{}“”,数字0和值None。 值False也可转换为False

实例:

以下将返回False:

bool(False)
bool(None)
bool(0)
bool("")
bool(())
bool([])
bool({})

另外一个值或对象(在这种情况下)的计算结果为False,也就是说,如果您有一个对象,该对象是由具有__len__函数的类制成的,该函数返回0False

实例:

class myclass():
def __len__(self):
    return 0

myobj = myclass()
print(bool(myobj))

2.4.3-布尔运算

以下是按优先级从低到高分别有:

运算表达式运算说明
a or ba=真:真; a=假b=真:真; 其余为假
a and ba 和 b 全为真:真, 其余为假
not aa=真:假, a=假:真

需要注意的是:

a = 0
b = 1
c = 2

a and b # 0 a 为假返回假的值
b and a # 0 b为真,返回a的值
a or b # 1 输出为真值的结果
a and b or c # 2
a and (b or c) # 0 用类似数学中的括号提高运算优先级

# not 的注意事项
not a # True
not a == b # True
not (a == b) # True 同上逻辑
a == not b # !这个是错误的语法, 正确如下:
a == (not b) # True

# and 优先级高 'a' 为真,返回 'b', '' or 'b' 返回 'b'
'' or 'a' and 'b' # 'b'

可运算赋值:

x = a or b # 哪个为真就就将值赋值到 x
x = a and b # 哪个为假就将值赋到 x
x = not a # 将结果赋值给 x, False

比较运算

对两个值或者变量进行比较,如果表达式成立返回 True,否则返回 False

操作符说明
<小于
<=小于等于
>大于
>=大于等于
==等于
!=不等于
is是相同对象
is not是不同对象

示例:

a = 0
b = 1
c = 2

a > b # False
a == b # False
b == (c - b) # True
a != b # True
a < (b + c) # True
a is not a # False

2.4.4-空值:None

什么是空值:空值指的是一个变量没有任何值,即它是空的,没有任何内容。在 Python 中,None 是代表空值的对象。 类似于其他编程语言中的 null、nil、undefined 等。

实例

# 定义空值
val = None
# 判断类型
print(type(val))

运行结果

<class 'NoneType'>

None 有以下特点:

  1. None 是 Python 的一个特殊对象,表示“无”、“空”或“不存在”。
  2. NoneType 是 None 对象的类型。
  3. None 在布尔上下文中相当于 False。
  4. None 是一个全局变量,在 Python 程序中随时可以访问。

以下是一些示例:

# 示例1:使用 None 作为函数返回值
def divide(x, y):
    if y == 0:
        return None
    else:
        return x / y

result = divide(10, 0)
if result is None:
    print("Cannot divide by zero")

# 示例2:使用 None 作为函数参数默认值
def greet(name=None):
    if name is None:
        print("Hello, world!")
    else:
        print("Hello, " + name + "!")

greet()  # 输出:Hello, world!
greet("Alice")  # 输出:Hello, Alice!

在上述示例中,示例1演示了使用 None 作为函数返回值。如果分母 y 为 0,则函数返回 None。在调用函数时,需要检查函数的返回值是否为 None,如果是,则说明除数为 0,不能执行除法操作。

示例2演示了使用 None 作为函数参数的默认值。在定义函数时,可以指定参数的默认值为 None。当调用函数时,如果没有传递参数,则函数使用默认值 None。

除此之外,还可以使用 is 和 == 运算符来检查变量是否为 None。is 运算符用于检查变量是否为 None 对象,而 == 运算符用于检查变量的值是否为 None。

# 检查变量是否为 None 对象
x = None
if x is None:
    print("x is None")

# 检查变量的值是否为 None
y = 10
if y == None:  # 不推荐
    print("y is None")
if y is None:
    print("y is None")

2.5-【基础】输入与输出

2.5.1-input输入函数

​ Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。

重要的话,说两遍,input函数的返回值是一个字符串类型。哪怕你输入的是个数字1,返回给你的只会是字符串“1”,而不是 整数1。

input() 函数的用法为:

str = input(tipmsg)

说明:

  • str 表示一个字符串类型的变量,input 会将读取到的字符串放入 str 中。
  • tipmsg 表示提示信息,它会显示在控制台上,告诉用户应该输入什么样的内容;如果不写 tipmsg,就不会有任何提示信息。

实例

a = input('请输入你的号码前五位:') # 使用input函数显示提示信息然后赋值给变量a
print('类型', type(a))    # 打印变量a的类型
b = input('请输入你剩余的号码:')
print('类型', type(b))
result = a + b  # 把a+b的结果赋值给result
print("resultValue: ", result)    # 打印变量result的值
print("resultType: ", type(result))  # 打印变量result的类型

运行结果

请输入你的号码前五位:12345
类型 <class 'str'>
请输入你剩余的号码:987456
类型 <class 'str'>
resultValue:  12345987456
resultType:  <class 'str'>

本例中我们输入了两个整数,希望计算出它们的和,但是事与愿违,Python 只是它们当成了字符串,+起到了拼接字符串的作用,而不是求和的作用。

我们可以使用 Python 内置函数将字符串转换成想要的类型,比如:

  • int(string) 将字符串转换成 int 类型;
  • float(string) 将字符串转换成 float 类型;
  • bool(string) 将字符串转换成 bool 类型。

修改上面的代码,将用户输入的内容转换成数字:

实例

a = int(input('请输入你的号码前五位:')) # 使用input函数显示提示信息然后赋值给变量a
print('类型', type(a))    # 打印变量a的类型
b = int(input('请输入你剩余的号码:'))
print('类型', type(b))
result = a + b  # 把a+b的结果赋值给result
print("resultValue: ", result)    # 打印变量result的值
print("resultType: ", type(result))  # 打印变量result的类型

运行结果

请输入你的号码前五位:12345
类型 <class 'int'>
请输入你剩余的号码:5461
类型 <class 'int'>
resultValue:  17806
resultType:  <class 'int'>

知识拓展

有时候可能输入两边会多敲入几个空格,这时候可以使用 strip() 函数去除首尾空格

实例

name = input("请输入你的姓名: ")
print(name)
name = name.strip()
print(name)

运行结果

请输入你的姓名:      张三丰
     张三丰
张三丰

有时候用户输入的内容会不符合程序的预期,比如我想要获取年龄,那输入必然是全数字,而不能是其他非数值,这时候就可以使用 isdigit 函数进行判断

实例

age = input("请输入你的年龄: ")
if age.isdigit():
    age = int(age)
    print('你的年龄是:', age)
else:
    print('输入不合法')

运行结果-1

请输入你的年龄: 18
你的年龄是: 18

运行结果-2

请输入你的年龄: asd
输入不合法

2.5.2-print 输入函数

print() 方法的语法:

print (objects,...,sep='',end='\n',file=sys.stdout,flush=False)

参数

  • objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
  • sep – 用来间隔多个对象,默认值是一个空格。
  • end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
  • file – 要写入的文件对象。
  • flush – 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

objects参数实例

user_name = 'Charlie'
user_age = 8
#同时输出多个变量和字符串
print("读者名:",user_name,"年龄:",user_age)

运行结果

读者名: Charlie 年龄: 8

sep参数实例

#同时输出多个变量和字符串,指定分隔符
print("读者名:" ,user_name,"年龄:",user_age,sep='|')

运行结果

读者名:|Charlie|年龄:|8

end参数实例

#设置end 参数,指定输出之后不再换行
print(40,'\t',end="")
print(5O,'\t',end="")
print(60,'\t',end="")

运行结果

40    50    60

file参数实例

f = open('file.txt', 'w')
f.write('Hello World!')
f.close()

flush参数实例

我们知道print也可输出到文件。在python3 交互模式中输入:

f = open("123.txt", "w")
print("123456789", file = f)

运行后打开123.txt文件,发现“123456789”未被写入,文件内容为空。只有f.close()后才将内容写进文件中。如果加入flush = True,即上面代码改为:

f = open("123.txt", "w")
print("123456789",file = f, flush = True)

不用f.close()即可将内容写进文件中
flush参数主要是刷新, 默认flush = False,不刷新,如上面例子,print到f中的内容先存到内存中,当文件对象关闭时才把内容输出到 123.txt 中;而当flush = True时它会立即把内容刷新存到 123.txt 中。

2.6 【基础】字符串格式化

格式化输出,主要有三种方式

  1. 使用 % 进行格式化
  2. 使用 format 函数进行格式化
  3. 使用 f-string 进行格式化

由于这三种格式化的内容都非常的多,这里仅为了你看本教程后面的内容,我只介绍最常用的几种

2.6.1-第一种方法:使用 %

%s 表示这个位置接的是一个字符串变量

%d 表示这个位置接的是一个整型变量

前面有多少个 %,后面就要有多少个变量,一一对应,多个变量要括号括起来

>>> name = "Jack"
>>> age = 18
>>> print("我的名字是: %s,今年 %d 岁" %(name, age))
我的名字是: Jack,今年 18 岁

更多的格式化式符号,可以参考这张表

符号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数字,可指定小数点后的精度
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f 和 %e 的简写
%G%f 和 %E 的简写
%p用十六进制数格式化变量的地址

2.6.2-第二种方法:使用 format

在字符串中,使用 {} 进行占位,然后在字符串后跟上 .format() 函数,这个函数的参数就是我们要往字符串中填充的变量。

format 函数会依次填充,比如第一个 {} 会取到第一个参数 name,第二个 {} 会取到第二个参数 age

>>> name = "Jack"
>>> age = 18
>>> print("我的名字是:{}, 今年 {} 岁".format(name, age))
我的名字是:Jack, 今年 18 岁

然后如果变量值比较多的话,这样往往会看错乱掉。你可以改成使用索引

>>> print("我的名字是:{0}, 今年 {1} 岁".format(name, age))
我的名字是:Jack, 今年 18 岁

甚至还可以直接用变量名进行替代

>>> name = "Jack"
>>> age = 18
>>> print("我的名字是:{name}, 今年 {age} 岁".format(name=name, age=age))
我的名字是:Jack, 今年 18 岁

2.6.3-第三种方法:使用 f-string

这种方法是 Python 3.6 才支持的写法,只要你在字符串前面加一个 f,开启 f-string ,就可以在字符中写入变量。

直接看案例了

>>> name = "Jack"
>>> age = 18
>>> print(f"我的名字是:{name}, 今年 {age} 岁")
我的名字是:Jack, 今年 18 岁

2.7【基础】运算符(超全整理)

2.7.1-什么是运算符?

运算符是用于在 Python 中对变量和值执行操作的符号。

Python语言支持以下类型的运算符:

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符
  • 三目运算符

2.7.2-算术运算符

运算符说明实例结果
+12.45 + 1527.45
-4.56 - 0.264.3
*5 * 3.618.0
/除法(和数学中的规则一样)7 / 23.5
//整除(只保留商的整数部分)7 // 23
%取余,即返回除法的余数7 % 21
**幂运算/次方运算,即返回 x 的 y 次方2 ** 416,即 24
+ 加法运算符

加法运算符很简单,和数学中的规则一样,请看下面的代码:

m = 10
n = 97
sum1 = m + n

x = 7.2
y = 15.3
sum2 = x + y

print("sum1=%d, sum2=%.2f" % (sum1, sum2) )

运行结果:

sum1=107, sum2=22.50

拼接字符串

+用于数字时表示加法,但是当+用于字符串时,它还有拼接字符串(将两个字符串连接为一个)的作用,请看代码:

name = "CSDN"
url = "https://www.csdn.net/"
age = 24
info = name + "的网址是" + url + ",它已经" + str(age) + "岁了。"
print(info)

运行结果:

CSDN的网址是https://www.csdn.net/,它已经24岁了。

str() 函数用来将整数类型的 age 转换成字符串。

- 减法运算符

减法运算也和数学中的规则相同,请看代码:

n = 45
m = -n

x = -83.5
y = -x

print(m, ",", y)

运行结果:

-45 , 83.5

求负

-除了可以用作减法运算之外,还可以用作求负运算(正数变负数,负数变正数),请看下面的代码:

n = 45
n_neg = -n

f = -83.5
f_neg = -f

print(n_neg, ",", f_neg)

运行结果:

-45 , 83.5

注意,单独使用+是无效的,不会改变数字的值,例如:

n = 45
m = +n

x = -83.5
y = +x

print(m, ",", y)

运行结果:

45 , -83.5
*乘法运算符

乘法运算也和数学中的规则相同,请看代码:

n = 4 * 25
f = 34.5 * 2
print(n, ",", f)

运行结果:

100 , 69.0
重复字符串

*除了可以用作乘法运算,还可以用来重复字符串,也即将 n 个同样的字符串连接起来,请看代码:

str1 = "hello "
print(str1 * 4)

运行结果:

hello hello hello hello 
/ 和 // 除法运算符

Python 支持///两个除法运算符,但它们之间是有区别的:

  • /表示普通除法,使用它计算出来的结果和数学中的计算结果相同。
  • //表示整除,只保留结果的整数部分,舍弃小数部分;注意是直接丢掉小数部分,而不是四舍五入。

请看下面的例子:

#整数不能除尽
print("23/5 =", 23/5)
print("23//5 =", 23//5)
print("23.0//5 =", 23.0//5)
print("-------------------")

#整数能除尽
print("25/5 =", 25/5)
print("25//5 =", 25//5)
print("25.0//5 =", 25.0//5)
print("-------------------")

#小数除法
print("12.4/3.5 =", 12.4/3.5)
print("12.4//3.5 =", 12.4//3.5)

运行结果:

23/5 = 4.6
23//5 = 4
23.0//5 = 4.0
-------------------
25/5 = 5.0
25//5 = 5
25.0//5 = 5.0
-------------------
12.4/3.5 = 3.542857142857143
12.4//3.5 = 3.0

从运行结果可以发现:

  • /的计算结果总是小数,不管是否能除尽,也不管参与运算的是整数还是小数。
  • 当有小数参与运算时,//结果才是小数,否则就是整数。

需要注意的是,除数始终不能为 0,除以 0 是没有意义的,这将导致 ZeroDivisionError 错误。在某些编程语言中,除以 0 的结果是无穷大(包括正无穷大和负无穷大)。

% 求余运算符

Python % 运算符用来求得两个数相除的余数,包括整数和小数。Python 使用第一个数字除以第二个数字,得到一个整数的商,剩下的值就是余数。对于小数,求余的结果一般也是小数。

注意,求余运算的本质是除法运算,所以第二个数字也不能是 0,否则会导致 ZeroDivisionError 错误。

Python % 使用示例:

print("-----整数求余-----")
print("15%6 =", 15%6)
print("-15%6 =", -15%6)
print("15%-6 =", 15%-6)
print("-15%-6 =", -15%-6)

print("-----小数求余-----")
print("7.7%2.2 =", 7.7%2.2)
print("-7.7%2.2 =", -7.7%2.2)
print("7.7%-2.2 =", 7.7%-2.2)
print("-7.7%-2.2 =", -7.7%-2.2)

print("---整数和小数运算---")
print("23.5%6 =", 23.5%6)
print("23%6.5 =", 23%6.5)
print("23.5%-6 =", 23.5%-6)
print("-23%6.5 =", -23%6.5)
print("-23%-6.5 =", -23%-6.5)

运行结果:

-----整数求余-----
15%6 = 3
-15%6 = 3
15%-6 = -3
-15%-6 = -3
-----小数求余-----
7.7%2.2 = 1.0999999999999996
-7.7%2.2 = 1.1000000000000005
7.7%-2.2 = -1.1000000000000005
-7.7%-2.2 = -1.0999999999999996
---整数和小数运算---
23.5%6 = 5.5
23%6.5 = 3.5
23.5%-6 = -0.5
-23%6.5 = 3.0
-23%-6.5 = -3.5

从运行结果可以发现两点:

  • 只有当第二个数字是负数时,求余的结果才是负数。换句话说,求余结果的正负和第一个数字没有关系,只由第二个数字决定。
  • %两边的数字都是整数时,求余的结果也是整数;但是只要有一个数字是小数,求余的结果就是小数。

本例中小数求余的四个结果都不精确,而是近似值,这和小数在底层的存储有关系。

** 次方(乘方)运算符

Python ** 运算符用来求一个 x 的 y 次方,也即次方(乘方)运算符。

由于开方是次方的逆运算,所以也可以使用 ** 运算符间接地实现开方运算。

Python ** 运算符示例:

print('----次方运算----')
print('3**4 =', 3**4)
print('2**5 =', 2**5)

print('----开方运算----')
print('81**(1/4) =', 81**(1/4))
print('32**(1/5) =', 32**(1/5))

运行结果:

----次方运算----
3**4 = 81
2**5 = 32
----开方运算----
81**(1/4) = 3.0
32**(1/5) = 2.0

2.7.3-比较运算符

比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回 True(真),反之则返回 False(假)。

比较运算符说明
>大于,如果>前面的值大于后面的值,则返回 True,否则返回 False。
<小于,如果<前面的值小于后面的值,则返回 True,否则返回 False。
==等于,如果==两边的值相等,则返回 True,否则返回 False。
>=大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False。
<=小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False。
!=不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False。

​ Python 比较运算符的使用举例:

print("89是否大于100:", 89 > 100)
print("24*5是否大于等于76:", 24*5 >= 76)
print("86.5是否等于86.5:", 86.5 == 86.5)
print("34是否等于34.0:", 34 == 34.0)
print("False是否小于True:", False < True)
print("True是否等于True:", True < True)

运行结果

89是否大于100: False
24*5是否大于等于76: True
86.5是否等于86.5: True
34是否等于34.0: True
False是否小于True: True
True是否等于True: False

2.7.4-赋值运算符

赋值运算符用来把右侧的值传递给左侧的变量(或者常量);可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除、函数调用、逻辑运算等。

Python中最基本的赋值运算符是等号=;结合其它运算符,=还能扩展出更强大的赋值运算符。

基本赋值运算符

=是 Python 中最常见、最基本的赋值运算符,用来将一个表达式的值赋给另一个变量,请看下面的例子:

#将字面量(直接量)赋值给变量
n1 = 100
f1 = 47.5
s1 = "http://c.biancheng.net/python/"

#将一个变量的值赋给另一个变量
n2 = n1
f2 = f1

#将某些运算的值赋给变量
sum1 = 25 + 46 
sum2 = n1 % 6
s2 = str(1234)  #将数字转换成字符串
s3 = str(100) + "abc"
连续赋值

Python 中的赋值表达式也是有值的,它的值就是被赋的那个值,或者说是左侧变量的值;如果将赋值表达式的值再赋值给另外一个变量,这就构成了连续赋值。请看下面的例子:

a = b = c = 100

=具有右结合性,我们从右到左分析这个表达式:

  • c = 100 表示将 100 赋值给 c,所以 c 的值是 100;同时,c = 100 这个子表达式的值也是 100。
  • b = c = 100 表示将 c = 100 的值赋给 b,因此 b 的值也是 100。
  • 以此类推,a 的值也是 100。

最终结果就是,a、b、c 三个变量的值都是 100。

= 和 ==

= 和 == 是两个不同的运算符,= 用来赋值,而 == 用来判断两边的值是否相等,千万不要混淆。

扩展后的赋值运算符

=还可与其他运算符(包括算术运算符、位运算符和逻辑运算符)相结合,扩展成为功能更加强大的赋值运算符,如表 1 所示。扩展后的赋值运算符将使得赋值表达式的书写更加优雅和方便。

运算符说 明用法举例等价形式
=最基本的赋值运算x = yx = y
+=加赋值x += yx = x + y
-=减赋值x -= yx = x - y
*=乘赋值x *= yx = x * y
/=除赋值x /= yx = x / y
%=取余数赋值x %= yx = x % y
**=幂赋值x **= yx = x ** y
//=取整数赋值x //= yx = x // y
&=按位与赋值x &= yx = x & y
|=按位或赋值x |= yx = x | y
^=按位异或赋值x ^= yx = x ^ y
<<=左移赋值x <<= yx = x << y,这里的 y 指的是左移的位数
>>=右移赋值x >>= yx = x >> y,这里的 y 指的是右移的位数

这里举个简单的例子:

n1 = 100
f1 = 25.5

n1 -= 80  #等价于 n1=n1-80
f1 *= n1 - 10 #等价于 f1=f1*( n1 - 10 )

print("n1=%d" % n1)
print("f1=%.2f" % f1)

运行结果为:

n1=20
f1=255.00

通常情况下,只要能使用扩展后的赋值运算符,都推荐使用这种赋值运算符。

但是请注意,这种赋值运算符只能针对已经存在的变量赋值,因为赋值过程中需要变量本身参与运算,如果变量没有提前定义,它的值就是未知的,无法参与运算。例如,下面的写法就是错误的:

n += 10

该表达式等价于 n = n + 10,n 没有提前定义,所以它不能参与加法运算。

2.7.5-位运算符

Python位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等)

Python 位运算符只能用来操作整数类型,它按照整数在内存中的二进制形式进行计算。

运算符名称描述
&按位与运算符(AND)如果两个位均为1,则将每个位设置为1
|按位或运算符(OR)如果两位之一为1,则将每个位设置为1
^按位异或运算符(XOR)如果两位中只有一位为1,则将每个位设置为1
~按位取反运算符(NOT)反转所有位
<<左移动运算符运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
>>右移动运算符右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数

例如:

a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = 0
 
c = a & b;        # 12 = 0000 1100

c = a | b;        # 61 = 0011 1101 

c = a ^ b;        # 49 = 0011 0001
 
c = ~a;           # -61 = 1100 0011
 
c = a << 2;       # 240 = 1111 0000
 
c = a >> 2;       # 15 = 0000 1111

2.7.6-逻辑运算符

Python中的逻辑运算符用来对逻辑表达式进行逻辑操作,主要有and、or和not三种。它们可以帮助开发者判断条件表达式的真假性,从而得出最终的结果。

逻辑运算符含义基本格式说明
and逻辑与运算,等价于数学中的“且”a and b当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。
or逻辑或运算,等价于数学中的“或”a or b当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。
not逻辑非运算,等价于数学中的“非”not a如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。

逻辑运算符一般和关系运算符结合使用,例如:

14>6 and 45.6 > 90

14>6 结果为 True,成立,45.6>90 结果为 False,不成立,所以整个表达式的结果为 False,也即不成立。

再看一个比较实用的例子:

age = int(input("请输入年龄:"))
height = int(input("请输入身高:"))

if age>=18 and age<=30 and height >=170 and height <= 185 :
    print("恭喜,你符合报考飞行员的条件")
else:
    print("抱歉,你不符合报考飞行员的条件")

运行结果

请输入年龄:23
请输入身高:178
恭喜,你符合报考飞行员的条件

2.7.7-成员运算符

in 与 not in是Python独有的运算符(全部都是小写字母),用于判断对象是否某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者False。

运算符描述示例
in如果对象中存在具有指定值的序列,则返回Truey in x
not in如果对象中不存在具有指定值的序列,则返回Truex not in y

看个例子,传统的方式,我们判断某个集合里是否有某个元素时,都是使用for循环遍历一次集合,逐一进行比对,最后给出结果:

list1 = [1, 2, 3, 4, 5]
a = 1
flag = False  #标记开关

for i in list1:
    if i == a:
        flag = True
        break

if flag:
    print("a是list1的元素之一")
else:
    print("a不是list1的元素")

事实上根本不用这么麻烦,直接使用in运算符就好了

list1 = [1, 2, 3, 4, 5]
a = 1
if a in list1:
    print("a是list1的元素之一")
else:
    print("a不是list1的元素")

知识拓展

Flag这一变量名常常被用于命名旗标变量,或者说哨兵变量。这种变量的作用体现在帮助进行条件判断中;

在Python中,flag=False表示将一个名为flag的布尔变量设置为False,因此在条件判断时,当flagFalse时,条件被认为是不满足的。

2.7.8-身份运算符

身份运算符用于比较对象,不是比较它们是否相等,但如果它们实际上是同一个对象,则具有相同的内存位置

运算符描述实例
isis 是判断两个标识符是不是引用自一个对象本质上是判断两个对象的内存地址是否相同
is notis not 是判断两个标识符是不是引用自不同对象与is功能相反,本质上仍然是对两个对象的内存地址是否相等进行判断

先来几个示例,感受一下它的功能

a = 1
b = 1
print(a is b)

程序输出结果

True

is 与 == 的区别

a = [1, 2, 3]  # 创建一个新的列表
b = [1, 2, 3]  # 创建一个新的列表

print(a == b)
print(a is b)
print(id(a), id(b))

程序输出结果

True
False
4367682696 4367682952

== 比较运算符,比较的是两个对象的值是否相等,从字面上看,这两个列表的值是完全相等的

is 是身份运算符,它比较的是两个对象的内存地址是否相同,如果内存地址相同,那么他们就是同一个对象。

上面的示例代码中,虽然列表的值相同,但他们是在两个不同的赋值语句中被创建的,因此他们的内存地址不同

同时对两个变量赋值1,为什么这两个1的内存地址相同

a = 1
b = 1
print(a is b)

程序输出结果

True

为什么这两个1的内存地址会相同呢?这里和python的内存管理有关,python设计者认为在[-5, 257)这个范围内的整数,是经常被使用的对象,因此,没有必要经常性的创建和释放他们,于是python建立了一个内存池,存储了这个范围内的整数,当你使用这个范围内的整数时,其实都是从这个内存池中取数,并没有重新创建

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False

如果超出这个范围,尽管值相同,但是已经超出了内存池存储数据范围,因此分别在内存中创建了两个257,他们的内存地址不同

2.7.9-三目运算符(三元表达式)

我们从一个具体的例子切入本节内容。假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if else 语句,例如:

if a>b:
    max = a;
else:
    max = b;

但是 Python提供了一种更加简洁的写法,如下所示:

max = a if a>b else b

这是一种类似于其它编程语言中三目运算符? :的写法。Python 是一种极简主义的编程语言,它没有引入? :这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。

使用 if else 实现三目运算符(条件运算符)的格式如下:

exp1 if contion else exp2

condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。

前面的语句max = a if a>b else b的含义是:

  • 如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max;
  • 如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max。
三目运算符的嵌套

Python 三目运算符支持嵌套,如此可以构成更加复杂的表达式。在嵌套时需要注意 if 和 else 的配对,例如:

a if a>b else c if c>d else d

应该理解为:

a if a>b else ( c if c>d else d )

【实例】使用 Python 三目运算符判断两个数字的关系:

a = int( input("Input a: ") )
b = int( input("Input b: ") )
print("a大于b") if a>b else ( print("a小于b") if a<b else print("a等于b") )

可能的运行结果:

Input a: 45↙
Input b: 100↙
a小于b

该程序是一个嵌套的三目运算符。程序先对 a>b 求值,如果该表达式为 True,程序就返回执行第一个表达式 print(“a大于b”),否则将继续执行 else 后面的内容,也就是:

( print("a小于b") if a<b else print("a等于b") )

进入该表达式后,先判断 a<b 是否成立,如果 a<b 的结果为 True,将执行 print(“a小于b”),否则执行 print(“a等于b”)。

Python运算符优先级

Python运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说的先执行相乘和除,再执行加减运算。

Python运算符详细说明

下表从高到低列出了运算符的优先级。同一行中的运算符具有相同优先级,然后运算符的优先级是运算表达式从左到右。

优先级运算符描述
1lambdaLambda表达式
2or布尔“或”
3and布尔“与”
4not x布尔“非”
5in,not in成员测试
6is,is not同一性测试
7<,<=,>,>=,!=,==比较
8``
9^按位异或
10&按位与
11<<,>>移位
12+,-加法与减法
13*,/,%乘法、除法与取余
14+x,-x正负号
15~x按位翻转
16**指数
17x.attribute属性参考
18x[index]下标
19x[index:index]寻址段
20f(arguments...)函数调用
21(experession,...)绑定或元组显示
22[expression,...]列表显示
23{key:datum,...}字典显示
24'expression,...'字符串转换

Python运算符计算顺序

一般情况下,运算符优先级表决定了哪个运算符在别的运算符之前计算。但是,如果你想要改变它们默认计算顺序,你得使用圆括号。例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(10 + 55) * 13的样子。

Python运算符结合规律

Python运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。

Python运算符优先级排行榜

在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。

# coding=utf-8
#优先级的简单实例
priorityNumber=2+1*4
print priorityNumber #输出结果:6


#优先级使用实例
#以下优先级排名从高到低,在同一运算中,先执行优先级高的再执行低的,以此类推。

#Top 1:函数调用、寻址、下标

#Top 2:幂运算**
priorityNumber=2*2**3
print priorityNumber #输出结果:16

#Top 3:翻转运算~

#Top 4:正负号
print 1+2*-3 #输出结果:-5

#Top 5:*、/、%
print 2+1*2/5 #输出结果:2

#Top 6:+、-
print 3<<2+1 #输出结果:24

#Top 7:<<、>>

#Top 8:按位&、^、|

#Top 9:比较运算符
priority=2*3+2<=2+1*7
print priority #输出结果:True

#Top 10:逻辑的not and or

#Top 11:lambda表达式

2.python运算符优先级使用规律: 
#python优先级使用规律
#1、一般情况下是左结合的
#ps:在没有更高优先级运算符,即只有同级运算符时时从左到右结合
print 1+2+3*5+5 #输出结果:23

#2、出现赋值的时候一般是右结合
#ps:在有赋值运算符时,是右结合,即先算出1+2的值以后再赋值给priority
priority=1+2
print priority #输出结果:23

Python运算符优先级之发大招

大家可能会觉得Python运算符的优先级不容易记忆,而且有时候还容易混淆。在实际运用中根据业务逻辑可能我们知道要先做什么再做什么,但是却忘记Python运算符的优先级了,该怎么办?这里教大家一个杀手锏,绝对百试不爽。

#python运算符优先级大招
'''比如说有这个需求:
去商店买水,买3瓶水,每瓶5块,再买一个绿箭(假设绿箭3块),总共多少钱?
这个简单的应用非常明显,需要先用乘法再用加法,如果这里你忘记了乘法和加法的优先级,可以这样:
'''
print (3*5)+3 #输出结果:18

#ps: 这只是一个简单的例子,只是为了告诉大家实际应用中实在不行咱就放大招。有备无患。
Python表达式
Python表达式基本概念: 
python中,值、变量和运算符共同组成的整体称为表达式
#python表达式
#1 字符串表达式
"Hello"

#2 计算表达式
2+3

#3 赋值表达式
first=0

#4 变量表达式
first

#5 值表达式

#等等

按位与 |
| 11 | <<,>> | 移位 |
| 12 | +,- | 加法与减法 |
| 13 | *,/,% | 乘法、除法与取余 |
| 14 | +x,-x | 正负号 |
| 15 | ~x | 按位翻转 |
| 16 | ** | 指数 |
| 17 | x.attribute | 属性参考 |
| 18 | x[index] | 下标 |
| 19 | x[index:index] | 寻址段 |
| 20 | f(arguments...) | 函数调用 |
| 21 | (experession,...) | 绑定或元组显示 |
| 22 | [expression,...] | 列表显示 |
| 23 | {key:datum,...} | 字典显示 |
| 24 | 'expression,...' | 字符串转换 |


Python运算符计算顺序

一般情况下,运算符优先级表决定了哪个运算符在别的运算符之前计算。但是,如果你想要改变它们默认计算顺序,你得使用圆括号。例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(10 + 55) * 13的样子。

Python运算符结合规律

Python运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。

Python运算符优先级排行榜

在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。

# coding=utf-8
#优先级的简单实例
priorityNumber=2+1*4
print priorityNumber #输出结果:6


#优先级使用实例
#以下优先级排名从高到低,在同一运算中,先执行优先级高的再执行低的,以此类推。

#Top 1:函数调用、寻址、下标

#Top 2:幂运算**
priorityNumber=2*2**3
print priorityNumber #输出结果:16

#Top 3:翻转运算~

#Top 4:正负号
print 1+2*-3 #输出结果:-5

#Top 5:*、/、%
print 2+1*2/5 #输出结果:2

#Top 6:+、-
print 3<<2+1 #输出结果:24

#Top 7:<<、>>

#Top 8:按位&、^、|

#Top 9:比较运算符
priority=2*3+2<=2+1*7
print priority #输出结果:True

#Top 10:逻辑的not and or

#Top 11:lambda表达式

2.python运算符优先级使用规律: 
#python优先级使用规律
#1、一般情况下是左结合的
#ps:在没有更高优先级运算符,即只有同级运算符时时从左到右结合
print 1+2+3*5+5 #输出结果:23

#2、出现赋值的时候一般是右结合
#ps:在有赋值运算符时,是右结合,即先算出1+2的值以后再赋值给priority
priority=1+2
print priority #输出结果:23

Python运算符优先级之发大招

大家可能会觉得Python运算符的优先级不容易记忆,而且有时候还容易混淆。在实际运用中根据业务逻辑可能我们知道要先做什么再做什么,但是却忘记Python运算符的优先级了,该怎么办?这里教大家一个杀手锏,绝对百试不爽。

#python运算符优先级大招
'''比如说有这个需求:
去商店买水,买3瓶水,每瓶5块,再买一个绿箭(假设绿箭3块),总共多少钱?
这个简单的应用非常明显,需要先用乘法再用加法,如果这里你忘记了乘法和加法的优先级,可以这样:
'''
print (3*5)+3 #输出结果:18

#ps: 这只是一个简单的例子,只是为了告诉大家实际应用中实在不行咱就放大招。有备无患。
Python表达式
Python表达式基本概念: 
python中,值、变量和运算符共同组成的整体称为表达式
#python表达式
#1 字符串表达式
"Hello"

#2 计算表达式
2+3

#3 赋值表达式
first=0

#4 变量表达式
first

#5 值表达式

#等等

所以在我们非常清楚Python运算优先级的前提下,最好运算符的书写的时候,还是要以圆括号来标记优先级,这样可读性强,也是一个良好的编程习惯。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹅不糊涂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值