用python计算打折问题 python折扣_全局变量

  1. 如果需要返回值,使用保留字return和返回值列表,函数可以没有return语句,函数体结束后,会将控制权返回给调用者。
  2. 函数不能直接运行,必须调用
  3. def<函数名>(<非可选参数列表>,<可选参数>,=<默认值>)
    .
    #n的阶乘,这里是4的阶乘
def fac(n):
    s=1
    for i in range(1,n+1):
        s*=i
    return s
print(fac(4))

输出结果为:

24

#return可以返回多个值

>>> a,b=3,4
>>> a
3
>>> b
4

在函数中这种赋值同样也存在

函数的作用域

局部变量

python的局部变量只在函数内部起作用,出了函数就不起作用了

def discounts(price,rate):
    final_price = price * rate
    return final_price
old_price = float(input("请输入原价:"))
rate = float(input("请输入折扣率:"))
new_price =discounts(old_price,rate)
print("打折后的价格是:", new_price)

输出结果为:

请输入原价:100
请输入折扣率:0.8
打折后的价格是: 80.0

如果我们想输出局部变量final_price,我们试一下

def discounts(price,rate):
    final_price = price * rate
    return final_price
old_price = float(input("请输入原价:"))
rate = float(input("请输入折扣率:"))
new_price =discounts(old_price,rate)
print("打折后的价格是:", new_price)
print(final_price)
输出结果为:
请输入原价:300
请输入折扣率:0.8
打折后的价格是: 240.0

NameError: name 'final_price' is not defined

显示报错说final_price 并没有被定义,像final_price,price,rate这些都是局部变量,一但出了函数就不发挥作用了

全局变量

  1. 全局变量指在函数之外定义的变量,在 程序执行全过程有效,全局变量在函数内部使用时,必须提前使用保留字global声明,语法如下:
global<全局变量>
n=2 #n是全局变量
def multiply(x,y=10):
    global n
    return x*y*n     #使用全局变量n
s = multiply(99,2)
print(s)

输出结果为:

======================== RESTART: C:/python3.8/3.192.py ========================
396
  1. 当在函数内部,全局变量和局部变量定义相同时,没有使用保留字global声明也是局部变量.函数内部局部变量优先,函数外部只能使用全局变量。
n=2 #是全局变量
def multiply(x,y=10):
    n =x*y
    return n #此处不是全局变量
s = multiply(99,2)
print(s)
print(n)    #不改变外部全局变量的值

输出结果为:

198
2

函数的递归

  1. 函数的形成:函数的自我调用
  2. python 函数的自我调用不是死循环,有上限,官方规定上限是1000
def fun():
    print("你好,函数")
    fun()
print(fun())

输出:

File "C:/python3.8/3.17.py", line 2, in fun
    print("你好,函数")
RecursionError: maximum recursion depth exceeded while pickli

递归的应用

  1. 树形结构遍历——从根节点找到子节点——把每一个子节点当做根节点来找
  2. 我们操作系统的文件夹系统就是一个树形结构
  3. 使用递归来遍历“爱学习的me”这个文件夹—拿到"爱学习的me"这个文件夹和文件夹的名字
    .
#求n的阶乘
def fac(n):
    #递归终止条件
    if n ==0:
        return 1
    #递归
    res = fac(n-1)*n
    return res
print(fac(5))

输出结果为:120