Python基础04

15 阅读9分钟

一、字符串处理

    ageTable = '''
        诸葛亮, 28
        刘备, 48
        刘琦, 25
        赵云, 32
        张飞, 43
        关羽, 45
    '''

字符串需要进行一行一行的处理,则首先就要进行切片操作,切片完成是一个列表 根据换行符 \n 进行切片操作

切片完成时,数据放在列表中,对于空元素,则不处理,只处理有内容的

#定义两个列表,用来保存年龄大于30岁的人的名字和小于30岁的人的名字
g30 = []
h30 = []

#切片
list1 = ageTable.split("\n")

#遍历列表一个值一个值的处理
for name_age in list1:
    # 判断,如果这次循环取出的内容为空,则直接跳过不处理
    new_nameage = name_age.replace(" ","")
    if new_nameage == "":
        continue
    else:
        # 不为空的时候 取出的值是一个字符串 '诸葛亮, 28', 再次根据 逗号 切片
        name, age = new_nameage.split(",")
        # 判断人的年龄的时候,切片后的数据类型都是字符串,要进行强制类型转换
        if int(age) >= 30:
            # 将年龄大于等于30岁的人名字添加到g30这个列表中
            g30.append(name)
        else:
            h30.append(name)
print("年龄大于等于30岁的人有:", g30)
print("年龄小于30岁的人有:", h30)
var1 = [33, ('我的名字', 'Augus'), 'hello world!']
# 方式一:
var1[1] = ('我的名字', '酒剑仙')
print(var1)
str1 = '''
熊宁
杰益
王伟伟
青芳
玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''
str2 = '''
焦候涛 
熊宁 
玉琴 
骆龙 
韩旭 
杨高旺
杰益  
莫福  
伟伟
李福  
'''
# 先进行切片操作
str1_list = str1.split("\n")
# 用来保存去掉空元素个空格后的数据
new_str1_list = []
# 循环处理列表中的每一个元素
for s1 in str1_list:
    new_s1 = s1.replace(" ", "")
    # 如果为空元素,则跳过
    if new_s1 == "":
        continue
    else:
        # 去掉空格不为空的内容,添加到新列表中
        new_str1_list.append(new_s1)
# 定义一个新列表保存值
new_str2_list = []
# 根据换行符 \n 切片
str2_list = str2.split("\n")
# 循环处理列表中的每一个元素,空元素之间跳过,非空的添加到新列表中
for s2 in str2_list:
    new_s2 = s2.replace(" ", "")
    # 判断是否为空
    if new_s2 == "":
        continue
    else:
        # 非空了,则添加到列表中
        new_str2_list.append(new_s2)
# 通过集合的方式,求差集
a = set(new_str1_list) - set(new_str2_list)
print(f"str1中存在,str2中不存在的人为:{a}")
b = set(new_str2_list) - set(new_str1_list)
print(f"str2中存在,str1中不存在的人为:{b}")
str1 = '''
熊宁
杰益
王伟伟
青芳
玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''
str2 = '''
焦候涛 
熊宁 
玉琴 
骆龙 
韩旭 
杨高旺
杰益  
莫福  
伟伟
李福  
'''
# 先进行切片操作
str1_list = str1.split("\n")
# 用来保存去掉空元素个空格后的数据
new_str1_list = []
# 循环处理列表中的每一个元素
for s1 in str1_list:
    new_s1 = s1.replace(" ", "")
    # 如果为空元素,则跳过
    if new_s1 == "":
        continue
    else:
        # 去掉空格不为空的内容,添加到新列表中
        new_str1_list.append(new_s1)
# 定义一个新列表保存值
new_str2_list = []
# 根据换行符 \n 切片
str2_list = str2.split("\n")
# 循环处理列表中的每一个元素,空元素之间跳过,非空的添加到新列表中
for s2 in str2_list:
    new_s2 = s2.replace(" ", "")
    # 判断是否为空
    if new_s2 == "":
        continue
    else:
        # 非空了,则添加到列表中
        new_str2_list.append(new_s2)
print(new_str1_list)
print(new_str2_list)
# str1中有的str2中不存在的
s1_list = []
# 找出str1中存在,str2中不存在的人名
for i in new_str1_list:
    # 判断每次取出的人名是str1独有\
    # in 就是在的意思
    if i in new_str2_list:
        continue
    else:
        # 如果不在str2中,则将其保存到列表中
        s1_list.append(i)
# str2中存在,str1中不存在
s2_list = []
for i in new_str2_list:
    if i in new_str1_list:
        continue
    else:
        s2_list.append(i)
print(f"str1中存在str2中不存在的人:{s1_list}")
print(f"str2中存在str1中不存在的人:{s2_list}")

二、嵌套for循环

boys = ['Mike', 'Jack', 'Tom']
girls = ['Lisa', 'Linda', 'Mary']
# 从外层循环取一个值,和内层循环中的每一个值组合一次,外层循环在换第二个值和内层循环组合
# 嵌套for循环,(双层for循环)
for boy in boys:
    for girl in girls:
        print(f"{boy}**********************{girl}")

三、函数

引入案例:

ATM
1.插卡 ()
2.输入密码 ()
3.选择取款,输入金额 ()
4.取钱
5.退卡

张三:

1.插卡  张三的卡
2.输入密码 张三的密码
3.选择取款,输入金额 金额也不一样
4.取钱 
5.退卡

李四:

1.插卡  李四的卡
2.输入密码 李四的密码
3.选择取款,输入金额 金额也不一样
4.取钱 
5.退卡

以上功能

取款功能:---函数的名字
    1.插卡  李四的卡
    2.输入密码 李四的密码
    3.选择取款,输入金额 金额也不一样
    4.取钱 
    5.退卡
取款功能:---函数的名字
以上1-5步骤就是实现函数功能的代码
卡号、密码、取款金额 可以看成是函数的参数
取出的钱 这个就是函数的返回值

1.函数的定义

语法:

函数名的命名规则和变量;类似

其次函数的形参,可以定义也不定义,根据实际需求

def 函数名(形参):
    函数体(实现函数功能的代码)
# 函数的定义
# 函数要先定义在调用
# 函数体中代码是缩进显示的,缩进也是建议的四个空格
# 函数可以减少代码的冗余(重复)
# 一个函数可以多次调用
# 定义了一个函数
def add():
    c = 3 * 4
    print(f"c的值为:{c}")
# 函数调用
add()
add()

2.函数的调用

函数调用的时候其实 函数名()
def add(a, b):
    s = a + b
    print(f"a的值为:{a}")
    print(f"b的值为:{b}")
    print(f"s的值为:{s}")
# 关键字参数:可以指定传递给那个形参
# add(b=4, a=5)
# add(6, b=4)s
# 一旦指定了形参=值的形式,后续格式必须保持一致
# add(b=4, 8)

3.函数的参数

  • 必填参数

    # 必填参数在函数调用的时候必须传入值
    def add(a, b):
        c = a * b
        print(f"c的值为:{c}")
    # 函数调用
    add(5, 3)
    
  • 默认值参数

    # 默认值参数
    # 默认值参数,在不给他传入值的时候就使用默认值,传入的时候就时候新传入的值
    # 默认值参数必须定义在必填参数的后面
    def add(a, b, c=2):
        s = a + b + c
        print(f"a的值为:{a}")
        print(f"b的值为:{b}")
        print(f"c的值为:{c}")
        print(f"s的值为:{s}")
    add(3, 6, 9)
    
  • 可变参数

    
    # 可变参数:为了解决传入的参数个数不确定的情况,采用可变参数,可以接受任意个数的参数
    
    # 要按照这个顺序定义 必填参数、默认值参数、可变参数
    
    # 可变参数在定义的时候,形参名字前面带一个星号
    
    # 可变参数将传入的多个值,组合成了一个元组,这个现象称之为 组包
    
    # 给 形参带星号 在函数体中即可将组包后的元组拆开,这个称之为解包
    
    # 可变参数如果不给传入值,则是一个空元组
    
    # 可变参数也称之为不定长参数
    
    def add(a, b, c=2, *args):
    	s = a + b + c
        print(f"a的值为:{a}")
        print(f"b的值为:{b}")
        print(f"c的值为:{c}")
        print(f"args的值为:{args}")
        # 解包
        print(*args)
        print(f"s的值为:{s}")
     
    add(3, 6, 9, “张三”, 34, 23, “tom”)
    

- 关键字可变参数
  ```python
  # 关键字可变参数
  # 关键字可变参数,接受传入的是一个键值对
  # 可变参数定义的时候,形参名前面加**
  # 同时形参定义的顺序是:必填参数、默认值参数、可变参数、关键字可变参数
  # 关键字可变参数将接受的键值对组合了一个字典
  # 关键字可变参数接受的是一个键值对, name="李四"  name不能加引号
  # 如果传入的是一个字典, 字典名字加 **dict
  def add(a, b, c=2, *args, **kwargs):
      s = a + b + c
      print(f"a的值为:{a}")
      print(f"b的值为:{b}")
      print(f"c的值为:{c}")
      print(f"args的值为:{args}")
      print(f"kwargs的值为{kwargs}")
      print(f"s的值为:{s}")
  dict1 = {'name':"张三", 'age':23}
  add(3, 6, 9,  "张三", 34, 23, "tom", **dict1)

4.函数的返回值

# 函数的返回值:函数返回值是函数体中代码执行完成的结果,
# 使用return来指定返回值
# python中的返回值可以是任意类型的数据
# python中可以同时拥有多个返回值,多个值直接使用逗号隔开,返回的多个值组合成了元组
def add(a, b):
    s = a + b
    return s,"没有表演节目的同学注意笔记",["系统测试基本笔记","MySQL笔记","Linux笔记","app测试笔记"]
# 执行输出函数的函数名,显示的是该函数在内存中的地址<function add at 0x000001967C6D61F8>
# print(add)
# 用p来接收函数的返回值 如果没有执行返回值则显示 None
p = add(4,5)
print(f"p的值为:{p}")

5.在函数中定义函数

def foo():
    print("in foo")
    # 定义了bar函数
    def bar():
        print("in bar")
    bar()
foo()

6.在函数体中调用函数

def f3():
    print("***********f3开始********")
    print("不表演节目将是你最后悔的选择!!!因为太多了")
    print("***********f3结束********")
def f2():
    print("***********f2开始********")
    f3()
    print("***********f2结束********")
def f1():
    print("***********f1开始********")
    f2()
    print("***********f1结束********")
f1()

7.全局变量和局部变量

# 局部变量和全局变量
# 局部变量:是定义在函数体内部的变量,作用域仅限于该函数中
# 全局变量:定义在函数体外部,既在函数体内部有效,也在函数体外部有效
#
# 全局变量
x = 10
def foo():
    # 局部变量
    x = 90
    print(f"函数体内部的x的值为:{x}")
foo()
print(f"函数体外部的x的值为:{x}")
x = 10
def foo():
    print(f"函数体内部的x的值为:{x}")
foo()
print(f"函数体外部的x的值为:{x}")
def foo():
    # 虽然定义的时候局部变量,但是可以将局部变量申明为全局变量
    global x
    x = 90
    print(f"函数体内部的x的值为:{x}")
foo()
print(f"函数体外部的x的值为:{x}")

备注:资料来着“蜗牛学院”的笔记