函数练习

题目需求:

#3# 1.对于一个十进制的正整数, 定义f(n)为其各位数字的平方和

,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 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
def f(n):
s=0
n=str(n)
for i in n:
s += int(i)**2
return s

a = input('k,a,b:')   #输入三个数字,并且以字符串形式存在
li = []
for i in a.split():
    li.append(int(i))  #将字符变为整型数字依次放入列表中
k,a,b=li   #对应赋值
count = 0
for i in range(a,b+1):  #括号内必须是int型
    if k*f(i)==i:
        count+=1
print(count)

2.Collatz序列

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

  • 输入:
    3

  • 输出:
    10
    5
    16
    8
    4
    2
    1

    def collatz(number):
          if number % 2 == 0:
              return number // 2
          else:
              return 3*number+1
      sun = int(input('请输入一个数:'))
      while sun != 1:
          sun=collatz(sun)
          print(sun)
      else:
          print('1')
    

3.参数检测

def add(x, y):
    if isinstance(x, (int, float)) and isinstance(y, (int, float)):
        return x + y
    else:
        print('Error:')

res = add(2.5,2)
print(res)

输出结果为 4.5

4.编写函数,计算字符串匹配的准确率

def rate(a,b):
    if not (isinstance(a, str) and isinstance(b, str)):
        print('The tow parameters must be string')
        return
    if len(a)>len(b):
        count=0
        for c,d in zip(a,b):
            if c==d:
                count+=1
        print(count/len(a))
    elif len(a)<len(b):
        count=0
        for c,d in zip(a,b):
            if c==d:
                count+=1
        print(count/len(b))

num1 = input('请输入一段话:')
num2 = input('请输入一段话:')
print(rate(num1,num2))

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

def cacluate(a):
    avg = sum(a)/len(a)
    li = []
    for i in a:
        if i > avg:
            li.append(i)
    return avg,li
num =(input('请输入任意多个数:'))
num=list(map(int,num.split()))  #将输入的字符串转换成list,map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
print(cacluate(num))

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

def panduan(a):
    a=a.split(' ')
    a=''.join(a)
    small = 0
    big = 0
    if isinstance(a,str):
        for i in a:
            if i in a.upper():
                big+=1
            elif i in a.lower():
                small +=1
        return big,small
    else:
        print('Error')
print(panduan('hello WoRLD'))

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

def panduan(a,k):
    m = a[k+1:]   #将k之后的取出来
    m = m[::-1]   #取逆序
    c = len(a)
    x = a[:-(c-k)]  #将c-k之前的取出来
    s = x[::-1]    #取逆序
    return tuple(s + [a[k]] + m)  #列表只能与列表相加
num = input('请输入任意多个数:')
num1 = int(input('请输入k:'))
num = list(map(int, num.split()))  #将输入的数字转换成列表
print(panduan(num,num1))

模拟轮盘抽奖游戏

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

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

 import random
 d = {
     '一等奖':(0,0.08),
     '二等奖':(0.08,0.3),
     '三等奖':(0.3,1.0)
 }
 i=0
 s1=0
 s2=0
 s3=0
 while i<1000:
     n = random.random()  #生成0~1之间的任意数字
     if 0<=n<0.08:
         s1+=1
         i+=1
     elif 0.08<=n<0.3:
         s2+=1
         i+=1
     else:
         s3+=1
         i+=1
 print(d)
 print('一等奖的个数是%s,二等奖的个数是%s,三等奖的个数是%s'%(s1,s2,s3))

或者:

import random


dict = {
    '一等奖':(0,0.08),
    '二等奖':(0.08,0.3),
    '三等奖':(0.3,1)
}
def panduanjiang():
    a = random.random()
    for k,v in dict.items():
        if v[0]<a<v[1]:
            return k
#print(panduanjiang())
d1 = {}
for i in range(1000):
    res=panduanjiang()
    if res not in d1:
        d1[res] = 1 #没有这个奖项,令其value值为1,
    else:
        d1[res] = d1[res] + 1  #有这个奖项,加1.
for k, v in d1.items():  #遍历打印出
    print(k, '---->', v)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值