Day5_Functions_Module

"""
x_1 + x_2 + x_3 + x_4 = 8
有多少组正数解?
4个篮子放8个苹果(每组至少一个苹果) 怎么放?
M!/N!(M-N)!
(m=7,n=3)

Author:黄骏捷
Date:黄骏捷
"""
m = int(input('m = '))
n = int(input('n = '))
fm = 1
for num in range(1, m + 1):
    fm *= num
fn = 1
for num in range(1, n + 1):
    fn *= num
fmn = 1
for num in range(1, m - n + 1):
    fmn *= num
print(fm // fn // fmn)
print('-------------------------')

"""
上述有三处相同重复计算,我们可以定义一共函数
求阶乘
:param num: 非负整数
:return: num的阶乘
"""


def factorial(num):
    """
    求阶乘

    :param num: 非负整数
    :return: num的阶乘
    """
    result = 1
    for n in range(1, num + 1):
        result *= n
    return result


m = int(input('m = '))
n = int(input('n = '))
print(factorial(m) // factorial(n) // factorial(m - n))
print('-------------------------')

"""
Python的参数与其他语言有差别,python的参数可以有默认值,
也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载
"""
from random import  randint
def roll_dice(n=2):
    total = 0
    for _ in range(n):
        total += randint(1,6)
    return total

def add(a=0,b=0,c=0):
    return a+b+c

#如果没有指定参数,默认摇两个色子
print(roll_dice())
#三个色子
print(roll_dice(3))
print(add())
print(add(1))
print(add(1,2))
print(add(1,2,3))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c=50, a=100, b=200))
print('-------------------------')

"""
python没有重载,后同名函数会覆盖前同名函数
所以可以:用模块管理函数

Python中每个文件就代表了一个模块(module),
我们在不同的模块中可以有同名的函数,
在使用函数的时候我们通过import关键字导入指定的模块就可以区分到底要使用的是哪个模块中的foo函数
"""
"""
#module1.py

def foo():
    print('hello world')

#module2.py

    def foo():
    print('goodbye,world')
"""

"""
test.py

from module1 import foo
# 输出hello, world!
foo()

from module2 import foo
# 输出goodbye, world!
foo()

or

import module1 as m1
import module2 as m2
m1.foo()
m2.foo()
"""
print('-------------------------')

"""
有时导入的模块除定义函数之外还有其他可执行代码,python解释器在导入这个模块后就会执行这些代码
我们可以这样不执行
"""
"""
module3.py

def foo():
    pass

def bar():
    pass

# __name__是Python中一个隐含的变量它代表了模块的名字
# 只有被Python解释器直接执行的模块的名字才是__main__
if __name__ == '__main__':
    print('call foo()')
    foo()
    print('call bar()')
    bar()
"""

"""
test.py

import module3
# 导入module3时 不会执行模块中if条件成立时的代码 因为模块的名字是module3而不是__main__
"""

"""
作用域,使用global关键字来指示foo函数中的变量a来自于全局作用域,如果全局作用域中没有a,
那么下面一行的代码就会定义变量a并将其置于全局作用域。
同理,如果我们希望函数内部的函数能够修改嵌套作用域中的变量,
可以使用nonlocal关键字来指示变量来自于嵌套作用域
"""
def foo():
    a = 200
    print(a)  # 200


if __name__ == '__main__':
    a = 100
    foo()
    print(a)  # 100
print('-------------------------上下区别')
def foo():
    global a
    a = 200
    print(a)  # 200


if __name__ == '__main__':
    a = 100
    foo()
    print(a)  # 200
发布了66 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ACofKing/article/details/101792504