Python_02_基础语法


目录:

语法

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("循环结束")

函数

函数:把具有独立功能的代码块组织成一个模块,在需要的时候调用

函数的参数:增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据

  1. 在函数内部,把参数当做变量使用,进行需要的数据处理;
  2. 函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过参数传递;

形参释义:定义函数时,小括号中的参数,是用来接收参数,在函数内部作为变量使用;

实参释义:调用函数时,小括号中的参数,是用来将数据传递到函数内部用的。

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

模块

  1. 模块是python程序架构的核心概念
  2. 模块类似于工具包,要想使用该工具包中的工具,就需要导入import这个模块;
  3. 每一个以.py扩展名结尾的Python源代码文件都是一个模块;
  4. 在模块中定义的全局变量、函数都是模块能够提供给外界直接使用的工具;
  5. 使用import导入工具包执行过一次代码后,该工具包会会加载到缓存目录(pycache);

Pyc文件

  1. 浏览程序目录会发现一个_pycache_的目录;
  2. 该目录下会有一个xx.cpython-35.pyc的文件,cpython表示python解释器的版本;
  3. 这个pyc文件是由 python解释器将模块的源码转换为字节码, pyhton这样保存字节码可以加快启动速度;

列表

  1. 是python中使用最频繁的数据类型,在其他语言中通常被叫做数组;
  2. 专门用于存储一串信息
  3. 列表用[]定义,数据之间用,分隔;
  4. 列表的索引从0开始;

尽量python中的列表可以存储不同类型的数据,但是在日常开发中更多的应用场景是

  1. 列表存储相同类型的数据
  2. 通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作

image-20221118153349812

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相同;

元组的应用场景主要是

  1. 有关函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据;
  2. 格式字符串。格式化字符串后面的()本质上就是一个元组
  3. 保证数据安全,因为元组不可修改,也可定义空元组防止变量被修改;

字典

和列表的区别是:字典通常用于描述一个物体的相关信息。用{}定义。使用键值对存储数据,各字段之间用,分隔

⭐键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"  # 为字典增加一个数据

字符串

⭐对字符串提供了足够多的方法,大致归类于以下类型:

  1. 判断类型(isspace、isalnum、isalpha、isdecimal、isdigit、isnumeric、islower、isupper)
  2. isspace判断是否只包含空白字符(空格、回车、制表符),是返回Ture。
  3. 查找和替换(startswith、endwith、find、rfind、index、rindex、replace)
    1. start/end with判断开头或结尾是否包含指定字符;
    2. find用来查找字符串中是否包含指定字符,然后输出索引值,与index的区别在于不会报错只返回-1;
    3. replace可以用于替换字符串中的字符,与update的区别在于会返回一个新的字符串,而不会修改原有字符串;
  4. 大小写转换(capitalize、title、lower、upper、swapase)
  5. 文本对齐(ljust、width、center)
    1. center是常用的,用于中间对齐。如果是中文字符,则可以使用中文字符中的空格进行对齐;
  6. 去除空白字符(lstrip、rstrip、strip)

    1. 从网络拉取到文本可能包含各种空白字符,可以先去除空白字符后再进行文本对齐;
          poem = ["\t\n登黄鹤楼",
              "王之涣",
              "白日依山尽\t\n",
              "黄河入海流",
              "欲穷千里目",
              "更上一层楼"]
          for str in poem:
          print(str.strip().center(10))
      
  7. 拆分和连接(partition、rparttion、split、spliylines、join)

    1. splti(str="",num)以str为分隔符拆分string,如果num有值,则仅分隔num+1个子字符串,str默认包含\r \t \n等;
    2. join(seq)以string为分隔符,
          num = "0123456789"
          print(num[-1::-1])  # 各参数分别表示开头、结尾及步长,-1代表结尾或者逆序
      

公共方法

在pyhton中,所有非数字型变量都支持以下特点:

  1. 都是一个序列,可以理解为容器;
  2. 取值;
  3. 遍历(For in);
  4. 计算长度、最大/最小值、比较、删除;
  5. 切片;

内置函数

  1. len,计算容器中元素个数;len(a) # 计算变量a的元素个数
  2. del,删除变量,有两种方式进行删除;
    1. del a[1] # 删除变量a中的第二个值;
    2. del(a[1]) # 删除变量a中的第二个值,推荐使用该方法,与其他函数语法一致;
  3. 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在对字典操作时,判断的是字典的键;

innot 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作为一个字符串进行插入