Python之函数(综合练习)

函数的综合练习

案例1:

编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

代码:

# 1.定义函数; *args:可变参数
def cacluate(*args):
    # 2.计算平均值; args的数据类型为元组,sum求和
    average = sum(args) / len(args)
    # 3.将所有大于平均值数的值存入列表
    list=[]
    for i in args:
        if i > average:
            list.append(i)
    # 4.将平均值和列表元素存入元组
    tuple=(average,list)
    return tuple

print(cacluate(1,1,2,3,4))

运行结果:
在这里插入图片描述
案例2:

编写一个函数, 接收字符串参数, 返回一个元组,
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
例如  
输入:'hello WORLD'
输出:(5,5)

代码:

# 直接在函数里print输出,在调用函数时只能打印不能使用
# 如果想要使用函数里的变量值,此时需要在定义函数时用return返回函数值

def fun(c):
    # 记录大写字母个数
    upper = 0
    # 记录小写字母个数
    lower = 0
    # 统计大小写字母的个数
    for i in c:
        if i.isupper():
            upper += 1
        # 注意:不能用else,因为字符串之间有空格
        if i.islower():
            lower += 1
    tuple = (upper,lower)
    # 函数返回值
    return tuple

# 此时直接调用函数将不会有输出值,必须用print输出
print(fun(input('请输入字符串:')))

运行结果:
在这里插入图片描述
案例3:

编写函数, 接收一个列表(包含30个1~100之间的随机整形数)
和一个整形数k, 返回一个新列表.

函数需求:
    - 将列表下标k之前对应(不包含k)的元素逆序;
    - 将下标k及之后的元素逆序;
[1,2,3,4,5] 2   [2,1,5,4,3]

代码:

# 导入生成随机数的包
import random

# 定义空列表
list = []
# 生成30个随机数
for i in range(30):
    num = random.randint(1,100)
    # 将生成的随机数添加到列表中
    list.append(num)
# 打印原始列表
print(list)

# 定义函数
def fun(list,k):
    # k表示下标
    if k < 0 or k >= len(list):
        print('error key')
    else:
        # [:k] k之前的元素   [::-1] 逆序   + 连接
        return list[:k][::-1] + list[k:][::-1]

print(fun(list,3))

运行结果:
在这里插入图片描述
案例4:

模拟轮盘抽奖游戏
  轮盘分为三部分: 一等奖, 二等奖和三等奖;
  轮盘转的时候是随机的,
      如果范围在[0,0.08)之间,代表一等奖,
      如果范围在[0.08,0.3)之间,代表2等奖,
      如果范围在[0.3, 1.0)之间,代表3等奖,

模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

代码:(方法1)

import random

def rewordfun():
    # 定义用来记录各个中奖等级人数的变量
    onecount = 0
    twocount = 0
    threecont = 0
    # 计算中奖等级人数
    for i in range(1000):
        # random.random():生成0-1的随机数
        # format: 格式转换,保留两位小数
        # print(random.random())
        num = float(format(random.random(),'.2f'))
        # print(num)
        if  0 <= num < 0.08:
            onecount += 1
        elif 0.08 <= num < 0.3:
            twocount += 1
        else:
            threecont += 1
    # 返回各个中奖等级人数
    return onecount,twocount,threecont

# 将函数返回值赋给变量
count01,count02,count03 = rewordfun()
# 定义字典
rewordDict = {'一等奖':count01,'二等奖':count02,'三等奖':count03}

# 遍历输出字典的key-value
for k,v in rewordDict.items():
    print(k,'--->',v)

运行结果:
在这里插入图片描述
代码:(方法2)

import random

# 定义(得奖情况)字典
rewardDict ={'一等奖':(0,0.08),'二等奖':(0.08,0.3),'三等奖':(0.3,1.0)}

# 判断用户是否得奖
def rewardfun():
    num = random.random()
    # 遍历key-value
    for k,v in rewardDict.items():
        if num >= v[0] and num < v[1]:
            return k

# 定义空字典
resultDict = {}

# 将得奖记录添加到字典中,记录1000人玩游戏的得奖情况
for i in range(1000):
    # 将函数的返回值赋给reskey
    reskey = rewardfun()
    print(reskey)
    if reskey not in resultDict:
        # 增加元素
        resultDict[reskey] = 1
    else:
        resultDict[reskey] += 1

# 遍历输出字典的 key-value值
for k,v in resultDict.items():
    print(k,'---->',v)

运行结果:
在这里插入图片描述
案例5:

题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53
    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n
输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;

范例:
    输入: 51 5000 10000
    输出: 3

代码:

# 1.接收用户输入
k = int(input('k='))
a = int(input('a='))
b = int(input('b='))

# 2.定义函数,计算f
def fun(c):
    f = 0
    for i in str(c):
        f += int(i)**2
    return f

# fun(207)

# 定义计数器
count = 0

# 3.统计满足条件的n的个数
for n in range(a,b+1):
    if k * fun(n) == n:
        count += 1
# 打印个数
print(count)

运行结果:
在这里插入图片描述

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值