1、函数
函数 掷骰子
python程序中搜索一个变量是按照 LEGB 顺序进行搜索的
Local(局部作用域)-----> Embedded(嵌套作用域) -----> Global(全局作用域) ------> Built-in(内置作用域)
-----> NameError: name ... ont defined
作用域的关键字 global ------> 声明使用全局变量 nonlocal ------> 声明使用 嵌套 作用域的变量
2、用函数的方式来编辑掷骰子的问题
def roll_dice(num=2): """ :param num: 骰子的数量 :return: 摇出的点数 函数的参数 有默认值 调用函数时 如果没有给自变量 就使用默认值 """ total = 0 for _ in range(num): total += random.randrange(1, 7) return total def win(): """ 玩家获胜 :return: """ print('玩家胜!') money += zhuma def lose(): """ 玩家失败 :return: """ print('庄家胜!') money -= zhuma money = 1000 while money > 0: print(f'玩家的总资产为{money}元.') zhuma = 0 while zhuma <= 0 or zhuma > money: try: zhuma = int(input('请下注:')) except ValueError: pass first_point = roll_dice() print(f'玩家摇出了{first_point}点') if first_point in (7, 11): win() elif first_point in (2, 3, 12): lose() else: while True: curr_point = roll_dice(2) print(f'玩家摇出了{curr_point}点') if curr_point == first_point: win() break elif curr_point == 7: lose() break print('玩家已经破产,游戏结束!')
3、定义阶乘函数
def fac(num): """ 求 阶乘 :param num: N :return: N! """ result = 1 for i in range(2, num+1): result *= num return result m = int(input('m = ')) n = int(input('n = ')) print(fac(m) // fac(n) // fac(m-n))
4、写一个指定长度的随机验证码
homework1 -- 写一个指定长度的随机验证码 snake case def get_captcha_code(length=4): """ :param length:验证码长度 :return: 随机验证码 """ selected_chars = random.choices(string.digits + string.ascii_lowercase + string.ascii_uppercase, k=length) return ''.join(selected_chars) for _ in range(10): print(get_captcha_code(4))
5、函数:判断一个正整数是否为质数,并返回布尔类型值的函数
def is_prime(num: int) ->bool: """ 判断 一个正整数 是不是 质数 :param num: 正整数 :return: 如果是质数 返回True 否则 返回False """ for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return num != 1 and True for n in range(2, 100): if is_prime(n): print(n, end=' ')
6、求两个数的最大公约数 和最小公倍数
设计函数 最重要的原则:单一职责原则(一个函数 只 做好一件事情) -----> 高内聚 低耦合 high cohesion low coupling homework3 ---> 求两个数的最大公约数 和最小公倍数 def gcd(x:int, y:int) -> int: """ 求最大公约数 :param x: :param y: :return: """ while y % x != 0: x, y = y % x, x return x def lcm(x:int, y:int) -> int: """ 求最小公倍数 :param x: :param y: :return: """ return x * y // gcd(x, y)
7、构造函数:比较A班 和B班 哪个班的学习效果更理想
# example - 获取A班和B班的考试成绩的描述性统计信息 导入其他模块的函数 # 比较A班 和B班 哪个班的学习效果更理想
生成A班和B班的随机成绩
class_a_scores = [random.randrange(51, 101)] class_b_scores = [random]
def ptp(data): """ 求极差 :param data: :return: """ return max(data) - min(data) def average(data): """ 求均值 :param data: :return: """ return sum(data) / len(data) def variance(data): x_bar = average(data) total = 0 for num in data: total += (num - x_bar) ** 2 return total / (len(data) - 1) def standard_deviation(data): """ 求 标准差 :param data: :return: """ return math.sqrt(variance(data)) def median(data): temp, size = sorted(data), len(data) if size % 2 != 0: return temp[size // 2] else: return average(temp[size // 2-1: size // 2+1]) nums = [random.randrange(1, 100) for _ in range(8)] print(nums) print(f'均值:{average(nums)}') print(f'中位数:{median(nums)}') print(f'极差:{ptp(nums)}') print(f'方差:{variance(nums)}') print(f'标准差:{standard_deviation(nums)}')