SDUT-python实验五 函数题+编程题

函数题

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

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值