本章要点:
- 单行注释和多行注释
- Python是弱类型语言
- Python变量的特征
- Python变量命名规则
- Python关键字和内置函数
- Python支持的各种数值类型
- Python字符串入门
- 拼接字符串的方法
- repr和字符串
- 使用input和raw_input获取用户输入
- 长字符串和原始字符串
- 字符串格式化
- 字符串的相关方法
- Python的赋值运算符
- Python的算术运算符
- Python的位运算符
- Python的扩展后的赋值运算符
- Python的索引运算符
- Python的比较运算符
- Python的逻辑运算符
- Python的三目运算符
- Python的in运算符
目录
2.1 单行注释和多行注释
2.2 变量
2.2.1 Python是弱类型语言
2.2.2 使用print函数输出变量
2.2.3 变量的命名规则
2.2.4 Python的关键字和内置函数
2.3 数值类型
2.3.1 整形
2.3.2 浮点型
2.3.3 复数
2.4 字符串入门
2.4.1 字符串和转义字符
2.4.2 拼接字符串
2.4.3 repr和字符串
2.4.4 使用input和raw_input获取用户输入
2.4.5 长字符串
2.4.6 原始字符串
2.4.7 字节串(bytes):不可变序列
2.5 深入使用字符串
2.5.1 转义字符
2.5.2 字符串格式化
2.5.3 序列相关的方法
2.5.4 大小写相关方法
2.5.5 删除空白
2.5.6 查找、替换相关方法
2.5.7 分割、连接方法
2.6 运算符
2.6.1 赋值运算符(“=”)
2.6.2 算术运算符(加、减、乘、除、求余、求负、乘方)
2.6.3 位运算符(&按位与、|按位或、^按位与或、~按位取反、<<左移、>>右移)6个
2.6.4 扩展后的赋值运算符
2.6.5 索引运算符(就是方括号[ ])
2.6.6 比较运算符与bool类型
2.6.7 逻辑运算符
2.6.8 三目运算符(if语句)
2.6.9 in运算符——用于判断某个成员是否位于序列中
2.6.10 运算符的结合性和优先级(表达式运算中的运算顺序)
2.1 单行注释和多行注释
- 单行注释:Python使用(#)表示单行注释的开始,跟在“#”后面直到这行结束为止的代码都将被解释器忽略。
- 多行注释:指一次性将程序中的多行代码注释掉,在Python中使用三个单引号(')或者三个双引号(")将注释的内容括起来。
例如:
#这是一行简单的注释
print("Hello World!")
'''
这里面的内容全部是多行注释
Python语言真的很简单
'''
#print("这行代码被注释了,将不会被编译、执行")
"""
这是三个双引号括起来的多行注释
Python同样是允许的
"""
注释的作用:(1)提高程序的可读性;(2)是调试程序的重要方法。
2.2 变量
Python使用等号(=)作为赋值运算符。
Python是弱类型语言,有两个典型特征:
- 变量无需声明即可直接赋值;
- 变量的数据类型可以动态改变。
2.2.1 Python是弱类型语言
#定义一个数值类型变量
a=5
print(a)
#重新将字符串赋值给a变量
a='Hello,Charlie'
print(a)
print(type(a))
上面的程序中的type()函数的作用用于输出传入数据的类型。
2.2.2 使用print函数输出变量
语法格式:print(value, ... , sep=' ',end='\n', file=sys.stdout, flush=False)
user_name = 'Charlie'
user_age = 8
#同时输出多个变量和字符串
print("读者名:",user_name,"年龄:",user_age)
#同时输出多个变量和字符串,用sep指定分隔符
print("读者名:",user_name,"年龄:",user_age,sep='|')
#设置end参数,指定输出之后不再换行
print(40,'\t',end="")
print(50,'\t',end="")
print(60,'\t',end="")
f=open("poem.txt","w") #打开文件以便写入
print('沧海月明珠有泪',file=f)
print('蓝田日暖玉生烟',file=f)
#file参数指定print函数的输出目标,默认值为sys.stdout,代表了系统标准输出——屏幕
#flush参数用于控制输出缓存,保持为False即可。
2.2.3 变量的命名规则
- 标识符可以由字母、数字、下划线(_)组成,其中数字不能打头。
- 标识符不能是Python关键字,但可以包含关键字。
- 标识符不能包含空格。
2.2.4 Python的关键字和内置函数
Python包含了如下表所示的关键字:
False | None | True | and | as |
assert | break | class | continue | def |
del | elif | else | except | finally |
for | from | global | if | import |
in | is | lambda | nonlocal | not |
or | pass | raise | return | try |
while | with | yield | | |
#导入keyword模块
import keyword
#显示所有关键字
keyword.kwlist
通过上面的程序可以查看Python所包含的关键字。
Python还提供了如下表的内置函数:
abs() | all() | any() | basestring() | bin() |
bool() | bytearry() | callable() | chr() | classmethod() |
cmp() | compile() | complex() | delattr() | dict() |
dir() | divmod() | enumerate() | eval() | execfile() |
file() | filter() | float() | format() | frozenset() |
getattr() | globals() | hasattr() | hash() | help() |
hex() | id() | input() | int() | isinstance() |
issubclass() | iter() | len() | list() | locals() |
long() | map() | max() | memoryview() | min() |
next() | object() | oct() | open() | ord() |
pow() | print() | property() | range() | raw_input() |
reduce() | reload() | repr() | reversed() | zip() |
round() | set() | setattr() | slice() | sorted() |
staticmethod() | str() | sum() | super() | tuple() |
type() | unichr() | unicode() | vars() | xrange() |
Zip() | _import_() | apply() | buffer() | coerce() |
intern() | | | | |
2.3 数值类型
2.3.1 整形
Python3的整形支持各种整数值,不管是小的整数值,还是大的整数值。Python的整形数值有4种表示形式:
- 十进制形式:最普通的整数就是十进制形式的整数。
- 二进制形式:以0b或0B开头的整数就是二进制形式的整数。
- 八进制形式:以0o或0O开头的整数就是八进制形式的整数。
- 十六进制形式:以0x或0X开头的整数就是十六进制形式的整数。
例如:
#以0x或oX开头的整数型数值是十六进制形式的整数
hex_value1 = 0x13
hex_value2 = 0XaF
print("hexValue1的值为:",hex_value1)
print("hexValue2的值为:",hex_value2)
#以0b或oB开头的整数型数值是二进制形式的整数
bin_val = 0b111
print("bin_val的值为:",bin_val)
bin_val = 0B101
print("bin_val的值为:",bin_val)
#以0o或oO开头的整数型数值是八进制形式的整数
oct_val = 0o54
print("oct_val的值为:",oct_val)
oct_val = 0O17
print("oct_val的值为:",oct_val)
#Python3.x允许为数值(包括浮点型)增加下划线作为分隔符
one_million = 1_000_000
print(one_million)
price = 234_234_234 #price实际的值为234234234
Android = 1234_1234 #android实际的值为12341234
#Python的整形支持None值(空值)
a = None
print(a)
2.3.2 浮点型
浮点型数值用于保存带小数点的数值,Python的浮点数有两种表示形式:
- 十进制形式:
- 科学计数形式:只有浮点型数值才可以使用科学计数形式表示。
Python不允许除以0(不管是整形值还是浮点型数值)。
例如:
af1 = 5.2356556
#输出af1的值
print("af1的值为:",af1)
af2 = 25.2345
print("af2的值为:",af2)
f1 = 5.12e2
print("f1的值为:",f1)
f2 = 5e3 #5×10的三次方
print("f2的值为:",f2)
print("f2的类型为:",type(f2)) #看到类型为float
2.3.3 复数
复数的虚部用j或J来表示。不过需要导入cmath模块(c代表complex),该模块中包含了各种支持复数运算的函数。
例如:
ac1 = 3 + 0.2j
print(ac1)
print(type(ac1)) #输出复数类型
ac2 = 4 - 0.1j
print(ac2)
#复数运行
print(ac1 + ac2) 输出(7+0.1j)
#导入cmath模块
import cmath
#sqrt()是cmath模块下的函数,用于计算平方根
ac3 = cmath.sqrt(-1)
print(ac3) #输出1j
2.4 字符串入门
Python3.x对中文支持较好,但Python2.x则要求在源程序中增加“#coding:utf-8”才能支持中文字符。
2.4.1 字符串和转义字符
Python中的字符串要用单引号或者双引号括起来,如果字符串内容本身包含了单引号或双引号,就需要进行特殊处理。
- 使用不同的引号将字符串括起来;
- 对引号进行转义。
str1 = 'Charlie'
str2 = "疯狂软件教育"
print(str1)
print(str2)
str3 = "I'm a coder"
str4 = '"Spring is here,let us jam!",said woodchuck.'
str5 = '"We are scared,Let\'s hide in the shade",says the bird'
print(str3)
print(str4)
print(str5)
2.4.2 拼接字符串
简单使用还是上代码吧!
s1 = "Hello," 'Charlie'
print(s1)
#将会输出:Hello,Charlie
s2 = "Python"
s3 = "is Funny"
#使用+拼接字符串
s4 = s2 + s3
print(s4)
2.4.3 repr和字符串
使用str()和repr()函数可以将数值型转换成字符串。
repr()函数的作用是会以Python表达式的形式来表示值。
例如:
s1 = "这本书的价格是:"
p = 99.8
#字符串直接拼接数值,程序报错
#使用str()将数值转换成字符串
print(s1 + str(p))
#使用repr()将数值转换成字符串
print(s1 + repr(p))
st = "I will play my fife"
print(st)
print(repr(st))
#将会输出以下内容:
#I will play my fife
#"I will play my fife"
2.4.4 使用input和raw_input获取用户输入
input()函数(Python3.x):用于向用户生成一条提示,然后获取用户输入的内容,总是返回一个字符串。
raw_input函数(Python2.x中的函数等同于Python3.x中的input函数)
2.4.5 长字符串
Python使用三个引号括起来的长字符串完全可以赋值给变量,还允许使用转义字符(\)把一行字符串写成两行。
s = '''"Let's go fishing",said Mary.
"OK,Let's go", said her brother.
they walked to a lake'''
print(s)
s2 = 'The quick brown fox \
jumps over the lazy dog'
print(s2)
2.4.6 原始字符串
原始字符串以“r”开头,原始字符串不会把反斜线当成特殊字符。
s1 = r' G:\publishi\02\2.4'
print(s1)
#原始字符串包含的引号,同样需要转义
s2 = r'"Let\'s go",said Charlie'
print(s2)
s3 = r'Good Morning' '\\'
print(s2)
2.4.7 字节串(bytes):不可变序列
——字节串(bytes)由多个字节组成,以字节为单位进行操作。
——字符串(str)由多个字符组成,以字符为单位进行操作。
二者的区别与联系:
两者除操作的数据单元不同之外,它们支持所有方法基本相同。
字节串(bytes)对象只负责以字节(二进制格式)序列来记录数据。
二者可以互相转换。
字符串转换成bytes对象的三种方式:
- 以ASCⅡ字符为内容,可以在字符串之前加b来构建字节串;
- 调用bytes()函数(其实是bytes的构造方法)将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用UTF-8字符集。
- 调用字符串本身的encode()方法将字符串按指定字符集转换成字节串,如果不指定字符集,默认使用UTF-8字符集。
例如:
#创建一个空的bytes
b1=bytes()
#创建一个空的bytes值
b2=b''
#通过b前缀指定hello是bytes类型的值
b3=b'hello'
print(b3)
print(b3[0])
print(b3[2:4])
#调用bytes方法将字符串转换成bytes对象
b4=bytes('我爱Python编程',encoding='utf-8')
print(b4)
#利用字符串的encode()方法编码成bytes,默认使用UTF-8字符集
b5="学习Python很有趣".encode('utf-8')
print(b5)
#利用decode()方法将bytes对象解码成字符串,默认使用UTF-8进行解码
st=b5.decode('utf-8')
print(st) #学习Python很有趣
print(b4.decode('utf-8'))
2.5 深入使用字符串
2.5.1 转义字符
Python支持的转义字符
转义字符 | 说明 |
\b | 退格符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜线 |
例如:
s1 = 'Hello\nCharlie\nGood\nMorning'
print(s1)
s2 = '商品名\t\t单价\t\t数量\t\t总价'
s3 = '疯狂Python讲义\t108\t\t2\t\t216'
print(s2)
print(s3)
2.5.2 字符串格式化
Python提供“%”对各种类型的数据进行格式化输出。
转换说明符
转换说明符 | 说明 |
d,i | 转换为带符号的十进制形式的整数 |
o | 转换为带符号的八进制形式的整数 |
x | 转换为带符号的十六进制形式的整数 |
X | 转换为带符号的十六进制形式的整数 |
e | 转换为科学计数法表示的浮点数(e小写) |
E | 转换为科学计数法表示的浮点数(E大写) |
f,F | 转换为十进制形式的浮点数 |
g | 智能选择使用f或e格式 |
G | 智能选择使用F或E格式 |
C | 转换为单字符(只接受整数或单字符字符串) |
r | 使用repr()将变量或表达式转换为字符串 |
s | 使用str()将变量或表达式换转为字符串 |
例如:
#*****************************
#***程序名称:format_test.py
#***程序功能:格式化字符串和占位符的用法以及转换说明符的用法。
#***编写日期:2019-2-11
#*****************************
user = "Charli"
age = 8
#格式化字符串中两个占位符,第三部分也应该提供两个变量
#转换说明符(%)的用法:
print("%s is a %s years old boy" % (user , age))
num = -28
#使用转换说明符指定转换后的最小宽度
print("num is :%6i" % num)
print("num is :%6d" % num)
print("num is :%6o" % num)
print("num is :%6x" % num)
print("num is :%6X" % num)
print("num is :%6s" % num)
#Python允许在最小宽度之前添加一个标志:-、+、0
#最小宽度为0,左边补0
num2 = 30
print("num2 is :%06d" % num2)
#最小宽度为6,左边补0,总是带上符号
print("num2 is :%+06d" % num2)
#最小宽度为6,左对齐
print("num2 is :%-6d" % num2)
#精度值
my_value = 3.001415926535
#最小宽度为8,小数点后保留3位
print("my_value is: %8.3f" % my_value)
#最小宽度为8,小数点后保留3位,左边补0
print("my_value is: %08.3f" % my_value)
#最小宽度为8,小数点后保留3位,左边补0,始终带符号
print("my_value is: %+08.3f" % my_value)
the_name = "Charlie"
#只保留3个字符,将输出Cha
print("the name is: %.3s" % the_name)
#只保留2个字符,最小宽度为10
print("the name is: %10.2s" % the_name)
2.5.3 序列相关的方法
Python字符串直接在方括号([])中使用索引即可获取对应的字符,字符串中第一个字符的索引为0、第二个字符的索引为1,后面各字符以此类推。或者从后往前反向计算。
例如:
#*****************************
#***程序名称:chars_test.py
#***程序功能:示范根据索引获取字符串中的字符。
#***编写日期:2019-2-11
#*****************************
s = 'crazyit.org is very good'
#获取s中的索引2的字符
print(s[2]) #输出a
#获取s中从右边开始,索引4的字符
print(s[-4]) #输出g
#获取s中从索引3到索引5的(不包含)的子串
print(s[3:5]) #输出zy
#获取s中从索引3到倒数第5个字符的子串
print(s[3:-5]) #输出zyit.org is very
#获取s中从倒数第6个字符到倒数第3个字符的子串
print(s[-6:-3]) #输出y g
#判断s是否包含'very'子串
print('very' in s)
print('fkit' in s)
#输出s的长度
print(len(s)) #24
#输出'test'的长度
print(len('test')) #4
#输出s字符串中的最大字符
print(max(s)) #z
#输出s字符串中的最小字符
print(min(s)) #空格
2.5.4 大小写相关方法
Python字符串由内建的str类代表,在str类中与大小写相关的常用方法如下:
- title():将每个单词的首字母改为大写。
- lower():将整个字符串改为小写。
- upper():将整个字符串改为大写。
例如:
#*****************************
#***程序名称:case_test.py
#***程序功能:示范了str与大小写相关的常用方法。
#***编写日期:2019-2-11
#*****************************
a = 'our domain is crazyit.org'
#每个单词的首字母大写
print(a.title())
#每个字母小写
print(a.lower())
#每个字母大写
print(a.upper())
在此处需要掌握两个帮助函数:
- dir():列出指定类或模块包含的全部内容(包括函数、方法、类、变量等)
- help():查看某个函数或方法的帮助文档。
例如:
>>>dir(dir)
显示如下内容:
其中以“_”开头、“_”结尾的方法被约定成私有方法,不希望被外部直接调用。
如果希望查看某个方法的用法,则可以使用help()函数。例如:
2.5.5 删除空白
str还提供了如下常用方法删除空白。
- strip():删除字符串前后的空白。
- lstrip():删除字符串前后(左边)的空白。
- rstrip():删除字符串后面(右边)的空白。
注:Python的str是不可变的(即字符串一旦形成,它所包含的字符串序列就不能发生任何改变),因此这三个方法只是返回字符串前面或后面空白被删除之后的副本,并没有真正改变字符串本身。
#*****************************
#***程序名称:strip_test.py
#***程序功能:删除空白。
#***编写日期:2019-2-11
#*****************************
s = ' this is a puppy '
#删除左边的空白
print(s.lstrip())
#删除右边的空白
print(s.rstrip())
#删除两边的空白
print(s.strip())
#再次输出s,将会看到s并没有改变
print(s)
#删除字符串前后指定字符的功能
s2 = 'i think it is a scarecrow'
#删除左边的i、t、o、w字符
print(s2.lstrip('itow'))
#删除右边的i、t、o、w字符
print(s2.rstrip('itow'))
#删除两边的i、t、o、w字符
print(s2.strip('itow'))
2.5.6 查找、替换相关方法
str提供了如下常用的执行查找、替换等操作的方法:
- startswith():判断字符串是否以指定子串开头。
- endswith():判断字符串是否以指定子串结尾。
- find():查找指定子串在字符串中出现的位置,如果没有找到指定子串,则返回-1。
- index():查找指定子串在字符串中出现的位置,如果没有找到指定子串,则引发ValueError错误。
- replace():使用指定子串替换字符串中的目标子串。
- translate():使用指定的翻译映射表对字符串执行替换。
例如:
#*****************************
#***程序名称:search_test.py
#***程序功能:查找、替换相关方法
#***编写日期:2019-2-11
#*****************************
s = 'crazyit.org is a good site'
#判断s是否以crazyit开头
print(s.startswith('crazyit'))
#判断s是否以site结尾
print(s.endswith('site'))
#查找s中'org'出现的位置
print(s.find('org'))
#查找s中'org'出现的位置
print(s.index('org'))
#从索引9处开始查找'org'出现的位置
print(s.find('org',9)) #-1
#从索引9处开始查找'org'出现的位置
#print(s.index('org',9)) #引发错误
#将字符串中所有it替换成XXXX
print(s.replace('it','XXXX'))
#将字符串中1个it替换成XXXX
print(s.replace('it','XXXX',1))
#定义翻译映射表:97(a)->945(α),98(b)->946(β),116(t)->964(τ)
table = {97:945,98:946,116:964}
print(s.translate(table))
此外,Python为str提供了一个maketrans()方法,通过该方法可以非常方便地创建翻译映射表。
2.5.7 分割、连接方法
- split():将字符串按指定分隔符分割成多个短语。
- join():将多个短语连接成字符串。
具体用法如下:
#*****************************
#***程序名称:split_test.py
#***程序功能:分割、连接方法
#***编写日期:2019-2-11
#*****************************
s = 'crazyit.org is a good site'
#使用空白对字符串进行分割
print(s.split()) #输出['crazyit.org','is','a','good','site']
#使用空白对字符串进行分割,最多只分割前两个单词
print(s.split(None,2)) #输出['crazyit.org','is','a good site']
#使用点进行分割
print(s.split('.')) #输出['crazyit','org is a good site']
mylist = s.split()
#使用'/'作为分隔符,将mylist连接成字符串
print('/'.join(mylist)) #输出crazyit.org/is/a/good/site
#使用','作为分隔符,将mylist连接成字符串
print(','.join(mylist)) #输出crazyit.org,is,a,good,site
可以看出split()和join()两个函数互为逆操作。
2.6 运算符
Python语言用于将一个或多个操作数连接成可执行语句,用来实现特定功能。
2.6.1 赋值运算符(“=”)
贴上代码说明问题:
#*****************************
#***程序名称:assign_operator_test.py
#***程序功能:赋值运算符
#***编写日期:2019-2-12
#*****************************
#为变量st赋值为Python
st = "Python"
#为变量pi赋值为3.14
pi = 3.14
#为变量visited赋值为True
visited = True
#将st的值赋给st2
st2 = st
print(st2)
d1 = 12.34
#将表达式的值赋给d2
d2=d1+5
#输出d2的值
print("d2的值为:%g"%d2)
2.6.2 算术运算符(加、减、乘、除、求余、求负、乘方)
继续上代码:
#*****************************
#***程序名称:arithmetic_test.py
#***程序功能:算术运算符的使用
#***编写日期:2019-2-12
#*****************************
a=5.2
b=3.1
the_sum=a+b
#sum的值为8.3
print("the_sum的值为:",the_sum)
s1='Hello,'
s2='Charlie'
#使用+连接两个字符串
print(s1+s2)
#减法'-'运算符的使用
c=5.2
d=3.1
sub=c-d
#sub的值为2.1
print("sub的值为:",sub)
#定义变量x,其值为-5.0
x=-5.0
#对x求负,其值变成5.0
x=-x
print(x)
#定义变量y,其值为-5.0
y=-5.0
#y值依然是-5.0
y=+y
print(y)
e=5.2
f=3.1
multiply=e*f
#mutiply的值为16.12
print("mutiply的值为:",multiply)
s3='crazyit '
#使用*将5个字符串连接起来
print(s3*5)
print("19/4的结果是:",19/4) #普通除法
print("19//4的结果是:",19//4) #整除除法
aa=5.2
bb=3.1
print("aa/bb的值是:",aa/bb)
print("aa//bb的值是:",aa//bb)
print("5%3的值为:",5%3) #输出2
print("5.2%3.1的值为:",5.2%3.1) #输出2.1
print("-5.2%-3.1的值为:",-5.2%-3.1) #输出-2.1
print("5.2%-2.9的值为:",5.2%-2.9) #输出-0.6
print("5.2%-1.5的值为:",5.2%-1.5) #输出-0.8
print("-5.2%-1.5的值为:",-5.2%1.5) #输出0.8
#print("5对0.0求余的结果是:",5%0.0) #导致错误
#乘方运算符
print('5的2次方:',5**2)
print('4的3次方:',4**3)
print('4的开平方:',4**0.5)
print('27的开3次方:',27**(1/3))
2.6.3 位运算符(&按位与、|按位或、^按位与或、~按位取反、<<左移、>>右移)6个
位运算符的运算法则
第一个操作符 | 第二个操作符 | 按位与(&) | 按位或(|) | 按位异或(^) |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
注意:在进行位移运算时,左移n位就相当于乘以2的n次方,右移n位则相当于除以2的n次方(如果不能整除,实际返回的结果是小于除得结果数值的最大整数的)。不仅如此,进行位移运算只是得到了一个新的运算结果,而原来的操作数本身是不会改变的。
2.6.4 扩展后的赋值运算符
- +=:x+=y ——>x=x+y
- +=:x-=y ——>x=x-y
- *=:x*=y ——>x=x*y
- /=:x/=y ——>x=x/y
- //=:x//=y ——>x=x//y (整除)
- %=:x%=y——>x=x%y (求余)
- **=:x**=y ——>x=x**y (乘方)
- &=:x&=y ——>x=x&y (按位与)
- |=:x|=y ——>x=x|y (按位或)
- ^=:x^=y ——>x=x^y (按位异或)
- <<=:x<<=y ——>x=x<<y
- >>=:x>>=y ——>x=x>>y
2.6.5 索引运算符(就是方括号[ ])
a = 'abcdefghijklmn'
# 获取索引2到索引8的子串,步长为3
print(a[2:8:3]) # 输出cf
# 获取索引2到索引8的子串,步长为2
print(a[2:8:2]) # 输出ceg
2.6.6 比较运算符与bool类型
Python提供bool类型表示真(True)假(False)。
Python支持的运算符如下:
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回True。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回True。 |
此外,Python还提供了了一个id()函数,判断变量所引用的对象的内存地址。
来看代码:
import time
# 输出True
print("5是否大于 4:", 5 > 4)
# 输出False
print("3的4次方是否大于等于90.0:", 3 ** 4 >= 90)
# 输出True
print("20是否大于等于20.0:", 20 >= 20.0)
# 输出True
print("5和5.0是否相等:", 5 == 5.0)
# 输出False
print("True和False是否相等:", True == False)
# 输出True
print("1和True是否相等:", 1 == True)
# 输出True
print("0和False是否相等:", 0 == False)
print(True + False) # 输出1
print(False - True) # 输出-1
#获取当前时间
a = time.gmtime()
b = time.gmtime()
print(a == b) #a和b两个时间相等,输出True
print(a is b) #a和b不是一个对象,输出False
#使用id()函数判断变量a、b
print(id(a))
print(id(b))
2.6.7 逻辑运算符
逻辑运算符用于操作bool类型变量、常量或表达式,逻辑运算的返回值也是bool值。
一共三个逻辑运算符:
- and:与
- or:或
- not:非
例如:
# 直接对False求非运算,将返回True
print(not False)
# 5>3返回True,20.0大于10,因此结果返回True
print(5 > 3 and 20.0 > 10)
# 4>=5返回False,"c">"a"返回True。求或后返回True
print(4 >= 5 or "c" > "a")
又例如:
#bookName = "疯狂Python"
#price = 79
#version = "正式版"
#if bookName.endswith('Python') and price < 50 or version == "正式版" :
# print("打算购买这本Python图书")
#else:
# print("不购买!")
bookName = "疯狂Python"
price = 79
version = "正式版"
if bookName.endswith('Python') and (price < 50 or version == "正式版") :
print("打算购买这本Python图书")
else:
print("不购买!")
建议:组合逻辑中,使用圆括号()来提高程序的可读性。
2.6.8 三目运算符(if语句)
语法:
True_statements if expression else False_statements
规则:先对逻辑表达式expression求值,如果逻辑表达式返回True,则执行并返回True_statements的值;如果逻辑表达式返回False,则执行并返回False_statements的值。
例如:
a = 5
b = 3
st = "a大于b" if a > b else "a不大于b"
# 输出"a大于b"
print(st)
# 输出"a大于b"
print("a大于b") if a > b else print("a不大于b")
# 第一个返回值部分使用两条语句,逗号隔开
st = print("crazyit"), 'a大于b' if a > b else "a不大于b"
print(st)
# 第一个返回值部分使用两条语句,分号隔开
st = print("crazyit"); x = 20 if a > b else "a不大于b"
print(st)
print(x)
c = 5
d = 5
# 下面将输出c等于d
print("c大于d") if c > d else (print("c小于d") if c < d else print("c等于d"))
2.6.9 in运算符——用于判断某个成员是否位于序列中
(1)判断字符串是否包含特定子串;
(2)判断序列是否包含子序列。
例如:
s = 'crazyit.org'
print('it' in s) # True
print('it' not in s) # False
print('fkit' in s) # False
print('fkit' not in s) # True
2.6.10 运算符的结合性和优先级(表达式运算中的运算顺序)
- Python大部分运算符从左到右结合(单目运算符、赋值运算符、三目运算符除外);
- 乘法和除法左右两边操作数可以互换位置;