"""
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
Day5_Functions_Module
最新推荐文章于 2024-09-02 23:14:47 发布