2022.12.21-Python100day-day04-函数

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)}')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值