函数题
6-1 sdut-使用函数求a+aa+aaa++⋯+aa.....aaa(n个a)之和。 分数 10
给定两个均不超过9的正整数a和n,要求:编写函数fn(a,n), 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列之和。
函数接口定义:
def fn(a,n):
其中, a 和 n 都是传入的参数。 a 的值在[1, 9]
范围;n 是[1, 9]
区间内的个位数。函数返回数列之和。
裁判测试程序样例:
/* 请在这里填写答案 */
a,b=input().split()
s=fn(int(a),int(b))
print(s)
输入样例:
在这里给出一组输入。例如:
2 3
输出样例:
在这里给出相应的输出。例如:
246
def fn(a,n):
sum=0
a1=a
for x in range(n):
sum+=a1
a1=a1*10+a
return sum
6-2 sdut-使用函数求区域内的素数之和 分数 10
设计函数,求指定范围内的素数之和。
函数1:prime(p), 用户传入参数p
,若它为素数时返回True,否则返回False.
函数2:PrimeSum(m,n),返回区间[m, n]
内所有素数的和(其 中,1<=m<n)。
函数接口定义:
prime(p),返回True表示p是素数,返回False表示p不是素数;
PrimeSum(m,n),函数返回素数之和。
裁判测试程序样例:
/* 请在这里填写答案 */
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))
输入样例:
1 10
输出样例:
17
def prime(p):
flag=True
for i in range(2,p):
if p%i == 0:
flag = False
break
return flag
def PrimeSum(m,n):
sum=0
for p in range(m+1,n+1):
if prime(p):
sum+=p
return sum
6-3 sdut-使用函数统计数字字符在某数字中出现的个数 分数 10
设计函数,统计数字字符在某数字中出现的个数。
函数接口定义:
CountDigit(number,digit )
其中,number是整数,digit为[1, 9]
区间内的整数数值;返回number中digit出现的次数。
裁判测试程序样例:
/* 请在这里填写答案 */
number,digit=input().split()
number=int(number)
digit=int(digit)
count=CountDigit(number,digit )
print("Number of digit {} in {}:{}".format(digit, number, count))
输入样例:
在这里给出一组输入。例如:
-21252 2
输出样例:
Number of digit 2 in -21252: 3
def CountDigit(number,digit):
return str(number).count(str(digit))
6-4 sdut-使用函数输出Fibonacci数列的值与指定范围内Fibonacci数值的个数 分数 10
设计函数实现:计算第n项Fibonacci数列数值,并求出两正整数a和b所组成的闭区间[a,b]
(0<a<b≤100000)之间的所有Fibonacci数的数目。
Fibonacci数列,任一项数字是前两项的和(最开始两项均定义为1)的数列, fib(0)=fib(1)=1
。
函数接口定义:
fib(n) #函数1
fibs(a, b) #函数2
fib(n):返回第n项Fibonacci数;
fibs(a, b):返回 [a, b]
中的所有Fibonacci数组成的列表。
n、a、b均为正整数。
裁判测试程序样例:
/* 请在这里填写答案 */
n,a,b=input().split()
n=int(n)
a=int(a)
b=int(b)
fb=fib(n)
print("fib({0}) = {1}".format(n,fb))
fiblist=fibs(a, b)
print(len(fiblist))
输入样例:
在这里给出一组输入。例如:
6 20 100
输出样例:
在这里给出相应的输出。例如:
fib(6) = 13
4
Fib=[1,1]
def fib(n):
if n==0 or n==1:
return 1
else:
return fib(n-1)+fib(n-2)
def fibs(a,b):
while(Fib[-1]<=b):
Fib.append(Fib[-1]+Fib[-2])
return [t for t in Fib if a<=t<=b]
6-5 sdut-利用函数得到缩写词 分数 10
缩写词是由一个短语中每个单词的第一个字母组成,均为大写。
例如,CPU是短语“central processing unit”的缩写。
函数接口定义:
acronym(phrase);
参数:phrase是字符串短语,函数返回:短语的缩写词。
裁判测试程序样例:
/* 请在这里填写答案 */
phrase=input()
print(acronym(phrase))
输入样例:
central processing unit
输出样例:
CPU
方法一:
def acronym(phrase):
txt = ""
for c in [s[0] for s in list(phrase.title().split())]:
txt += c
return txt
方法二:
def acronym(phrase):
txt=""
s=phrase.upper().split()
#s=phrase.title().split()
for i in s:
txt+=i[0]
return txt
6-6 sdut-求嵌套列表的平均值 分数 10
Avg是一个求平均值的函数。它的参数是嵌套列表,求每个元素的平均值。每个元素是列表,至少有1个值。
函数接口定义:
Avg(lst)
lst是一个二维嵌套列表,该函数返回值是每个元素的平均值组成的列表。
裁判测试程序样例:
/* 请在这里填写答案 */
lst=eval(input())
result=Avg(lst)
for value in result:
print("{:.1f}".format(value),end=" ")
输入样例:
[[95,92,80],[66,75,40],[89,72,100,91]]
输出样例:
89.0 60.3 88.0
方法一:
def Avg(ls):
return [(sum(i)/len(i)*1.0)for i in ls]
方法二:
def Avg(lst):
ls=[]
for i in lst:
ls.append(sum(i)/len(i))
return ls
编程题
7-1 sdut-求全排列 分数 10
输入整数n(3<=n<=7),编写程序输出1,2,...,n整数的全排列,按从小到大的顺序输出。
提示:求全排列的过程定义为一个函数,输入参数为包含n个元素的列表,返回值为包含全排列的列表。
输入格式:
在一行内,输入正整数n。
输出格式:
按数值从小到大的顺序输出1到n的全排列。每种排列占一行,数字间无空格。
输入样例:
3
输出样例:
123
132
213
231
312
321
from itertools import *
def p(n):
for i in permutations([int(x) for x in range(1,n+1)],n):
print(*i,sep='')
n=int(input())
p(n)
7-3 sdut-列表数字元素加权和(2) 分数 10
输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。
第一层每个元素 的值为:元素值*1,第二层每个元素的值为:元素值*2,第三层每个元素的值为:元素值*3, ...,以此类推!
输入格式:
在一行中输入列表。
输出格式:
在一行中输出元素加权之和。
输入样例:
[1,2,[3,4,[5,6],7],8]
输出样例:
72
方法一:
def f(ls,cnt):
sum=0
for i in ls:
if isinstance(i,list):
sum+=f(i,cnt+1)
else:
sum+=i*cnt
return sum
ls,cnt=eval(input()),1
print(f(ls,cnt))
方法二:
def f(ls,cnt):
sum=0
for i in ls:
if isinstance(i,int):
sum+=i*cnt
else:
sum+=f(i,cnt+1)
return sum
ls,cnt=eval(input()),1
print(f(ls,cnt))
7-4 sdut-列表或元组的数字元素求和(yeild) 分数 10
求列表中数字和,列表中嵌套层次不限。
输入格式:
在一行中输入列表或元组。
输出格式:
在一行中输出数字的和。
输入样例:
[11,2,[3,7],(68,-1),"123",9]
输出样例:
99
def f(ls):
sum=0
for i in ls:
if isinstance(i,int):
sum+=i
elif isinstance(i,tuple):
sum+=f(i)
elif isinstance(i,list):
sum+=f(i)
return sum
ls=eval(input())
print(f(ls))
7-6 sdut-学生互助组队 分数 10
“一对一学习互助小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。
请你编写程序帮助老师完成这个分配工作,即:在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
第一行给出正偶数N(≤50),即全班学生的人数。
此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),以1个空格分隔。
这里保证本班男女比例是1:1,并且没有并列名次。
输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。
名次高的学生在前,名次低的学生在后。
小组的输出顺序按照前面学生的名次从高到低排列。
输入样例:
8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda
输出样例:
Amy Jack
Tom Linda
Bill Maya
Cindy John
ls,lsw,lsm=[],[],[]
n=int(input())
for i in range(n):
x=input().split()
ls.append(x[1])
if int(x[0])==0:
lsw.append(x[1])
else:
lsm.append(x[1])
dict1,dict2=dict(zip(lsw,lsm[::-1])),dict(zip(lsm,lsw[::-1]))
for i in range(len(ls)//2):
if ls[i] in dict1.keys():
print(ls[i],dict1[ls[i]])
else:
print(ls[i],dict2[ls[i]])
7-7 sdut-求指定层的元素个数 分数 10
输入一个嵌套列表,再输入层数,求该层的元素个数。
输入格式:
第一行输入列表,第二行输入层数。
输出格式:
在一行中输出元素个数。
输入样例:
[1,2,[3,4,[5,6],7],8]
3
输出样例:
2
dic={}
ls,n=eval(input()),int(input())
def f(ls,cnt):
for i in ls:
dic[cnt]=dic.get(cnt,0)+1
if isinstance(i,list):
f(i,cnt+1)
f(ls,1)
print(dic.get(n,0))
7-6 sdut-oop-8 分数四则运算 分数 10
定义类Fraction,在其中定义属性:numerator和denominator,分别表示分子和分母。
然定再定义两个分数的加、减、乘、除运算的方法。
在主类中输入2个分数,计算它们的四则运算结果。
提示:若用Python语言来实现,不必自行创建类,可直接使用 fractions模块处理分数的表示与运算。
输入格式:
第一行是整数N,表示待进行分数四则运算式子的数量。接下来包含N行输入。
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d为数字(每个数字保证在int类型范围内,为正数并且不存在正号)。o是运算符"+"或者"-","*",""。
输出格式:
对于每一行分数四则运算,输出一行计算结果。
注意:结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。
输入样例:
5
1/100+3/100
1/4-1/2
1/3-1/3
1/2*2/1
1/2\1/2
输出样例:
1/25
-1/4
0
1
1
from fractions import Fraction as f
n=int(input())
for i in range(n):
x=input()
if x.find('+')!=-1:
l=x.split('+')
print(f(l[0])+f(l[1]))
elif x.find('-') != -1:
l=x.split('-')
print(f(l[0])-f(l[1]))
elif x.find('*') != -1:
l=x.split('*')
print(f(l[0])*f(l[1]))
else:
l=x.split('\\')
print(f(l[0])/f(l[1]))
7-7 sdut-分数加减法 分数 10
编写一个程序,实现两个分数的加减法。
输入格式:
输入包含多行数据。
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
输出格式:
对于输入数据的每一行输出两个分数的运算结果。
注意:结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数。
输入样例:
在这里给出一组输入。例如:
1/8+3/8
1/4-1/2
1/3-1/3
输出样例:
在这里给出相应的输出。例如:
1/2
-1/4
0
from fractions import Fraction as f
try:
while True:
x=input()
if x.find('+')!=-1:
l=x.split('+')
print(f(l[0])+f(l[1]))
elif x.find('-')!=-1:
l=x.split('-')
print(f(l[0])-f(l[1]))
except Exception:
pass