第二章

2020-02-28  本文已影响0人  M_小七
变量和简单类型

单行注释和多行注释

#这是单行注释

'''
这是
多行
注释
'''

变量
Python 使用等号“=”作为赋值运算符 ,例如

 a = 20

这个过程就被称为赋值:将 20 赋值给变量a

Python是弱类型语言
Python 门弱类型语言 ,弱类型包含两方面的含义
①所有的变量无须声明即可使用,或者说对从未用过的变量赋值就是声明了应变量;
②变量的数据类型可以随时改变,同一个变量可以一会儿是数值型,一会儿是字符串型。

a = 20
#这时a是int类型
a = 'r'
type(a) 
#<class ’str’ > a又变成str类型

使用 print 函数输出变量
print()函数可以输出一个或多个变量

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

如果读者希望改变默认的分隔符,可使用sep进行设置

print('读者名:', user_name, '年龄:', user_age, sep='$')
#读者名:$Char$年龄:$8

在默认情况下, print函数输出之后自动换行,这是因为 print函数的end参数的默认值是“\n ”,这个就代表了换行,如果希望 print函数输出之后不会换行,将end参数修改为" "

user_name = 'Char'
user_age = 8
print('读者名:', user_name, end= ' ')
print('年龄:', user_age)
#读者名: Char 年龄: 8
#没有换行
print('读者名:', user_name)
print('年龄:', user_age)
#读者名: Char
#年龄: 8
#自动换行

file参数指定print函数的输出目标, file参数的默认值为sys.stdout,该默认值代表了系统标准输出,也就是屏幕,因此 print()函数默认输出到屏幕。如果改变file参数值输出将到特定文件中

f = open( 'first/novel/threekingdom.txt', 'w', encoding = 'utf-8')
print('沧海月明珠有泪', file=f)
print('蓝回日暖玉生烟', file=f)
f.close()
#打开.txt文件确认,文件内如下两行文字
# 沧海月明珠有泪
# 蓝回日暖玉生烟

变量的命名规则
Python是区分大小写的 ,因此abc,Abe 是两个不同的标识符
\color{red}{注意:}
①标识符可以由字母、数字、下画线组成,其中数字不能开头
②标识符不能是Python的关键字,但可以包含关键字。
③标识符不能包含空格

abc_xyz # 合法。
HelloWorld # 合法。
abc # 合法
xyz#abc # 不合法,标识符中不允许出现“#”号。
7abc # 不合法,标识符不允许数字开头。

Python的关键字和内置函数
\color{red}{注意:}
①如果开发者使用关键字作为变量名, Python解释器会报错。
②如果开发者使用内置函数的名字作为变量名, Python解释器不会报错,只是该内置函数
就被这个变量覆盖了,该内置函数就不能使用了。

#导入 keyword 模块
import keyword 
#显示所有关键字
keyword.kwlist

数值类型

#定义变量 ,赋值为 56
a = 56 
print(a) 
#为 赋值一个大整数
a = 9999999999999999999999 
print(a) 
# type ()函数用于返回变量的类型
print (type (a)) 
#<class 'int'>

Python的整型支持None值(空值)

a = None
print(a)
#None
print(type(a))
#<class 'NoneType'>

Python的整型数值有四种表示形式:
十进制形式:最普通的整数就是十进制形式的整数
二进制形式:以0b或0B开头的整数就是二进制形式的整数
八进制形式:以0o或0O开头的整数就是八进制形式的整数
十六进制形式:以0x或0X开头的整数就是十六进制形式的整数,其中1015分别以af来表示

valuel1 = 0x13
valuel2 = 0XaF
print('valuel1的值为:', valuel1)
#valuel1的值为: 19
print('valuel2的值为:', valuel2)
#valuel2的值为: 175
bin_val = 0b111
print('bin_val的值为:', bin_val)
#bin_val的值为: 7
oct_val = 0o54
print('oct_val的值为:', oct_val)
#oct_val的值为: 44

为了提高数值(包括浮点型)的可读性, Python 3.x允许为数值(包括浮点型)增加下画线作为分隔符

one_million = 1_000_000
print(one_million)
#1000000
afl = 5.2345556
print(afl)
#5.2345556
af2 = 25.2345
print(af2)
#25.2345
f1= 5.12e2
print(f1)
#512.0
f2 = 5e3
print(f2, type(f2))
#5000.0 <class 'float'>
a1 = 3 + 0.2j
print(a1, type(a1))
#(3+0.2j) <class 'complex'>
a2 = 4 - 0.1j
print(a1 + a2)
#(7+0.1j)
import cmath
a3 = cmath.sqrt(-1)
print(a3)
#1j
str3 = 'I'm a coder'

上面的字符串中包含了单引号,此时python会将字符串的单引号与第一个单引号号配对,这样就会把I当成字符串,而后面的m a coder 就变成了多余的内容,从而导致语法错误。
为了避免上述情况

str3 = “I'm a coder”

上面代码使用双引号将字符串括起来,此时Python就会把字符串中的单引号当成字符串内容,而不是和字符串开始的引号配对
也可以使用单引号将字有串括起来

str4 = '"Spring is here,let us jam!",said woodchuck'

或者使用转义字符

str5 = '"we are scared, Let\' s hide in the shade ", says the bird '

2.拼接字符串
如果直接将两个字符串紧挨着谢在一起,Python就会自动拼接他们

str = "hey,"'charlie'
print(str)
#hey,charlie

上面的这种写法只是字符串的特殊方法,不能用于真正的字符串拼接,Python使用加号来实现字符串拼接

s1 = 'python'
s2 = ' is funny'
s = s1 + s2
print(s)
# python is funny

3.repr 和字符串
Python不允许数字和字符串直接拼接,必须要把数字转化成字符串
须先将数值转换成字符串
为了将数值转换成字符串,使用 str()或 repr() 函数

x = '这本书的价格是:'
y = str(98)
print(x+y)
# 这本书的价格是:98
y = repr(98)
print(x+y)
# 这本书的价格是:98

str是Python内置的类型,repr是个函数。
repr 可以以Python 表达式的形式来表示值。

st = ' I will play my fife '
print(st)
print(repr(st))
#  I will play my fife 
# ' I will play my fife '

通过上面的输出可以看出,如果直接打印输出字符串,只能看到字符串的内容,没有引号,而使用repr对字符串进行处理后输出,将可以看到带引号的字符串,这就是字符串的Python的表达式形式
4.使用input和raw_input(Python2.X)
input将输入的内容放入字符串,因此不论输入任何内容,都返回一个字符串

s = input("输入一个数字:")
#8
print(s)
print(type(s))
# 8
# <class 'str'>

5.长字符串
前面介绍多行注释时提到使用''' ''' 引号(单引号、双引号都行)来包含多行注释内容,其实这是长字符串写法,只是由于在长字符串中可以放置任何内容,包括放置单引号、双引号都可以,如果所定义的长字符串没有赋值给任何变量,那么这个字符串就相当于被解释器忽略了,也就相当于注释掉了。

s = '''
a,
b,
ggg
gggg
ggg
'''
print(s)

# a,
# b,
# ggg
# gggg
# ggg

Python 还允许使用转义字符\ 换行符进行转义,转义之后的换行符不会“中断”字符串

s = 'The quick brown fox\
jumps over the lazy'
print(s)
# The quick brown foxjumps over the lazy

6.原始字符串
因为反斜线有特殊意义,当字符串中出现反斜线时就需要转义,如:G:\publish\coes\02\2.4,就要写成G:\publish\coes\02\2.4,这样写比较麻烦,
我们以“r ”为原始字符串开头 原始字符串就不会把反斜线当成特殊字符处理了

s = r'G:\publish\coes\02\2.4'
print(s)
#G:\publish\coes\02\2.4

如果原始字符串中包含引号,程序同样需要对引号进行转义,但是不能使用 \ 来转义

s = r' "Let \' s go", said Charlie'
print(s)
# "Let \' s go", said Charlie

使用 \ 转义的输出是直接把 \打印出来了
7.bytes
字符串(str)由多个字符组成, 以字符为单位进行操作, byte 是由多个字节组成,以字节为单位进行操作
bytes和str 除操作的数据单元不同之外,它们支持的所有方法都基本相同, bytes 也是不可变序列
bytes 保存的就是原始的字节(二进制格式)数据,因此 bytes 对象可用于在网络上传输数据 ,也可用于存储各种二进制格式的文件

b2 = b''
print(b2)
print(type(b2))
# b''
# <class 'bytes'>

通过前缀b指定hello为bytes类型的值

b2 = b'hello'
print(b2)
print(type(b2))
# b'hello'
# <class 'bytes'>

调用bytes方法将字符串改成bytes类型的值

b3 = bytes('今天是星期二', encoding ='UTF-8')
print(type(b3))
# <class 'bytes'>

利用字符串的 encode 方法编码成 bytes ,默认使用 UTF-8 字符集

b4 = '今天是星期二'.encode('UTF-8')
print(b4)
#b'\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x98\xaf\xe6\x98\x9f\xe6\x9c\x9f\xe4\xba\x8c'

(将 bytes 对象解码成字符串 默认使用 UTF 进行解码)
在Python3中,str类型的对象都是Unicode,因此对于str类型的对象只有encode方法,没有decode方法(若运行,会报错)。

转义字符 说明
\b 退格
\n 换行
\t 制表
\r 回车
\ ' 单引号
\ '' 双引号
\ \ 反斜杠
s = 'Hello\nCharle\nGood\nMorning'
print(s)
# Hello
# Charle
# Good
# Morning
s2 = '商品名 \t\t 单价\t\t数量\t\t总价'
s3 = '疯狂Java讲义\t l08 \t\t2   \t\t216'
print(s2)
print(s3)
# 商品名        单价     数量      总价
# 疯狂Java讲义   l08        2           216

2.字符串格式化
使用%对各类型的数据进行格式化输出

price = 108
print('the book’s price is %s' % price)
# the book’s price is 108

此代码分为三部分:
第一部分是格式,字符串(它相当于字符串模板),该格式化字符串中包含一个%s 占位符,它会被第三部分的变量或表达式的值代替,第二部分部分固定使用%作为分隔符。
格式化字符串中的%s被称为转换说明符
如果格式化字符串包含多个占位符,第三部分也应该对应地提供多个变量,并且使用圆括号将这些变量括起来

name = 'Dive'
age  = 45
print('%s的年龄是%s'%(name, age))
#Dive的年龄是45

也可以使用如下方法(3.6以上版本)

print(f'{name}的年龄是{age}')

转换说明符
注意:二进制是0b开头,八进制是0o开头,十六进制是0x开头

转换说明符 说明
i/d 将整数、浮点数转换成十进制表示,并将其格式化到指定位置
o 将整数、浮点数转换成八进制表示,并将其格式化到指定位置
x 将整数、浮点数转换成十六进制表示,并将其格式化到指定位置
e 将整数、浮点数转换成科学计数法表示,并将其格式化到指定位置(小写e)
E 将整数、浮点数转换成科学计数法表示,并将其格式化到指定位置(小写E)
f 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认小数点后保留6位)
F 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认小数点后保留6位)
g 自动调整将整数、浮点数转换成浮点型或科学计数法表示(超过6位使用科学计数法),并将其格式化到指定位置(如果是科学计数这是e)
G 自动调整将整数、浮点数转换成浮点型或科学计数法表示(超过6位使用科学计数法),并将其格式化到指定位置(如果是科学计数这是E)
print("将二进制转换成十进制::%d" % 0b1010)
#10
print("将八进制转换成十进制::%d" % 0o10)
#8
print("将十六进制进制转换成十进制::%d" % 0x10)
#16
print("将十进制进制进制转换成八进制::%o" % 10)
#12
# 科学计数法表示
print("%e" % 18889999)
#1.889000e+07
print("保留三位小数:%.3f" % 3.14159265)
#3.142

3.序列相关方法
python字符串的索引从0开始,0,1,2......后面依此类推。

s = 'Hello,Charle!Good Morning!'
print(s[0])
#H
print(s[-1])
#!
print(s[:4])
#Hell
print(s[:-5])
#Hello,Charle!Good Mor
print(s[::-1])
# !gninroM dooG!elrahC,olleH

4.大小写相关方法
dir:列出指定类或模块包含的全部内容(包括函数、方法、类、变量等)。
help:查看某个函数或方法的帮助文档。

str类中与大小写相关的常用方法如下:
~ title:将每个单词 首字母改为大写
~ lower:将整个字符串改为小写
~ upper:将整个字符串改为大写

s = 'hello,charle!good morning!'
print(s.title())
s1=s.upper()
print(s1)
print(s1.lower())
# Hello,Charle!Good Morning!
# HELLO,CHARLE!GOOD MORNING!
# hello,charle!good morning!

5.删除空白
str 还提供了如下常用的方法来删除空白。
~ stri:删除字符串前后空白。
~ strip:删除字符串前面(左边)的空白。
~ rstrip: 删除字符串后面(右边)的空白。
需要说明的是:Python的str是不可变的(不可变的意思是指,字符串一旦形成,它所包含的
字符序列就不能发生任何改变),因此这个方法只是返回字符串前面或后面空白被删除之后的副本,并没有真正改变字符串本身

s = '  hello,charle!good morning!  '
print(s.lstrip())
#hello,charle!good morning!
print(s.rstrip())
#  hello,charle!good morning!
print(s.strip())
#hello,charle!good morning!
print(s)
#  hello,charle!good morning!  

最后输出s后可以看出s并没有改变

也可以指定删除内容

s = 'hello,charle!good morning'
print(s.lstrip('hell'))
#o,charle!good morning!
print(s.rstrip('ning'))
#hello,charle!good mor!
print(s)
#hello,charle!good morning!
  1. 查找、替换相关方法
    str提供了如下常用的执行查找 、替换等操作的方法:
    ~ startswith判断字符串是否以指定子串开头。
    ~ endswith判断字符串是否以指定子串结尾
    ~ find查找指定子串在字符串中出现的位置,如果没有找到指定子串 ,则返回 -1
    ~ index查找指定子串在字符串中出现的位置,如果没有找到指定子串,则引发 ValueError错误。
    ~ place使用指定子串替换字符串中的目标子串
    ~ translate使用指定的翻译映射表对字符串执行替换。
s = 'crazyit.org is a good site'
print(s.startswith('cra'))
#判断是否以cra开头
# True
print(s.endswith('te'))
#判断是否以te结尾
# True
print(s.find('is'))
#查找is出现的位置
#12
print(s.index('org'))
#从索引开始查找org出现的位置
#8
print(s.find('org', 9))
#从索引9处开始查找org出现的位置
# -1
#print(s.index('org', 9))
#substring not found
print(s.replace('is','***'))
#crazyit.org *** a good site
print(s.replace('it', 'xxx', 1))
#将字符串中一个it改写成xxx
#crazyxxx.org is a good site
table ={97:945, 116:964}
print(s.translate(table))
#定义翻译映射表 a(97)->α(945) t(116)->τ(964)
# crαzyiτ.org is α good siτe

使用translate时要记住字符编码,我们也可以用maketrans方法,该方法无需记住字符编码就可返回映射表

print(s.maketrans('at','ατ'))
#{97: 945, 116: 964}

7.分割、连接方法
split: 将字符串按指定分割符分割成多个短语
join:将多个短语连接成字符串

s = 'crazyit.org is a good site'

print(s.split(' '))
#等同于s.split() 按空格分割
#['crazyit.org', 'is', 'a', 'good', 'site']
print(s.split(' ', 2))
#等同于s.split(None, 2)
#按两个空格分隔
#['crazyit.org', 'is', 'a good site']
print('*'.join(s))
#c*r*a*z*y*i*t*.*o*r*g* *i*s* *a* *g*o*o*d* *s*i*t*e
st = 'python'
pi = 3.14
T = True

除此之外,也可使用赋值运算利将一个变量的值赋给另一个变量

st = pi
print(st)
# 3.14

Python 赋值表达式是有值的,赋值表达式的值就是被赋的值

a = b = c = 20

赋值运算符还 用于将表达式的值赋给变量

d1 = 12.34
# 将表达式的值赋给 d1
d2 = d1 + 5
# 输出 d2 的值
print(d2)
# 17.34

2.算术运算符
Python 支持所有的基本算术运算符,这些算术运算符用于执行基本的数学运算

num1 = 9 + 2
print("加:%d" % num1)
num2 = 9 - 2
print("减:%d" % num2)
num3 = 9 * 2
print("乘:%d" % num3)
num4 = 9 / 2
print("除:%d" % num4)
# 取整除
num5 = 9 // 2
print("取整除:%d" % num5)
# 取余数
num6 = 9 % 2
print("取余数:%d" % num6)
# 取次幂
num7 = 9 ** 2
print("取次幂:%d" % num7)

3.位运算符

运算符 说明
按位与
按位或
^ 按位异或
~ 按位取反
<< 左位移运算符
>> 右位移运算符

4.索引运算符
索引运算符就是方括号,在方括号中既可使用单个索引值,也可使用索引范围。实际上,在使用索引范围时,还可指定步长。

a = 'asdfghknuukl'
print(a[2:9:2])
# dgku
print(a[2:11:3])
# dhu

5.比较运算符
Python 支持的比较运算符如下:
(>)大于,如果运算符前面的值大于后面的值,则返回 True;否则返回 False。
(>=)大于或等于,如果运算符前面的值大于或等于后面的值,则返回 True;否则返回 False。
(<)小于,如果运算符前面的值小于后面的值,则返回 True;否则返回 False。
(<=)小于或等于,如果运算符前面的值小于或等于后面的值,则返回 True;否则返回 False。
(==)等于,如果运算符前面的值等于后面的值,则返回 True;否则返回 False。
(!=)不等于,如果运算符前面的值不等于后面的值,则返回 True;否则返回 False。
(is)判断两个变量所引用的对象是否相同,如果相同则返回 True。
(is not)判断两个变量所引用的对象是否不相同,如果不相同则返回 True。

# 输出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)

6.逻辑运算符

逻辑运算符 含义 基本格式 说明
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 取反。
print(not False)
# 5>3 返回 True 20.0 大于 10 ,因此结果返回 True
print(5 > 3 and 20.0 > 10)
# 4>=5 返回 False 返回 True ,求或后返回 True
print(4 >= 5 or 'C' > 'a')

7.三目运算符

x = 3
y = 6 
#一般的写法
if (x == y):
    print("两数相同!")
elif(x > y):
    print("较大的数为:",x)
else:
    print("较大的数为:",y)  
# 三目运算符写法
print(x if(x>y) else y)

8.in运算符
in 运算符可判断某个成员是否在序列中,例如判断某个字符是否在某个字符串中。in 的反义词是 not in,判断的结果都是 bool 型值。

print('on' in 'python.org')                 
# 输出:True
print('on' not in 'python.org')          
# 输出:False
print('linux' not in 'python.org')      
# 输出:True

9.运算符的结合性和优先级


运算符有不同的优先级,优先级高的会先计算。按优先级从高到低排列
上一篇下一篇

猜你喜欢

热点阅读