题目需求:
#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<=1018, 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
1def 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)