函数练习

本文提供了一系列编程挑战,包括Collatz序列探究、统计数据计算、字符串处理等,旨在帮助读者通过实践提升编程技能。文章包含了完整的代码示例和详细解释,适合各个级别的程序员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例1:
 编写一个名为collatz()的函数,它有一个名为number的参数
     如果参数是偶数,那么collatz()就打印出number//2
     如果number是奇数,collatz()就打印3*number+1

def collatz(number):
    # if number % 2 == 0:
    #     print number // 2
    # else:
    #     print 3 * number + 1
    print number // 2 if number % 2 == 0 else 3 * number + 1

collatz(2)

升级:然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。

- 输入:
    3
- 输出:
    10
    5
   16
    8
    4
    2
    1

#升级版
def collatz(number):
    if number == 1:
        exit(0)
    elif number%2 == 0:
        return number//2
    else:
        return 3*number+1

num=int(raw_input('n:'))

while True:
     num=collatz(num)
     print num


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

def caculate(*args):
    avg = sum(args) /len(args)
    list=[]
    for i in args:
        if i>avg:
            list.append(i)
    return avg,list
a=caculate(1,2,3,4)
print a


案例3:
    编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
    函数需求:
        - 将列表下标k之前对应(不包含k)的元素逆序;
        - 将下标k及之后的元素逆序;

import random
def fun(alist,k):
    if k<0 or k>len(alist):
        return "error key"
    else:
        newL1=alist[:k]
        newL2=newL1[::-1]
        newL3=alist[k:]
        newL4=newL3[::-1]
        return newL2+newL4   # 可由return alist[:k][::-1] + alist[k:][::-1]替代
li=[]
for i in range(30):
    num=random.randint(1,100)
    li.append(num)
print li
a=fun(li,4)
print a

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

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

import random
rewardDict={'一等奖':(0,0.08),'二等奖':(0.08,0.3),'三等奖':(0.3,1)}
def rewardFun():
    num=random.random()   #生成0-1之间的随机数
    for k,v in rewardDict.items():
        if v[0]<=num<v[1]:
            return k
resultDict={}
for i in range(1000):
    res=rewardFun()
    if res not in resultDict:
        resultDict[res]=1
    else:
        resultDict[res]=resultDict[res]+1
for k,v in resultDict.items():
    print k,'------->',v

案例五:
    对于一个十进制的正整数,定义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

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

def f(n):
    n=str(n)
    sum=0
    for i in n:
        sum+=int(i)**2
    return sum
s=raw_input('请输入(k,a,b):')
li=[]
for i in s.split():
    li.append(int(i))
k,a,b=li
count = 0
for i in range(a,b+1):
   if k*f(i)==i:
        count +=1
print count

案例6.编写一个函数, 接收一个字符串参数, 返回一个元组,'ehllo WROLD'
           元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

def fun(*args):

    count = 0
    count1 = 0
    for i in args:
        if i.islower():
            count += 1
        if i.isupper():
            count1 += 1
    return count,count1

a=raw_input('输入一个字符串:')
b=fun(*a)
print b

案例7:.打字软件正确率
编写函数, 计算字符串匹配的准确率.(类似于打字软件)
orginStr为原始内容, userStr为用户输入内容

def accurate(originStr):
    count=0
    print(originStr)
    userStr = raw_input('Please spell:')
    origin_list = originStr.split()
    user_list = userStr.split()
    if originStr == userStr:
        return '100%'
    else:
        for i in range(len(origin_list)):
            if user_list[i] == origin_list[i]:
                count += 1
        percentage = count/len(origin_list)*100
    return '%.2f%%'%percentage
per=accurate('hello world')
print (per)

案例8:打地鼠游戏

编写代码模拟打地鼠的小游戏,
假设一共有五个洞口,老鼠在里面随机一个洞口;
人随机打开一个洞口,如果有老鼠,代表抓到了
如果没有,继续打地鼠;但是地鼠会跳到其他洞口。
def fun():
    mouse=random.randint(1,5)
    player=raw_input('输入你的选择:')
    return mouse == player

print '游戏开始'
for i in range(5):
    re = fun()
    if re == True :
        print '赢了'
        break
    else:
        print 'loser,please continue'
else:
    print 'game over'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值