Python(黑马程序员)-函数(附带ATM机系统案例)

函数介绍:

定义:

函数 是 组织好的, 可重复利用的, 来实现特定功能的代码片段;

name = "祝大家新年快乐,万事如意"
lenth = len(name)
print(lenth)

屏幕截图 2024-02-15 085633.png

案例(统计字符串长度):

str1 = "新年快乐"
str2 = "happy"
str3 = "new year"

count = 0
for i in str1:
    count += 1
print(f"字符串{str1}的长度为:{count}")

count = 0
for i in str2:
    count += 1
print(f"字符串{str2}的长度为:{count}")

count = 0
for i in str3:
    count += 1
print(f"字符串{str3}的长度为:{count}")

屏幕截图 2024-02-15 090809.png
虽然这样也可以求出字符串的长度,但是却过于重复;
一次我们可以使用函数来优化代码;

str1 = "新年快乐"
str2 = "happy"
str3 = "new year"

def my_len(data):
    count = 0
    for i in data:
        count += 1
    print(f"字符串{data}的长度是:{count}")

my_len(str1)

屏幕截图 2024-02-15 091246.png

总结:

屏幕截图 2024-02-15 091307.png

函数的语法:

屏幕截图 2024-02-15 091430.png

代码展示:

def say_hi():
    print("hi")
say_hi()

屏幕截图 2024-02-15 091651.png

注意:

· 参数不需要,可省略;
· 返回值不需要,可省略;
· 函数必须先定义,后调用;

小练习:

屏幕截图 2024-02-15 091912.png

def check():
    print("欢迎来到动物园")
    print("请出示72小时的核酸证明。")

check()

屏幕截图 2024-02-15 092129.png

函数的传入参数:

传入参数的功能:在函数进行计算的时候,接受外部(调用时)提供的数据;
如:

代码展示:

def add(num1, num2):
    result = num1 + num2
    print(f"{num1} + {num2} = {result}")

add(1, 5)
add(2, 7)

屏幕截图 2024-02-15 092513.png

解析:

屏幕截图 2024-02-15 092532.png\

注意:

函数的传入参数是不受限制的;

总结:

屏幕截图 2024-02-15 092702.png

小练习:

屏幕截图 2024-02-15 092738.png

"""
升级版自动查核酸
定义一个函数,名称任意,并i接受一个参数传入(数字类型,表示体温)
在函数内进行体温判断(正常范围:小于等于:37.3°),并输出如下内容:

欢迎来到动物园!请出示您的健康码以及72小时核酸证明,并配合测量体温!
体温测量中,您的体温是:37.3度,体温正常请进!

欢迎来到动物园!请出示您的健康码以及72小时核酸证明,并配合测量体温!
体温测量中,您的体温是:39.3度,需要隔离!
"""


def check_temperature(temperature):
    if temperature <= 37.3:
        print(f"体温测量中,您的体温是:{temperature}度,体温正常请进!")
    else:
        print(f"体温测量中,您的体温是:{temperature}度,需要隔离!")

print("欢迎来到动物园")
temperature = int(input("请出示您的健康码以及72小时核酸证明,并配合测量体温!体温为:"))
check_temperature(temperature)

屏幕截图 2024-02-15 093850.png屏幕截图 2024-02-15 093843.png

函数的返回值:

屏幕截图 2024-02-15 094032.png屏幕截图 2024-02-15 094041.png

语法格式:

def 函数名(参数):
函数体
return 返回值
变量 = 函数名(参数)

代码展示:

def add(num1, num2):
    result = num1 + num2
    return result
num1 = int(input("请输入num1的值:"))
num2 = int(input("请输入num2的值:"))

total_num = add(num1, num2)
print(f"{num1} + {num2} = {total_num}")

屏幕截图 2024-02-15 094452.png

总结:

屏幕截图 2024-02-15 094523.png

None 类型:

思考:

加入函数没有使用return语句的话,请问函数有返回值吗?
答:有的;

Python中有一个特殊的字面量:None,其类型是:<class ‘NoneType’>
无返回值的函数,实际上就是返回了:None这个字面量

即返回空的意思;

代码展示:

def say_hi():
    print("hi")
result = say_hi()
print(f"无返回值的函数的结果:{result}, 类型是:{type(result)}")

def say_bye():
    print("bye")
    return None
result1 = say_bye()
print(f"返回值为None的函数结果为:{result}, 类型为:{type(result)}")

屏幕截图 2024-02-15 095141.png

Node的应用类型:

None 作为一个特殊的字面量,用于表示:空,无意义,其有非常多的应用场景:

· 用在函数无返回值上;

· 用在 if 判断上:

  1. 在 if 判断中,None相当于False;
  2. 一般用在函数中主动返回None,配合 if 判断做相关处理;
def check_age(age):
    if age >= 18:
        return "SUCCESS"
    else:
        return None
result = check_age(16)
if not result:
    print("未成年,禁止入内!")

屏幕截图 2024-02-15 100002.png

· 用于声明无内容的变量上:
定义变量,但暂时不需要变量有具体值,可以使用None来代替;
name = None

总结:

屏幕截图 2024-02-15 100028.png

函数的说明文档:

引言:

函数是纯代码语言,想要理解含义,就要一行行的读代码,效率低;
因此,我们可以为函数加上说明文档;

语法:

def func(x, y):
    """
    函数说明
    :param x: 形参x的说明
    :param y: 形参y的说明
    :return : 返回值的说明
    """
    函数体
    return 返回值

代码展示:

def add(num1, num2):
    """
    add()函数能够传入两个形参参数,对两个参数进行求和运算
    :param num1: 形参 num1 是其中一个求和数字
    :param num2: 形参 num2 是另一个人求和数字
    :return:  返回两个形参的和
    """
    result = num1 + num2
    return result

result1 = add(1, 3)
print(result1)

屏幕截图 2024-02-15 100845.png
这样的话,我们就可以一眼看出函数的作用,而不用一行行的读代码;
效率大大提高;
而且在鼠标悬停在函数名处时,还会显示注释说明:
屏幕截图 2024-02-15 101045.png

函数的嵌套调用:

所谓的函数调用就是在一个函数里面调用另外一个函数;
屏幕截图 2024-02-15 101220.png
屏幕截图 2024-02-15 101223.png

代码展示:

def say_happy():
    """
    sau_happy()函数能够打印 happy
    :return: 返回None
    """
    print("happy")
    return None

def say_new_year():
    """
    say_new_year()函数能够打印new year 并且 调用 say_happy 函数
    :return: 返回None
    """
    say_happy()

    print("new")
    print("year")
    return None

say_new_year()

屏幕截图 2024-02-15 101743.png

总结:

屏幕截图 2024-02-15 101345.png

函数中变量的作用域:

引言:

变量作用域指的是变量的作用范围(变量在哪里可用,在那里不可用)
主要分为两类:局部变量 和 全局变量

所谓局部变量是定以函数体内的变量,即只在函数体内部生效:

def testA():
    num = 100
    print(num)
testA()		# 100
print(num) # 报错:name 'num' is not defined

屏幕截图 2024-02-15 102204.png

所谓全局变量,指的是在函数体内,外部均能生效的变量

# 定义全局变量num
num = 100

def aestA():
    print(num)
    return None
def aestB():
    print(num)
    return None

aestA()
aestB()
print(num)

屏幕截图 2024-02-15 103031.png

global 关键字:

※ 使用 global 关键字 可以在函数内部声明变量为全局变量,这样就可以修改全局变量,如:

# 定义全局变量num
num = 100

def aestA():
    global num
    num = 200
    print(num)
    return None
def aestB():
    print(num)
    return None

aestA()
aestB()
print(num)

屏幕截图 2024-02-15 103337.png

综合案例:

屏幕截图 2024-02-15 103458.png
屏幕截图 2024-02-15 103543.png
屏幕截图 2024-02-15 103650.png

"""
仁爱ATM

要求:
定义一个全局变量:money,用来记录银行卡余额(默认5000000)
定义一个全局变量:name,用来记录客户姓名(启动程序的时候输入)
定义如下函数:
    查询余额函数
    存款函数
    取款函数
    主菜单函数

程序启动时要求输入客户姓名
查询余额,存款,取款后都会返回主菜单
存款,取款后,都应显示一下当前余额
客户选择退出或输入错误,程序会退出,否则一直运行
"""


# 定义全局变量 money 和 现金
money = 5000000
wallet_money = 500000
name = "小黑子"
password = 123

# 定义 主菜单函数
def main_menu():
    """
    main_menu() 函数可以打印主菜单 选择功能
    :return: 返回None
    """
    flag = True
    while flag:
        menu = """--------------主菜单--------------
        查询余额   【输入1】
        存款       【输入2】
        取款       【输入3】
        退出       【输入4】
        """
        print(menu)
        choice = int(input("请选择:"))
        if choice == 1:
            show_money()
            main_menu()
        elif choice == 2:
            save_money()
            main_menu()
        elif choice == 3:
            get_money()
            main_menu()
        elif choice == 4:
            flag = False
            exit()
        else:
            main_menu()
    return None


# 定义查询余额函数
def show_money():
    """
    show_money()函数 能够查询现金和银行卡余额
    :return: 返回 None
    """
    show_money_menu = """--------------查询余额----------
    """
    global money, wallet_money
    print(f"您目前的银行卡余额:{money}元")
    print(f"您目前的现金余额:{wallet_money}元")
    return None


# 定义存款函数
def save_money():
    """
    save_money()函数 可以将现金存入银行卡
    :return: 返回None
    """
    flag = True
    while flag:
        save_money_menu = """--------------存款界面--------------
    存款【输入1】    退出【输入0】
        """
        print(save_money_menu)
        choice = int(input("请选择:"))
        if choice == 1:
            money1 = int(input("请输入要存取的金额:"))
            global money, wallet_money
            if money1 > wallet_money:
                print("您的现金不足!")
            else:
                money += money1
                wallet_money -= money1
                show_money()
                flag = False
                main_menu()
        elif choice == 0:
            flag = False
            main_menu()
        else:
            save_money()
    return None

# 定义取款函数
def get_money():
    """
    get_money() 函数是将银行卡中的钱财提出
    :return: 返回None
    """
    flag = True
    while flag:
        get_money_menu = """--------------取款界面--------------
    取款【输入1】    退出【输入0】
        """
        print(get_money_menu)
        choice = int(input("请选择:"))
        if choice == 1:
            money1 = int(input("请输入取款金额:"))
            global money, wallet_money
            if money1 > money:
                print("您的账户余额不足!")
            else:
                money -= money1
                wallet_money += money1
                show_money()
                flag = False
                main_menu()
        elif choice == 0:
            main_menu()
        else:
            get_money()
    return None

# 定义登录函数
def login_person():
    """
    login_person()函数 用于用户登录
    :return: 返回None
    """
    x = 2
    global name, password
    while x:
        name1 = input("用户名:")
        password1 = int(input("密码:"))
        if name1 == name and password1 == password:
            print(f"欢迎{name}登录仁爱ATM!")
            main_menu()
        else:
            print(f"用户名或密码错误!")
            print(f"还剩下{x}次机会。")
            x -= 1


login_person()

请看VCR:

bandicam 2024-02-15 12-43-16-981.mp4 (4.63MB)

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值