1、注释(Comments)
注释用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。
Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
1.1 代码注释介绍
- 注释就是对代码的解释说明,可以让其他人更加轻松地了解代码
- 注释就是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性
- 在有处理逻辑的代码中,源程序有效注释量必须在20%以上。
- 也可以用来调试程序
1.2 单行注释
在python中使用#号作为单行注释的符合
# 注释内容
从#号开始,知道这行结束所有内容都是注释。python解释器遇到#时,会忽略它后面的整行内容。
说明多行代码的功能时一般将注释放在代码的上一行,如:
# 使用print输出hello、world、hello world
print("hello")
print("world")
print("hello world")
# 使用print输出数字
print(12)
print(100 + 2)
print(2 + 100 * 3 )
说明单行代码的功能时一般将注释放在代码的右侧,例如
print("https://www.csdn.net/")#输出csdn官网的网址
print( 12 * 24 ) #输出12*24的结果
print( 100 % 7 ) #输出余数
1.3 多行注释
多行注释是指一次性注释程序中多行的内容(包含一行哪)。
python使用三个连续的单引号或者三个连续的双引号注释多行内容,具体格式如下
'''
使用 3 个单引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
'''
"""
使用 3 个双引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
"""
注意事项:
1、python多行注释不支持嵌套,下面这种写法是错误的:
''' 外层注释 ''' 内层注释 ''' '''
2、不管是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能在将它们视为注释标记,而应该看做正常代码的一部分,例如:
print('''hello world''') print("""hello world""") print("#hello world")
运行结果如下:
对于前两行代码,python没有将这里的三个引号看作是多行注释,而是将它们看作字符串的开始和结束标志。
对于第三行,python也没有将#号看作单行注释,而是将它看作字符串的一部分。
2、变量以及数据类型
2.1 变量的基本使用
程序是用来处理数据的,而变量是用来存储数据的。
2.1.1 变量的定义
- 在python中,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建
- 等号(=)用来给变量赋值
- 等号左边是一个变量名
- 等号右边是存储在变量中的值
变量名 = 值
变量定义之后,后续就可以直接使用了 ,代码实例如下:
# 定义qq_number 的变量用来保存qq号码
qq_number = "123456789"
# 输出qq_number中保存的内容
print(qq_number) #结果:123456789
# 定义qq_password的变量用来保存qq密码
qq_password = "abc123456"
# 输出qq_password中保存的内容
print(qq_password)#结果:abc123456
演练--超市买苹果
提示:可以用其他变量的计算结果来定义变量
变量定义之后,后续就可以直接使用了
需求:
- 苹果的价格是8.5元/斤
- 买了7.5斤苹果
- 计算付款金额
# 定义苹果价格变量
price = 8.5
# 定义购买重量, 买了多少苹果
weight = 7.5
# 计算付款金额
money = price * weight
print(money)
思考题
- 如果只要买苹果,就返5块钱
- 请重新计算购买金额
# 定义苹果价格变量
price = 8.5
# 定义购买重量
weight = 7.5
# 计算金额
money = price * weight
# 只要买苹果就返5元
money = money - 5
print(money)
提问:
上述代码中,一共定义有几个变量?
三个:price 、weight 、money
money = money - 5 是在定义新的变量还是在使用变量?
- 直接使用之前已经定义的变量
- 变量名只有在第一次出现才是定义变量
- 变量名再次出现,不是定义变量,而是直接使用之前定义过的变量
在程序开发中,可以修改之前定义变量中保存的值吗?
可以
变量中存储的值,就是可变的。
2.1.2 查看数据类型
- 在python,只要定义了变量,而且它有数据,那么它的类型就已经确定了,不需要主动说明它的类型,系统也会自动辨别。也就是说“变量没有类型,数据才有类型”。
- 比如下面的实例里,我们没法预测变量b的类型,但是a的类型可以依据数据来确认。
- 如果临时想要查看一个变量存储的数据类型,可以使用type(变量的名字),来查看变量存储的数据类型。
2.1.4 变量命名规则
变量命名规则:
1.变量命名不可以以数字开头,如4four,3man;
2.不推荐使用以下划线开头,下划线开头的内容在python中有特殊意义,如_age,_name;
3.推荐视同固定单词及其缩写,如skt=soket
4.以posix命名规则为主,posix命名规则单词全部小写,且所有单词之间以下划线连接,如my_first_love;
5.驼峰命名法:所有单词自动连接,且每个单词首字母均大写,分为驼峰命名法和小驼峰命名法: 大驼峰命名法:所有单词首字母均大写,如MyFirstLove; 小驼峰命名法:第一个单词首字母小写,其余均大写,如myFirstLove;
6.避开关键字和保留字
2.2 数值类型
整型(Int)-通常被称为是整型或整数,是正或负整数,不带小数点。
浮点型(float)-浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示。
复数(complex)-复数由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示
布尔类型的常量(True和False)如果出现在算术运算中,True被当作1,False被当作0.
int | float | complex |
10 | 0.0 | 3.14j |
100 | 15.20 | 45.j |
-786 | -21.9 | 9.322e-36j |
080 | 32.3e+18 | .876j |
-0490 | -90.0 | -6545+0J |
-0x260 | -32.54e100 | 3e+26J |
0x69 | 70.2E-12 | 4.53e-7j |
2.2.1 数值类型转换
函 数 | 作 用 |
---|---|
int(x) | 将 x 转换成整数类型 |
float(x) | 将 x 转换成浮点数类型 |
complex(real,[,imag]) | 创建一个复数 |
str(x) | 将 x 转换为字符串 |
repr(x) | 将 x 转换为表达式字符串 |
eval(str) | 计算在字符串中的有效 Python 表达式,并返回一个对象 |
chr(x) | 将整数 x 转换为一个字符 |
ord(x) | 将一个字符 x 转换为它对应的整数值 |
hex(x) | 将一个整数 x 转换为一个十六进制字符串 |
oct(x) | 将一个整数 x 转换为一个八进制的字符串 |
2.2.2 python中常用的内置数学函数
2.2.3 随机函数
随机数可以用于数学、游戏、安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
3、标识符及关键字
标识符和关键字是计算语言的基本语法元素,是编写程序的基础,不同计算机语言的标识符和关键字略有区别。
3.1 标识符
计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
3.1.1 标识符命名规则
- 标识符由字母、下划线和数字组成,且数字不能开头
- 严格区分大小写
- 不能使用关键字
3.1.2 标识符命名要求规范
- 标识符命名要做到顾名思义
起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可读性)比如:名字 就定义为name
- 遵守一定的命名规范
- 驼峰命名法,又分为大驼峰命名法和小驼峰命名法
- 小驼峰式命名法:第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
- 大驼峰式命名法:每一个单字的首字母都采用大写字母,例如:FirstName、LastName。
- 还有一种命名法是用下划线“_”来连接所有的单词,比如send_buf,python的命名规则遵循PEP8标准
- 驼峰命名法,又分为大驼峰命名法和小驼峰命名法
变量名,函数名和文件名全小写,使用下划线连接;
类名遵守大驼峰命名法;
常量名全大写;
思考:下面的标识符哪些是正确的,哪些是不正确的为什么?
fromNo12
from#12
my_Boolean
my-Boolean
Obj2
2ndObj
myInt
test1
Mike2jack
My_tExt
_test
test!32
haha(da)tt
int
jack_rose
jack&rose
GUI
G.U.I
3.2 关键字
一些具有特殊功能的标识符,就是关键字。
因为关键字已经被python官方使用了,所以不允许开发者自己定义和关键字相同名字的标识符
关键字 | 描述 |
and | 逻辑运算符 |
as | 创建别名 |
assert | 用于调试 |
break | 跳出循环 |
class | 定义类 |
continue | 继续循环的下一个迭代 |
def | 定义函数 |
del | 删除函数 |
elif | 在条件语句中使用,等同于else if |
else | 用于条件语句 |
except | 处理异常,发生异常时任何执行 |
False | 布尔值,比较运算的结果 |
finally | 处理异常,无论是否存在异常,都将执行一段代码 |
for | 创建for循环 |
from | 导入模块的特定部分 |
global | 声明全局变量 |
if | 写一个条件语句 |
import | 导入模块 |
in | 检查列表、元组等集合中是否存在某个值 |
is | 测试两个变量是否相等 |
lambda | 创建匿名函数 |
None | 表示null值 |
nonlocal | 声明非局部变量 |
not | 逻辑运算符 |
or | 逻辑运算符 |
pass | null语句,一条什么都不做的语句 |
raise | 产生异常 |
return | 退出函数并返回值 |
True | 布尔值,比较运算的结果 |
try | 编写try...except语句 |
while | 创建while循环 |
with | 用于简化异常处理 |
yield | 结束函数,返回生成器 |
4、运算符
4.1 算术运算符和算术运算表达式
运算符 | 说明 | 实例 | 结果 |
+ | 加 | 12.45+15 | 27.45 |
- | 减 | 4.56-0.26 | 4.3 |
* | 乘 | 5*3.6 | 18 |
/ | 除 | 7/2 | 3.5 |
% | 取余,即返回除法的余数 | 7%2 | 1 |
// | 取整除,即返回商的整数部分 | 7//2 | 3 |
** | 幂,即返回x的y次方 | 2**4 | 16,即2^4 |
4.2 关系运算符和关系运算表达式
关系运算符用来比较两个对象之间的关系,对象可以是数或字符串等常量、变量或表达式。
比较运算符 | 说明 |
---|---|
> | 大于,如果> 前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果< 前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果== 两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>= 前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<= 前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!= 两边的值不相等,则返回 True,否则返回 False。 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
4.3 赋值运算符和赋值运算表达式
赋值运算符用来将表达式的结果赋给变量。
运算符 | 说明 | 举例 | 展开形式 |
= | 简单的赋值运算 | x = y | 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 |
4.4 逻辑运算符和逻辑运算表达式
逻辑运算符用来判断逻辑运算对象之间的关系。
逻辑运算符 | 含义 | 基本格式 | 说明 |
---|---|---|---|
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 取反。 |
4.5 位运算符和位运算表达
位运算符用来把两个运算对象按照二进制进行位运算。
位运算符 | 说明 | 使用形式 | 举 例 |
---|---|---|---|
& | 按位与 | a & b | 4 & 5 |
| | 按位或 | a | b | 4 | 5 |
^ | 按位异或 | a ^ b | 4 ^ 5 |
~ | 按位取反 | ~a | ~4 |
<< | 按位左移 | a << b | 4 << 2,表示整数 4 按位左移 2 位 |
>> | 按位右移 | a >> b | 4 >> 2,表示整数 4 按位右移 2 位 |
4.6 成员运算符和成员运算表达式
成员运算符用来判断两个对象之间的关系。
In判断对象是否在序列中
Not判断对象是否不在序列中
返回结果为true或false
4.7 身份运算符和身份运算表达式
身份运算符用来比较两个对象之间的存储单元。
is判断两个标识符是否引用同一对象
is not判断两个标识符是否引用不同对象
返回结果为 true 或 false
4.8 运算符优先级
运算符说明 | Python运算符 | 优先级 | 结合性 | 优先级顺序 |
---|---|---|---|---|
小括号 | ( ) | 19 | 无 | 高 ︿ | | | | | | | | | | | | | | | | | | | | | | 低 |
索引运算符 | x[i] 或 x[i1: i2 [:i3]] | 18 | 左 | |
属性访问 | x.attribute | 17 | 左 | |
乘方 | ** | 16 | 右 | |
按位取反 | ~ | 15 | 右 | |
符号运算符 | +(正号)、-(负号) | 14 | 右 | |
乘除 | *、/、//、% | 13 | 左 | |
加减 | +、- | 12 | 左 | |
位移 | >>、<< | 11 | 左 | |
按位与 | & | 10 | 右 | |
按位异或 | ^ | 9 | 左 | |
按位或 | | | 8 | 左 | |
比较运算符 | ==、!=、>、>=、<、<= | 7 | 左 | |
is 运算符 | is、is not | 6 | 左 | |
in 运算符 | in、not in | 5 | 左 | |
逻辑非 | not | 4 | 右 | |
逻辑与 | and | 3 | 左 | |
逻辑或 | or | 2 | 左 | |
逗号运算符 | exp1, exp2 | 1 | 左 |
4.9 三目运算符(三元运算符)
假设现在有两个数字,我们需要获得其中较大的一个,那么可以使用if else语句,例如:
if a>b:
max = a;
else:
max = b;
但是python提供了一种更加简洁的写法
max = a if a>b else b
使用 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") )
可能的运行结果:
该程序是一个嵌套的三目运算符。程序先对 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支持++i 、--i 运算符,但含义和其他语言中的不同。
- python不支持i++、i--运算符。
5、输出语句
print() 函数使用以%
开头的转换说明符对各种类型的数据进行格式化输出。
格式符号 | 转换 |
---|---|
%% | 输出 % 号 |
%s | 字符串 |
%d | 有符号十进制整数 |
%f | 浮点数 |
%c | 字符 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写字母0x) |
%X | 十六进制整数(大写字母0X) |
%e | 科学计数法(小写'e') |
%E | 科学计数法(大写“E”) |
%g | %f和%e 的简写 |
%G | %f和%E的简写 |
#什么是格式化?
age = 10
print("我今年%d岁" % age)
age += 1
print("我今年%d岁" % age)
age += 1
print("我今年%d岁" % age)
在程序中,看到了%这样的操作符,这就是Python中格式化输出结果
5.1 指定对齐方式
标志 | 说明 |
---|---|
- | 指定左对齐 |
+ | 表示输出的数字总要带着符号;正数带+ ,负数带- 。 |
0 | 表示宽度不足时补充 0,而不是补充空格。 |
5.2 指定小数精度
对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即指定小数的输出精度。
精度值需要放在最小宽度之后,中间用点号.
隔开;也可以不写最小宽度,只写精度。具体格式如下:
%m.nf
%.nf
m 表示最小宽度,n 表示输出精度,.
是必须存在的。
5.3 python2与python3里的区别
在python3里,print只能使用函数的方式来调用,而在python2里,print可以当做一个命令来使用。
print("hello world") # 在python2和python3里都可以使用
print "hello world" # 这种写法只能在python2里使用,python3不再支持这种写法
6、输入语句
- 所谓输入,就是用代码获取用户通过键盘输入的信息
- 例如:取银行取钱,在ATM上输入密码
- 在python中,如果要获取用户在键盘上的输入信息,需要使用到input函数
6.1 关于函数
一个提取准备好的功能(别人或者自己写的代码),可以直接使用,而不用关心内部的细节
函数 | 说明 |
print(x) | 将x输出到控制台 |
type(x) | 查看x的变量类型 |
6.2 input函数实现键盘输入
- 在python中可以使用input函数从键盘等待用户的输入
- 用户输入的任何内容python都认为是一个字符串
字符串变量 = input("提示信息:")