欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

5 函数二

程序员文章站 2022-06-06 21:26:31
...

5.1 局部变量

局部变量,就是在函数内部定义的变量

  • 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的

5.2全局变量

  • 在函数外边定义的变量叫做全局变量
  • 如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量
  • 全局变量能够在所有的函数中进行访问
  • 没有global时,当函数内出现局部变量和全局变量相同名字时,函数内部中的 变量名 = 数据 此时理解为定义了一个局部变量,而不是修改全局变量的值
  • 如果在函数中出现global 全局变量的名字 那么这个函数中即使出现和全局变量名相同的变量名 = 数据 也理解为对全局变量进行修改,而不是定义局部变量

5.3多函数程序的基本使用流程

一般在实际开发过程中,一个程序往往由多个函数(后面知识中会讲解类)组成,并且多个函数共享某些数据,这种场景是经常出现的,因此下面来总结下,多个函数*享数据的几种方式

  1. 使用全局变量
  2. 使用函数的返回值、参数
  3. 函数嵌套调用

5.4 函数返回值(二)

  1. if-elif-else和 return
  def create_nums(num):
  print("---1---")
  if num == 100:
      print("---2---")
      return num+1  # 函数中下面的代码不会被执行,因为return除了能够将数据返回之外,还有一个隐藏的功能:结束函数
  else:
      print("---3---")
      return num+2
  print("---4---")

  result1 = create_nums(100)
  print(result1)  # 打印101
  result2 = create_nums(200)
  print(result2)  # 打印202
  1. 一个函数返回多个数据的方式
def divid(a, b):
shang = a//b
yushu = a%b 
return shang, yushu  #默认是元组

result = divid(5, 2)
print(result)  # 输出(2, 1)

return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据
如果return后面有多个数据,那么默认是元组

5.5函数参数(二)

  • 缺省参数

在形参中默认有值的参数,称之为缺省参数
调用函数时,缺省参数的值如果没有传入,则取默认值。
注意:带有默认值的参数一定要位于参数列表的最后面

  • 不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。

基本语法如下:

def functionname([formal_args,] *args, **kwargs):
   """函数_文档字符串"""
   function_suite
   return [expression]

加了星号(*)的变量args会存放所有未命名的变量参数,args为元组
而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.

如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的

5.6 拆包和交换变量的值

  • 拆包
a, b = (1, 2)
print(a)  1
print(b)  2
  • 交换变量的值
a, b = 5, 4
a, b = b, a

5.7 引用1

  • 在python中,值是靠引用来传递来的。

  • 我们可以用id()来判断两个变量是否为同一个值的引用。 我们可以将id值理解为那块内存的地址标示。

5.8 可变、不可变类型

  • 所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
  • 可变类型有: 列表、字典、集合
  • 不可变类型有: 数字、字符串、元组

5.9 引用2

  • Python中函数参数是引用传递(注意不是值传递)
  • 对于不可变类型,因变量不能修改,所以运算不会影响到变量自身
  • 而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量

另加知识点

import copy
spam = ['A', 'B', 'C', 'D']
list1 = copy.copy(spam)
print(list1)
list1[1] = 11
print(spam)
print(list1)

5.10 学生管理系统-list

"""



for i in info_list:   # i就是每一个小列表
    if name in i:  # 判断名字在不在小列表中
        
        ....
        break   # 如果找到第一个成功了,后面不用再找了
else:
    # 这里的代码什么时候执行?? 
    # for循环什么时候结束?两种情况:
    # 1、通过break结束
    # 2、遍历完所有的元素,if的条件都没有成立,for循环也会结束
    print("【ERROR】:删除不成功,查无此人!")
    # 注意:!!!  这里的代码第二种情况才会执行

"""
import sys


info_list = [['诸葛亮', '40', '男'], ['刘备', '45', '男']]  # 这个列表用来保存所有的名片,它里面每一个元素就是每一个小名片(列表)


def welcome():
    """
        打印界面 
    """
    print("-" * 30)
    print("--------名片管理器v1.0--------")
    print("----1、添加名片")
    print("----2、删除名片")
    print("----3、修改名片")
    print("----4、查询名片")
    print("----5、退出系统")
    print("-" * 30)


while True:

    # 打印界面
    welcome()

    # 让用户输入数字,表示对应的操作
    command = input("请输入数字1~5表示对应的操作:")

    # 判断用户输入的这个数字command,根据它来执行对应的功能(代码)
    if command == "1":
        # 添加名片  就是 往大列表info_list,添加某个人的名片
        name = input("请输入姓名:")
        age = input("请输入年龄:")
        sex = input("请输入性别:")
        info_list.append([name, age, sex])  # 把name, age, sex整合成一个小列表,追加到大列表info_list中
        print("【INFO】:添加成功!")
        print(info_list)   # 自己测试用,看看有没有添加成功

    elif command == "2":
        # 删除名片
        # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
        name = input("请输入要删除这个名片的姓名:")
        for i in info_list:   # i就是每一个小列表
            if name in i:  # 判断名字在不在小列表中
                # 在,才执行这里的代码,就删除
                # 在大列表中删除小列表
                info_list.remove(i)
                print("【INFO】:删除成功!")
                print(info_list)
                break   # 如果找到第一个成功了,后面不用再找了
        else:
            # 这里的代码什么时候执行??
            # for循环什么时候结束?两种情况:
            # 1、通过break结束
            # 2、遍历完所有的元素,if的条件都没有成立,for循环也会结束
            print("【ERROR】:删除不成功,查无此人!")
            # 注意:!!!  这里的代码第二种情况才会执行

    elif command == "3":
        # 修改名片
        # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
        name = input("请输入要修改这个名片的姓名:")
        for i in info_list:   # i就是每一个小列表
            if name in i:  # 判断名字在不在小列表中
                # 在,才执行这里的代码,就修改
                new_name = input("请输入新的姓名:")
                new_age = input("请输入新的年龄:")
                new_sex = input("请输入新的性别:")
                # 如果在列表中修改数据?通过下标来修改:列表名[下标] = 值
                info_list[info_list.index(i)] = [new_name, new_age, new_sex]
                print("【INFO】:修改成功!")
                print(info_list)
                break   # 如果找到第一个成功了,后面不用再找了
        else:
            print("【ERROR】:删除不成功,查无此人!")

    elif command == "4":
        # 查询名片
        # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
        name = input("请输入要查询的名片的姓名:")
        for i in info_list:   # i就是每一个小列表
            if name in i:  # 判断名字在不在小列表中

                print("【INFO】:这个人的信息如下:%s" % i)
                break   # 如果找到第一个成功了,后面不用再找了
        else:
            print("【ERROR】:删除不成功,查无此人!")
    elif command == "5":
        # 退出系统
        # break

        sign = input("确定要退出系统吗?(yes or no):")
        # if sign == "yes" or sign == "y":
        # if sign in ["yes", "y", "Y", "YES"]:
        if sign.lower() in ["yes", "y"]:
            print("【INFO】:成功退出系统!")
            sys.exit()

    else:
        print("【ERROR】:请务必输入数字1~5")


print(123456)

5.11 水仙花数

"""

打印水仙花数:
# 旧知识点回顾
2、打印出100-999之间所有的"水仙花数"。("水仙花数"是指一个三位以上的整数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。)

i // 100 
i % 100 // 10
i % 10

int(str(i)[0])  取百位上的数字
"""


# for i in range(100, 1000):
#     if i == (i // 100) ** 3 + (i % 100 // 10) ** 3 + (i % 10) ** 3:
#         print(i)

for i in range(100, 1000):
    if i == (int(str(i)[0])) ** 3 + (int(str(i)[1])) ** 3 + (int(str(i)[2])) ** 3:
        print(i)

5.12 字典的应用

"""
字典的应用:
要求:
1、定义一个函数,可以让用户在键盘上按小写字母z到m这一排中的某个字母进行输入时,对应输出位于其上方的字母。如果输入的不在小写字母zxcvbnm,则提示"输入错误,请重新输入"
(例如:输入z,对应输出a;输入x,对应输出s;输入c,对应输出d;...输入m,对应输出j)


要求:
1.用字典来完成   dic = {"z": "a", "x": "s" ... }
2.输入之后要检验是否在小写字母zxcvbnm中,且长度要为1
3.可以循环使用这个功能,也可以退出
"""
import sys
dic = {"z": "a", "x": "s", "c": "d", "v": "f", "b": "g", "n": "h", "m": "j"}


def fn():
    while True:
        str1 = input("请在zxcvbnm中选择输入一个字母(输入q表示退出):")

        if str1 == "q":
            # return
            sys.exit()

        if (str1 in "zxcvbnm") and (len(str1) == 1):
            # 例如:输入z,对应输出a;输入x,对应输出s;输入c,
            # 满足这个条件,说明str1已经是dic字典中的某一个键了,就可以通过这个str1键名来找到对应的值  字典名[键名]
            print(dic[str1])
        else:
            print("输入错误,请重新输入")

# while True:
#     fn()
fn()

"""

{"name": '诸葛亮', "age": 40, "sex": "男"}
"""
import sys


info_list = [{"name": '诸葛亮', "age": 40, "sex": "男"}, {"name": '刘备', "age": 45, "sex": "男"}]  # 这个列表用来保存所有的名片,它里面每一个元素就是每一个小名片(列表)

user_name = "admin"
password = "123456"


def welcome():
    """
        打印界面 
    """
    print("-" * 30)
    print("--------名片管理器v1.0--------")
    print("----1、添加名片")
    print("----2、删除名片")
    print("----3、修改名片")
    print("----4、查询名片")
    print("----5、查询所有名片")
    print("----6、退出系统")
    print("-" * 30)


while True:

    # 打印界面
    welcome()

    # 让用户输入数字,表示对应的操作
    command = input("请输入数字1~5表示对应的操作:")

    # 判断用户输入的这个数字command,根据它来执行对应的功能(代码)
    if command == "1":
        # 添加名片  就是 往大列表info_list,添加某个人的名片
        name = input("请输入姓名:")
        age = input("请输入年龄:")
        sex = input("请输入性别:")
        dic = {"name": name, "age": age, "sex": sex}
        info_list.append(dic)  # 把name, age, sex整合成一个小列表,追加到大列表info_list中
        print("【INFO】:添加成功!")
        print(info_list)   # 自己测试用,看看有没有添加成功

    elif command == "2":
        # 删除名片
        # [{"name": '诸葛亮', "age": 40, "sex": "男"}, {"name": '刘备', "age": 45, "sex": "男"}]
        name = input("请输入要删除这个名片的姓名:")
        for i in info_list:   # i就是每一个小列表
            if name in i.values():  # 判断名字在不在小列表中
                # 在,才执行这里的代码,就删除
                # 在大列表中删除小列表
                info_list.remove(i)
                print("【INFO】:删除成功!")
                print(info_list)
                break   # 如果找到第一个成功了,后面不用再找了
        else:
            # 这里的代码什么时候执行??
            # for循环什么时候结束?两种情况:
            # 1、通过break结束
            # 2、遍历完所有的元素,if的条件都没有成立,for循环也会结束
            print("【ERROR】:删除不成功,查无此人!")
            # 注意:!!!  这里的代码第二种情况才会执行

    elif command == "3":
        # 修改名片
        #
        name = input("请输入要修改这个名片的姓名:")
        for i in info_list:   # i就是每一个小列表
            if name in i.values():  # 判断名字在不在小列表中
                # 在,才执行这里的代码,就修改
                new_name = input("请输入新的姓名:")
                new_age = input("请输入新的年龄:")
                new_sex = input("请输入新的性别:")
                # 如果在列表中修改数据?通过下标来修改:列表名[下标] = 值
                info_list[info_list.index(i)] = {"name": new_name, "age": new_age, "sex": new_sex}
                print("【INFO】:修改成功!")
                print(info_list)
                break   # 如果找到第一个成功了,后面不用再找了
        else:
            print("【ERROR】:删除不成功,查无此人!")

    elif command == "4":
        # 查询名片
        # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
        name = input("请输入要查询的名片的姓名:")
        for i in info_list:   # i就是每一个小列表
            if name in i.values():  # 判断名字在不在小列表中

                print("【INFO】:这个人的信息如下:%s" % i)
                break   # 如果找到第一个成功了,后面不用再找了
        else:
            print("【ERROR】:删除不成功,查无此人!")
    elif command == "5":
        # 查询所有名片
        uname = input("请输入管理员账号:")
        pwd = input("请输入管理员密码:")

        if uname == user_name and pwd == password:
            # 展示所有数据
            # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
            print(info_list)
            # for i in info_list:
            #     # print(i)
            #     for j in i:
            #         print(j, end="\t")
            #     print()

        else:
            print("【ERROR】:用户名或者密码错误")

    elif command == "6":
        # 退出系统
        # break

        sign = input("确定要退出系统吗?(yes or no):")
        # if sign == "yes" or sign == "y":
        # if sign in ["yes", "y", "Y", "YES"]:
        if sign.lower() in ["yes", "y"]:
            print("【INFO】:成功退出系统!")
            sys.exit()

    else:
        print("【ERROR】:请务必输入数字1~5")


print(123456)
相关标签: python 入门教程