语法基础
变量声明
变量声明的三种格式:
- var_name = var_value
- var1 = var2 = var3 = var_value
- var1, var2, var3 = v1, v2, v3
# 格式1
s1 = "Hello world!"
# 格式2
s2 = s3 = "Hello python!"
# 格式3
s4, s5, s6 = "Hello ereryone!", "Hello tensorflow!", 123
变量类型
-
严格意义上讲,Python只有1个变量类型
-
标准数据类型有6种:
-
数字 Number
-
字符串 str
-
列表 list
-
元组 tuple
-
字典 dictionary
-
集合 set
-
数字 Number
Python中的数字没有大小限制,常见的数字分类:
-
整数
-
没有小数部分
-
包含正数,负数,0
-
二进制
-
以0b开头的01串
-
例如:
- 0b110
- 0b11110
-
-
八进制
-
以0o开头的 0到7之间的数字串
-
例如:
- 0o71
-
-
十六进制
- 以0x开头的 由0-9,a-f构成的串
- 例如:
- 0xffff
- 0x53f2
-
# 二进制定义
a1 = 0b110 # 10进制的6
print(a1)
a2 = 0b11110 # 十进制的30
print(a2)
# 八进制定义
a3 = 0o71 # 十进制的57
print(a3)
# 十六进制定义
a4 = 0xffff # 十进制的65535
print(a4)
a5 = 0x53f2 # 十进制的21490
print(a5)
-
浮点数
-
就是通俗意义上的小数量
-
常见格式:
-
3.1415926
-
-
0.4
-
.4
-
-
# 浮点数
a = .2
print(a)
- 科学计数法
- 定义跟数学定义一致
- 写法是e后面跟整数用来表示10的整数
# 科学计数法
high = 184
print(high)
high = 1.84e2
print(high)
- 复数 complex
- 与数学定义一致
- 复数的虚部用j/J表示
- 例如:
- 5+4j
- 4j
- (4j)
# 复数 complex
a = 4j
print(a)
- 布尔值
- 布尔值就是用来表示真假的值
- 只有两个值:True / False
- 在Python中,布尔值可以当数字使用
- 布尔值当数字使用时,True = 1,False = 0
- 如果数字用来当做布尔值使用,0 = False,其余当做True
# 布尔值当做数字使用
age = 18 + True
print(age)
age = 18 + False
print(age)
a = -1
if a:
print("负数是True")
else:
print("负数是False")
字符串
-
string
- 表示文字信息
- 用单引号,双引号,三引号括起来
s1 = 'Hello world!' print(s1) s2 = "Hello python!" print(s2) s3 = """ 人生苦短 我用python """ print(s3)
-
转义字符
- 用一种特殊的方法表示出一系列不方便写出的内容,比如回车键,换行符,退格键
- 借助反斜杠字符,反斜杠后面一个或者几个字符不再是原来的意思,而是进行了转义
- 在字符串中,一旦出现反斜杠要倍加小心,可能会有转义字符出现
- 不同操作系统对换行操作有不同的表示
- Windows:\n
- Linux:\r\n
常见转义字符
转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横向制表符 \r 回车 \f 换页 \oyy 八进制数,yy代表的字符,例如:\o12代表换行 \xyy 十六进制数,yy代表的字符,例如:\x0a代表换行 \other 其它的字符以普通格式输出 # 转义字符的案例 # 想表达Let's Go # 使用转义字符 s1 = 'Let\'s Go' print(s1) # 使用单双引号嵌套 s2 = "Let's Go" print(s2)
# \\ 表示斜杠,比如C:\User\Augsnano s1 = "C:\\User\\Augsnano" print(s3) # \n 表示回车换行 s2 = "Ich\nlieb\nWangxiaojing" print(s4) # \ 表示此行未结束,处于美观,需要下一行继续 s3 = "Hello \ world!" print(s3)
-
格式化
- 把字符串按照一定格式进行打印或者填充
- 格式化的分类
- 传统格式化:使用百分号(占位符),一般只能被同类型替换,或替换类型能被转换成占位符的类型
- format
# %s 表示简单的字符串 s = "Hello %s" print(s % "world!") print(s % "python!") print("Hello %s" % "world!") # %d 表示十进制整数 s = "田梓莯今年%d岁了" print(s % 3)
-
内建函数
# 字符串
hello = "Hello world!"
print(hello)
hello1 = 'Hello world!'
print(hello1)
# 三引号可以表示多行
hello2 = """
Hello world!
Hello python!
Hello deeplearning!
"""
print(hello2)
# 以下案例说明单双引号只能引用一行
#hello3 = "
#Hello world!
#Hello python!
#Hello deeplearning!
#"
#print(hello3)
None类型
- 表示没有,通常用来占位
- 比如返回,用来表示返回一个空
表达式
- 由一个或者几个数字或者变量或者运算符合成的一行代码
- 通常返回一个结果
# 表达式
a = 1 + 2
运算符
-
由一个以上的值经过一系列的运算得到新值的过程就叫运算
-
用来操作运算的符号叫运算符
算数运算符
- 用来进行算数运算的符号
- 通常用来表示加减乘除
- Python没有自增自减运算符
# 算术运算符
# 加减乘除跟数学意义基本一致
a = 9 - 2
print(a)
b = 9 + 2
print(b)
c = 8 * 2
print(c)
# python除法分为普通除法,地板除,取余
# 正常除法
a = 9 / 2 # 此操作符在python2.x 和 3.x中有些不同
print(a)
# 地板除,取整
a = 9 // 2
print(a)
# 取余
a = 9 % 2
print(a)
a = 9 % -4 # 参考https://blog.youkuaiyun.com/u013094181/article/details/21863491
print(a)
# 两个*表示指数
a = 7 ** 2
print(a)
比较/关系运算符
- 对两个内容进行比较的运算符
- 结果一定是布尔值,即True / False
# 等于 ==
a = 3 == 4
print(a)
# 不等于 !=
a = 3 != 4
print(a)
# >, <, <=, >=
print(3 >= 8)
print("Hello world!" > "Hello python!")
赋值运算符
- 把一个值放到变量里边去
# 赋值符号 =
a = 9
# 复杂赋值
a = b = 9
a, b = 1, 2
# 赋值的缩写
c = 0
c = c + 3
print(c)
c += 3 # 仅仅是缩写
print(c)
# 所有数学运算符都可以缩写
# -=, *=, /=, //=, %=, **=, 都是缩写形式
# python里面没有 ++, --
逻辑运算符
- 对布尔类型变量或者值进行运算的符号
- and:逻辑与
- or:逻辑或
- not:逻辑非
python里面的逻辑运算没有异或
运算规则:
- and看做乘法,or看做假加法
- True看做1,False看做0
- 则逻辑运算就能转换成整数数学运算
- 最后结果如果是0则为Flase,否则为True
逻辑运算的短路问题
- 逻辑运算式,按照运算顺序计算,一旦能够确定整个式子未来的值,则不再进行计算,直接返回
# 逻辑表达举例
a = True
b = True
c = False
aa = a and b # 右边表达式可以转换成 1*1
print(aa)
bb = a and c
print(bb)
cc = 100 and c
print(cc)
# 数字转换成布尔值的时候:0 = False,其余是True
# 布尔值转换成数字的时候:Ture = 1,否则为0
# 短路问题
a = True
b = True
c = False
def a():
print('a')
return True
def b():
print('b')
return True
if a() and b():
print('AAAAA')
print('*' * 20) # 字符串乘以数字,表示的是这个字符串重复多少遍
if a() or b(): # 短路发生
print('BBBBB')
- 位运算
成员运算符
- 用来检测一个值或者变量是否在某个集合里面
- in:成员运算符,表示在里边
- not in:不再里边的意思
# in
L = [1, 2, 3, 4, 5]
a = 6
aa = a in L
print(aa) # False
# not in
aa = a not in L
print(aa) # True
身份运算符
- 用来确定两个变量是否是同一变量
- is:是
- is not:不是
对整数[-5, 256],解释器对他们做了单独的处理,放进了固定的内存中,不因每次运行而变化
# 身份运算符
a = 1
b = 100000
aa = a is b
print(aa) # False
# a, b仅仅值是一样的,并不代表a, b是一个变量
a = 100000
b = 100000
aa = a is b
print(aa) # False
# 下面的案例跟上面的案例的不同
a = 5
b = 5
aa = a is b
print(aa) # True
运算符优先级
运算符说明 | 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 | 左 |
程序结构
- 程序三种结构
- 顺序
- 循环
- 分支
循环结构
- 重复执行某一个固定的动作或者任务
- 分类:
- for
- while
for循环
-
语法:
for 变量 in 序列:
语句1
语句2
…
for 变量 in 序列:
语句块1
else:
语句块2
# for语句
# 打印学生列表姓名
# 如果是王晓静,那肯定是我的最爱呀
# 如果是别的学生,那要冷酷的拒绝他
stu_list = ['王大眼', '李美丽', '王晓静']
for stu in stu_list:
if stu == "王晓静":
print("晓静你去哪里了?")
else:
print("对不起同学,饶了老衲吧")
# for-else语句
# for循环结束的时候,有时候需要执行一些收尾工作,此时需要使用else语句
# else语句是可选的,一般有跳出循环时才有可能用到else
# 打印列表中的同学
# 如果没有在列表内,或者列表结束了,需要打印提示语句,表示不再爱了
stu_list = ['王大眼', '李美丽', '王晓静']
for stu in stu_list:
if stu == "王晓静":
print("晓静你去哪里了?")
break
else:
print("对不起同学,饶了老衲吧")
else:
print("不会再爱了")
while循环
-
一个循环语句
-
表示当条件成立的时候,就循环
-
适应于不知道具体循环次数,但能确定在某个条件成立的情况下就循环
-
while语法:
while 条件表达式:
语句块
while 条件表达式:
语句块1
else:
语句块2
# 如果说年利率是6.7%,本利是每年翻滚,则多少年后本钱会翻倍
end_money = first_money = 10000
year = 0 # 存放需要翻本的年数
while end_money < first_money * 2:
end_money = end_money * (1 + 0.067)
year += 1 # year = year + 1
print(year) # year = 11
# 年利率案例2
# 一般有跳出循环时才有可能用到else1
while end_money < first_money * 2: # end_money > 2*first_money
end_money = end_money * (1 + 0.067)
year += 1 # year = year + 1
else:
print(year)
break,continue,pass
- break:无条件结束整个循环,简称循环猝死
- continue:继续
- pass:只是占位符号,代表这句话啥也不干,没有跳过功能
# 确定一个数字队列中是否包含数字7
# 确定是否包含,只要找到一个即可确定,不需要再继续往下找,所以使用break
dig_list = [3, 4, 6, 7, 54, 3, 23, 2, 4, 7]
for dig in dig_list:
if dig == 7:
print("哈哈哈,找到了")
break
else:
print(dig)
# continue练习
# 在数字1-10中,寻找所有偶数,找到偶数后打印偶数
"""
# continue案例1
dig_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for dig in dig_list:
if dig % 2 == 0:
print(dig)
print("哈哈,你是双的")
else:
continue
"""
# 下面代码跟上面等价
dig_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for dig in dig_list:
if dig % 2 == 1:
continue
print(dig)
print("哈哈,你是双的")
# pass案例1
age = 19
if age > 19:
pass
else:
print("你还小")
# pass案例2
ages = [2, 23, 43, 54, 65, 2]
for age in ages:
pass
print(age)
range函数
- 生成有序数列
- 生成数字队列可以定制
一般在python中,表示范围的数字都是左闭右开,randint函数是个特例
range函数在python2.x和python3.x中有严重区别
# range案例1
# 生成数字队列可以定制
# range的生成序列的范围是左闭右开
dig_list = range(1, 100, 2)
for dig in dig_list:
print(dig)
# range案例2
# 打印从1到9的数字
for i in range(1, 10):
print(i)
分支结构
单向分支
-
语法结构:
if 条件表达式:
语句1
语句2
语句3
…
-
条件表达式就是计算结果必须为布尔值的表达式
-
表达式后面的冒号不能少
-
注意if后面的出现的语句,如果属于if语句块,则必须同一个缩进等级
# if 语句联系
# 如果你们都买我的习题课,我就发财了
a = "都买习题课"
# 字符串的真假:
# 只有空字符串为False,其余全为True
if a:
print("刘大拿就发财了")
print("迎娶王晓静")
print("日子还得过呀!")
# if联系二
age = 19
if age > 16:
print("喝酒去")
print("下次你请我")
双向分支
-
if … else …表达
-
语法结构:
if 条件表达式:
语句块1
else:
语句块2
# 如果你们都买我的习题课,我就发财了
a = "都买习题课"
if a:
print("刘大拿就发财了")
print("迎娶王晓静")
else:
print("继续吃土吧")
print("跟五姑娘继续耗下去吧")
print("日子还得过呀!")
# input的作用是
# 1. 在屏幕上输出括号内的字符串
# 2. 接受用户输入的内容并返回到程序
# 3. input返回的内容一定是字符串类型
# input负责接受用户输入并把内容返回给变量
gender = input("请输入您的性别")
print(gender)
if gender == "man":
print("走,喝酒吸烟剃头")
print("一起玩儿去呀")
else:
print("你到底是个啥子呀")
print("对不起,我是男生")
多路分支
-
很多分支的情况,叫多路分支
if 条件表达式:
语句块1
elif:
语句块2
else:
语句块3
-
elif可以有好多个,根据实际情况
-
else可选
-
多路分支最多只会执行一种情况
if语句补充
- if语句可以嵌套使用,但是不推荐
- python中没有switch语句
"""
例题:考试成绩判断
成绩由用户输入
90以上:输出优秀
80-90:良
70-80:中
60-70:平
60以下:输出:我没你这撇学僧
"""
# 输入成绩,需要用到input函数
x = input("输入一个分数:")
score = int(x)
if score > 90:
print("优秀")
elif score > 80:
print("良")
elif score > 70:
print("中")
elif score > 60:
print("平")
else:
print("我没你这撇学僧")
函数
- 函数是代码的一种组织形式
- 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作
- 有些语言分函数和过程两个概念,有返回结果的叫函数,无返回结果的叫过程,python不加以区分
函数的定义和使用
- 函数的使用:
- 函数使用需要先定义
- 使用函数,俗称调用
# 定义一个函数
# 只是定义的话不会执行
# 1. def关键字,后跟一个空格
# 2. 函数名,自己定义,起名需要遵循便令命名规则,约定俗成,大驼峰命名只给类用
# 3. 后面括号和冒号不能省,括号内可以由参数
# 4. 函数内所有代码缩进
def func():
print("这是一个函数")
print("爱生活,爱python")
print("函数结束了")
# 函数的调用
# 直接写出函数名字,后面小括号不能省略,括号内内容根据情况
def func():
print("这是一个函数")
print("爱生活,爱python")
func()
print("函数结束了")
函数的参数和返回值
- 参数:负责给函数传递一些必要的数据或者信息
- 形参(形式参数):在函数定义时用到的参数,没有具体值,只是一个占位符号
- 实参(实际参数):在调用函数时输入的值
# 参数person只是一个符号
# 调用时用另一个
def hello(person):
print("{0},你好吗?".format(person))
print("{},你看见我家晓静了吗?".format(person))
p = "小明"
hello(p)
- 返回值:调用函数时的一个执行结果
- 使用return返回结果
- 如果没有值需要返回,推荐使用return None表示函数结束
- 函数一旦执行return,则函数立即结束
- 如果函数没有return关键字,则默认返回None
# 九九乘法表
# version 1.0
for i in range(1, 10):
for j in range(1, i+1):
print("%4d"%(i*j), end = "")
print()
# 使用函数打印乘法表
def mul_table():
for i in range(1, 10):
for j in range(1, i+1):
print("%4d"%(i*j), end = "")
print()
mul_table()
# 改造函数
def printLine(line_num):
'''
打印一行九九乘法表
line_num:代表行号
'''
for j in range(1, line_num+1):
print("%4d"%(line_num*j), end="")
print()
def mulTable():
for i in range(1, 10):
printLine(i)
return None
mulTable()
参数详解
- 参数分类:
- 普通参数/位置参数
- 默认参数
- 关键字参数
- 收集参数
# 普通参数案例
def normal_para(one, two, three):
print(one + two)
return None
normal_para(1, 2, 3)
# 默认参数
def default_para(one, two, three=100): # three是默认参数,默认值是100
print(one + two)
print(three)
return None
default_para(1, 2)
default_para(1, 2, 3)
# 关键字参数
def keys_para(one, two, three):
print(one + two)
print(three)
return None
keys_para(one=1, three=3, two=2)
字符串
- string
- 转义字符
- 格式化
- 内建函数
string
- 表示文字信息
- 用单引号,双引号,三引号括起来