语法
if分支
# 本python脚本实现的是石头剪刀布小游戏,用户出拳,电脑也随机出拳,然后进行比对输出结果
import random
# 用户输入要出的拳头-
user_input = str(input("请输入你要出的拳头,输入数字即可(1)石头;(2)布;(3)剪刀:"))
# 电脑随机出拳
computer_input = str(random.randint(1, 3))
# 赋值if user_input == '1':
user = '石头'
elif user_input == '2':
user = '布'
else:
user = '剪刀'
if computer_input == '1':
computer = '石头'
elif computer_input == '2':
computer = '布'
else:
computer = '剪刀'
# 比对
if ((user == '石头' and computer == '剪刀')
or (user == '剪刀' and computer == '布')
or (user == '布' and computer == '石头')):
print("")
print("你赢了,你出的是%s,电脑出的是%s" % (user, computer))
elif user == computer:
print("")
print("你们平局,你出的是%s,电脑出的是%s" % (user, computer))
else:
print("")
print("你输了,你出的是%s,电脑出的是%s" % (user, computer))
while循环
# 本python脚本实现的第n行输出n个*,后升级为99乘法表,使用while嵌套实现,且跳过了python自带的换行
row = 1
while row <= 12:
col = 1
while col <= row:
print("%d\t*\t%d\t=\t%d"% (row, col, row * col),end="\t ")
col += 1
print("")
row += 1
break
当某一条件满足时,用于跳出最近的for或者while循环,不执行后续代码。
continue
当某一条件满足时,跳过该次代码的执行。
break和continue只对当前所在循环有效。
for循环遍历
for
循环只能遍历非数字型类型的变量,例如列表、元组、字典及字符串;
for else
应用场景如下:
- 在迭代遍历嵌套的数据类型时,例如一个列表包含了多个字典。
- 需求:要判断某个字典中是否存在指定的值
- 如果存在,提示并且退出循环
- 如果不存在,在循环整体退出后,希望得到一个统一的提示
name_list = ['daihaorui', 'daihaoxuan', 'wangkaiyi', 'daixiaobo']
name = "wangkaiyi"
for my_name in name_list: # for <变量> in <集合>
print("My name is %s" % my_name) # 循环体代码
if my_name == name:
break
else: # 若没有通过break跳出循环,则循环结束后会指定该代码
print("找不到%s这个名字" % name)
print("循环结束")
函数
函数:把具有独立功能的代码块组织成一个模块,在需要的时候调用;
函数的参数:增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据;
- 在函数内部,把参数当做变量使用,进行需要的数据处理;
- 函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过参数传递;
形参释义:定义函数时,小括号中的参数,是用来接收参数,在函数内部作为变量使用;
实参释义:调用函数时,小括号中的参数,是用来将数据传递到函数内部用的。
ctrl + Q可实现查看函数的注释;
hr_03_test.py # 该文件创建函数,此时该文件已经成为一个库文件。
def hello(): # 定义
"""这是函数的注释,可通过选中调用的函数ctrl + Q查看"""
print("hello")
import hr_03_test # 新文件导入库文件
hr_03_test.hello() # 调用该库文件中的hello()函数,注意文件及函数命令规范遵循标识符
def print_line(num1, num2):
print(num1 * num2)
def print_num(num1, num2, time):
i = 1
while i <= time:
print_line(num1, num2)
i += 1
print_num('-', 10, 5)
return返回值
def measure():
temp1 = 39
temp2 = 50
# 使用元组来实现让函数一次返回多个值。若函数返回的类型是元组,可以省略()
return temp1, temp2
# 若返回类型是元组,同时需单独处理元组中的元组。可以使用多个变量,一次接收函数的返回结果
temp1, temp2 = measure()
print(temp1) # 输出结果为39
------------------
def demo(num):
print("函数内部的代码")
num = 100
num_list = [4, 5, 6]
print(num)
print(num_list)
print("函数执行完成")
num = 99
num_list = [1, 2, 3]
demo(num)
print(num)
print(num_list)
# 输出结果
函数内部的代码
100
[4, 5, 6]
函数执行完成
99
[1, 2, 3]
函数的递归
函数内部调用自己的方法叫递归;
函数内部的代码是相同的,只是针对参数不同,处理的结果也不同;
当参数满足一个条件时,函数不再执行,该方法被称为递归的出口。
函数是用return来退出,where循环使用break来退出。
需求:1、定义函数sum_numbers;2、能够接收一个num的整数参数;3、计算1 + 2 + ...num的结果
def sum_numbers(num):
if num == 1: # 首先定义出口
return 1
temp = sum_numbers(num - 1)
return num + temp
print(sum_numbers(3))
定义函数
def fib2(n): # 我印象中正常的函数都有下面三个步骤
"""Return a list containing the Fibonacci series up to n."""
result = [] # 1. 定义空列表
a, b = 0, 1
while a < n:
result.append(a) # 2. 往列表添加值(相当于result = result + [a])
a, b = b, a+b
return result # 3. 返回列表(不带表达式参数时,返回None)
f100 = fib2(100) # call it
f100 # write the result
模块
- 模块是python程序架构的核心概念
- 模块类似于工具包,要想使用该工具包中的工具,就需要导入import这个模块;
- 每一个以
.py
扩展名结尾的Python源代码文件都是一个模块; - 在模块中定义的全局变量、函数都是模块能够提供给外界直接使用的工具;
- 使用import导入工具包执行过一次代码后,该工具包会会加载到缓存目录(pycache);
Pyc文件
- 浏览程序目录会发现一个
_pycache_
的目录; - 该目录下会有一个
xx.cpython-35.pyc
的文件,cpython表示python解释器的版本; - 这个pyc文件是由 python解释器将模块的源码转换为字节码, pyhton这样保存字节码可以加快启动速度;
列表
- 是python中使用最频繁的数据类型,在其他语言中通常被叫做数组;
- 专门用于存储一串信息;
- 列表用
[]
定义,数据之间用,
分隔; - 列表的索引从
0
开始;
尽量python中的列表可以存储不同类型的数据,但是在日常开发中更多的应用场景是
- 列表存储相同类型的数据
- 通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
⭐name_list = ['daihaorui', 'daihaoxuan', 'wangkaiyi', 'daihaorui']
# 1.取值和取索引
name_list[0] # 取列表中的第一个值
name_list.index('daihaoxuan') # 查看'daihaoxuan'在name_list列表中的值,输出值'1'
# 2.增加
name_list.append('ruirui') # 在列表的最后添加一个数据
name_list.insert(1, 'xixi') # 在列表的指定位置插入数据,例如index取0值,将值插入为第一个
extend_list = ['11', '22', '33']
name_list.extend(extend_list) # 将一个列表扩展至该列表的最后,如果是字典则使用update方法
# 3.修改
name_list[1] = 'wangwu' # 将第二个值'daihaoxuan'修改为'wangwu'
# 4.统计
name_list.count('daihaorui') # 查看'daihaorui'这个volume在列表中出现的次数
len(name_list) # 查看该列表中volume个数
# 5.删除
name_list.pop() # 默认删除最后一个
name_list.pop(1) # 指定删除第一个
name_list.remove('daihaorui') # 删除第一个出现的'daihaorui',在该列表的第一个volume
print(name_list, extend_list)
del extend_list # 删除extend_list列表,
try: # 尝试运行代码,因为该代码错误,extend_list列表已经从内存中被删除
print(name_list, extend_list) # 此时无法输出内容,报错:NameError: name 'extend_list' is not defined
except:
pass # 忽略错误
# 5.排序
name_list.sort(reverse=True) # reverse表示反转,当reverse=True表示降序排序,默认为False
name_list.reverse() # 直接调用reverse方法,在降序排列的基础上反转,得到的结果竟然是升序!
print("这边是升序排列哦,排列后的数组是%s" % name_list)
# 编译输出结果:
['daihaoxuan', 'wangkaiyi', 'daihaorui', 'ruirui', '11', '22'] ['11', '22', '33']
这边是降序排列哦,排列后的数组是['11', '22', 'daihaorui', 'daihaoxuan', 'ruirui', 'wangkaiyi']
元组
Tuple
(元组)与列表类似,不同之处在于元组的元素不能修改。
- 元组表示多个元素组成的序列;
- 元组在python开发中,有特定的应用场景
元组用于存储一串信息,数据之间使用,
的分隔。如果是单个元组也需用,
来结尾,否则Python会认为只是一个字符串;
元组用()
定义,可以定义一个空元组;
元组的索引从0
开始,同list
相同;
元组的应用场景主要是
- 有关函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据;
- 可格式字符串。格式化字符串后面的
()
本质上就是一个元组 - 可保证数据安全,因为元组不可修改,也可定义空元组防止变量被修改;
字典
和列表的区别是:字典通常用于描述一个物体的相关信息。用{}
定义。使用键值对存储数据,各字段之间用,
分隔
⭐键key
是索引、值value
是数据、键和值之间使用:
分隔、键唯一、键只能使用字符串数字或元组类型,值可以取任何数据类型;
xiaoming = {"name": "小明",
"age": 18,
"gender": True}
# 循环遍历
for key_value in xiaoming:
print("%s: %s" % (key_value, xiaoming[key_value]))
xiaoming["height"] = "1,68" # 为字典增加一个数据
字符串
⭐对字符串提供了足够多的方法,大致归类于以下类型:
- 判断类型(isspace、isalnum、isalpha、isdecimal、isdigit、isnumeric、islower、isupper)
- isspace判断是否只包含空白字符(空格、回车、制表符),是返回Ture。
- 查找和替换(startswith、endwith、find、rfind、index、rindex、replace)
- start/end with判断开头或结尾是否包含指定字符;
- find用来查找字符串中是否包含指定字符,然后输出索引值,与index的区别在于不会报错只返回-1;
- replace可以用于替换字符串中的字符,与update的区别在于会返回一个新的字符串,而不会修改原有字符串;
- 大小写转换(capitalize、title、lower、upper、swapase)
- 文本对齐(ljust、width、center)
- center是常用的,用于中间对齐。如果是中文字符,则可以使用中文字符中的空格进行对齐;
-
去除空白字符(lstrip、rstrip、strip)
- 从网络拉取到文本可能包含各种空白字符,可以先去除空白字符后再进行文本对齐;
poem = ["\t\n登黄鹤楼", "王之涣", "白日依山尽\t\n", "黄河入海流", "欲穷千里目", "更上一层楼"] for str in poem: print(str.strip().center(10))
- 从网络拉取到文本可能包含各种空白字符,可以先去除空白字符后再进行文本对齐;
-
拆分和连接(partition、rparttion、split、spliylines、join)
splti(str="",num)
以str为分隔符拆分string,如果num有值,则仅分隔num+1个子字符串,str默认包含\r \t \n等;join(seq)
以string为分隔符,num = "0123456789" print(num[-1::-1]) # 各参数分别表示开头、结尾及步长,-1代表结尾或者逆序
公共方法
在pyhton中,所有非数字型变量都支持以下特点:
- 都是一个序列,可以理解为容器;
- 取值;
- 遍历(For in);
- 计算长度、最大/最小值、比较、删除;
- 切片;
内置函数
- len,计算容器中元素个数;len(a) # 计算变量a的元素个数
- del,删除变量,有两种方式进行删除;
- del a[1] # 删除变量a中的第二个值;
- del(a[1]) # 删除变量a中的第二个值,推荐使用该方法,与其他函数语法一致;
- max/min;max和min函数只对键进行取值,不对值进行取值;
切片
切片使用索引值来限定范围,从父字符串中切除子字符串;
列表和元组都是有序的组合,能够通过索引值获取到对应的数据;字典是无序的集合,是使用键值对保存数据的,无法进行切片;
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3] # 0代表第一个,-1代表倒数第一个
['Michael', 'Sarah', 'Tracy']
运算符
运算符 | Python表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
+ | [1,2]+[3,4] | [1,2,3,4] | 合并 | 字符串、列表、元组 |
* | ["Hi!"] * 4 | ["Hi!","Hi!","Hi!","Hi!"] | 重复 | 字符串、列表、元组 |
in | 3 in (1,2,3) | Ture | 元素是否存在 | 字符串、列表、元组、字典 |
not in | 4 not in (1,2,3) | Ture | 元素是否不存在 | 字符串、列表、元组、字典 |
> >= ==< <= | (1,2,3)<(2,2,3) | Ture | 元素比较 | 字符串、列表、元组 |
in
在对字典操作时,判断的是字典的键;
in
和not in
被称为成员运算符
举例:
list1 = [1, 2]
list2 = [3, 4]
list3 = list1 + list2
print(list3) #输出[1, 2, 3, 4],使用运算符会将list1和list2相加生成一个新变量list3
list1.extend(list2)
print(list1) #输出[1, 2, 3, 4]extend方法会将list2的值赋给list1
list1.append(list2)
print(list1) # 输出[1, 2, 3, 4, [3, 4]],直接将list2作为一个字符串进行插入