02-Python基础
文件编码
Python2中
在Python2中:默认文件编码是ASC II,所以无法正常输出中文,会报错。
- 解决办法
在文件的开头添加# -- coding: UTF-8 -- 或者 # coding=utf-8
Python3中
在Python3中:默认文件编码是UTF-8,所以无需指定编码
IDE中(如pyCharm)
如果你使用IDE,则需要设置 py 文件存储的格式为 UTF-8等支持中文的编码,否则会报错
- 解决办法
- File -> Settings -> 搜索encoding
- 将Global Encoding、Project Encoding和Default encoding for properties files都修改为UTF-8
注释
在python中,有三种注释的方式
- #单行注释
- ‘’‘多行注释’’’
- “”“多行注释”""
例如
'''
函数作用:
输出Hello world
'''
"""
作者:
张三
"""
print("Hello world") #输出Hello world
多行语句
单行语句分隔为多行
- 利用反斜杠 \ 分隔
a = 1 + \
2 + \
3 #相当于a = 1 + 2 + 3
print(a)
- 利用括号分隔
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
语句中包含 [], {} 或 () 括号就不需要使用多行连接符
在同一行写多条语句
print("Hello"); print("World")
可以在同一行写多条语句,语句之间用分号 ; 隔开
输入和输出
输入
name=input("Please input your name:") #input将用户输入的内容作为字符串接收
print("Your name is ",name)
结果:
Please input your name:张三
Your name is 张三
解释:
通过调用函数input()来得到用户输入
input函数中的参数为用户提示,若无需提示,则省略参数即可。
用户输入的内容将以String保存,即name的类型为String
如果需要得到其他类型,则需要强制转换
输出
- 普通输出
print("你好")
print("你好","中国") #输出"你好 中国"
print() #输出换行
print("你好",end="") #输出"你好",但不换行
解释:
- 默认情况下,输出后自动换行
- 如果只想输出换行,则
print()
即可- 如果不想输出换行,则在最后添加参数
end=""
将结束符修改为无
- 可以传入0到多个参数,参数的类型也无要求
- 参数之间会以空格分隔,依次输出
- 格式化输出
通过格式化输出,可以将格式和数据分开。
python的格式化输出和其他语言相同,使用%d等占位符指定数据的格式。
将格式与数据分开的好处是:
- 方便维护
- 代码可读性高
- 可以将数据按照不同格式输出(例如小数可精确到某一位)
示例:
name="张三"
age=18
sex="男"
msg='''
---------
name:%s
age:%d
sex:%s
---------
''' % (name,age,sex)
print(msg)
结果:
---------
name:张三
age:18
sex:男
---------
解释:
msg的类型为String。
代码中的%s、%d、%s为占位符,将会被后面的数据name、age和sex依次替换。
%s意为字符串,将会被替换为字符串的格式。
%d意为整数,将会被替换为整数的格式(若为小数,将会被取整)。
可以很直观地看到格式为:
---------
name:%s
age:%d
sex:%s
---------
整数占位符:
%d //输出十进制
%o //输出无符号整数的八进制
%x //输出无符号整数的十六进制(字母小写)
%X //输出无符号整数的十六进制(字母大写)
%5d //输出宽度为5(右对齐)
%-5d //输出宽度为5(左对齐)
%+5d //输出宽度为5(输出符号)
%05d //输出宽度为5(前面补0,而不是空格)
%#o //输出八进制前的0(进制前的标识符)
小数占位符:
%f //输出小数(保留到小数点后6位)
%e,E //科学计数法,保留到小数点后6位(1.234560e+02)
%g,G //以%f或%e中较短的输出宽度输出小数
%10f //输出宽度为10(多出不会被截断)
%10.3f //输出宽度为10(保留到小数点后3位)
字符占位符:
%c //输出单个字符
%s //输出字符串
其他占位符:
Python会将符号%和它后面的字符作为格式解析。
当我们需要输出%时
%% //输出%就需要转义,这样就可以得到%了,而不是将它解析为占位符
变量
变量命名规则
- 只能是数字、字母和_组成
- 不能以数字开头
- 不能以保留字命名
- 支持中文,但是不建议使用中文作为变量名
- 变量名区分大小写
- 没有常量,通常用全部大写命名来表示常量
良好的命名规范:
- 不使用中文作为变量名
- 定义的名称应该有意义
- 使用驼峰式命名、下划线分割单词
- 用全部大写命名来表示常量
赋值
a=1
a='abc' #原本是int类型,可以被赋值为String类型
a,b=3,4 #相当于a=3,b=4
t=(3,4)
a,b=t #相当于a=3,b=4
解释:
Python是一种弱类型语言,所以定义变量无需指定类型,Python将根据值的类型自动判断。
Python是一种弱类型语言,所以原本为int类型的变量,可以被赋值为其他类型。
a=3,b=4这种形式的赋值可以写为a,b=3,4
赋值时,变量和内存空间的关系是怎样的?
Python为了节约内存,只会保留一份常量,即不同的变量如果内容相同则指向同一常量。
当其中一个变量内容改变时,就会指向新的内存空间。
a="变量1"
b="变量1"
b="变量2"
a和b的内容一开始是相同的,而且都是常量。所以它们指向同一内存空间。
当b的内容改变,变成另一个常量"变量2",它就会指向新的内存空间。
用运算符is或is not可以验证以上说法。
删除变量
a=1 #定义变量a
del a #删除变量a
#print(a) #报错
del专门用于删除变量
变量删除之后,若被调用则报错:not defined
运算符
算术运算符
假设变量: a=10,b=20
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | a + b 的结果 30 |
- | 减 | a - b 的结果 -10 |
* | 乘 | a * b 的结果 200; “Hello” * 2的结果为HelloHello |
/ | 除 | b / a 的结果 2 |
% | 取模 - 返回除法的余数 | b % a 的结果 0 |
** | 幂 - 返回x的y次幂 | a**b 为10的20次方,输出结果 100000000000000000000 |
// | 整除(平板除) - 返回商的整数部分(向下取整) | 9//2的结果为4; -9//2的结果为-5 |
比较运算符
假设变量: a=10,b=20
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 | (a == b) 返回 False。 |
!= | 不等于 | (a != b) 返回 true. |
> | 大于 | (a > b) 返回 False。 |
< | 小于 | (a < b) 返回 true。 |
>= | 大于等于 | (a >= b) 返回 False。 |
<= | 小于等于 | (a <= b) 返回 true。 |
赋值运算符
假设变量: a=10,b=20
运算符 | 描述 | 实例 |
---|---|---|
= | 普通赋值运算符 | c = a + b ,将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
逻辑运算符
在Python中,逻辑运算符有三个:and、or和not。
它们分别是短路与、短路或、非。重点在短路二字。
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 短路与 |
or | x or y | 短路或 |
not | not x | 非 |
and真值表:
逻辑表达式 | 结果 |
---|---|
True and True | TRUE |
True and False | FALSE |
False and True | FALSE |
False and False | FALSE |
or真值表:
逻辑表达式 | 结果 |
---|---|
True or True | TRUE |
True or False | TRUE |
False or True | TRUE |
False or False | FALSE |
not真值表:
逻辑表达式 | 结果 |
---|---|
not True | FALSE |
not False | TRUE |
什么是短路?
在and中:
表达式3 = 表达式1 and 表达式2
当表达式1为False时,表达式3一定为False,那就不必计算表达式2。
在or中:
表达式3 = 表达式1 or 表达式2
当表达式1为True时,表达式3一定为True,那就不必计算表达式2
所以:
当通过表达式1可以得出结论时,就不会去计算后面的表达式(被忽略掉)。
例如:
False and print("Hello") #无任何输出
True and print("Hello") #输出Hello
is、is not
- is和is not用于判断两个变量的地址是否相同
- 和==不一样,==用于判断两个变量的内容是否相同
例如:
a=[1,2]
b=[1,2]
print(a is b) #False
print(a == b) #True
解释:
a和b为引用类型(类似于C++中的指针),所以a和b虽然内容相同,但地址不同。
在前面的例子中:
a="变量1"
b="变量1"
a和b为基本数据类型,指向常量。所以a和b不仅内容相同,地址也相同。
位运算符
按位运算符是把数字看作二进制来进行计算的。
- 这里假设a=60,b=13。则二进制如下:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与 | (a & b) 输出结果 12 二进制解释: 0000 1100 |
| | 按位或 | (a | b) 输出结果 61 二进制解释: 0011 1101 |
^ | 按位异或 | (a ^ b) 输出结果 49 二进制解释: 0011 0001 |
~ | 按位取反 | (~a ) 输出结果 -61 二进制解释: 1100 0011 一个有符号二进制数的补码形式 |
<< | 左移动运算符 高位丢弃,低位补0 | a << 2 输出结果 240 二进制解释: 1111 0000 |
>> | 右移动运算符 低位丢弃,高位补0 | a >> 2 输出结果 15 二进制解释: 0000 1111 |
运算符优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ | 按位翻转 |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 ‘AND’ |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
流程控制语句
三大结构
计算机语言的三大结构:
顺序结构、分支结构和循环结构
分支结构-if语句
if a>b:
print("a>b")
print("a大于b")
elif a<b:
print("a<b")
print("a小于b")
else:
print("a=b")
print("a等于b")
每个条件后面,必须以冒号 : 结尾
利用缩进来分隔代码块
循环结构-while语句
while a>b:
a-=1 #语句1
print("xxxxx1") #语句1
else:
print("xxxxx2") #语句2
解释:
条件后需要以冒号 : 结尾
当条件成立时,循环执行语句1
当结束循环时,执行语句2
else可以用来关闭文件,做一些结束操作
循环结构-for语句
for i in range(3):
print(i) #语句1
else:
print("This is the end") #语句2
解释:
函数range(3)将产生0、1、2的序列,即i的值依次等于0、1、2
只要是序列,就能被for遍历,String也可以。
当条件成立时,循环执行语句1
当结束循环时,执行语句2
同样,else可以用来关闭文件,做一些结束操作
循环结构-break
break用于跳出当前循环
for i in range(5):
if i==3:
break
print(i)
结果:
0
1
2
解释:
range(5)
会产生0、1、2、3、4
序列, i 会依次遍历它们。
当 i 等于3时,跳出循环,所以不会输出3和4
循环结构-continue
continue语句会跳过后面的语句,继续循环
for i in range(5):
if i==3:
continue
print(i)
解释:
range(5)
会产生0、1、2、3、4
序列,i 会依次遍历它们。
当 i 等于3时,跳过语句print(i),所以不输出3,继续进行循环,再输出剩下的4后结束循环。
条件语句
在Python中,可以使用a>b>c形式的条件语句。
在分支语句和循环语句中都可以使用这种形式。
示例:
a=3
b=2
c=1
if a>b>c:
print("a>b>c")
解释:
当a>b,b>c时才会满足条件