PTA5(python)

Python程序设计05-函数


1
6-1 使用函数求特殊a串数列和 (30 分)

给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和

函数接口定义:

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):
    fin = 0
    b = a
    for i in range(n):
        fin = fin + a
        a = a * 10 + b

    return  fin

2
6-2 使用函数求素数和 (20 分)

使用函数求素数和

prime§, 其中函数prime当用户传入参数p为素数时返回True,否则返回False. PrimeSum(m,n),函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数1<=m<n。

函数接口定义:
在这里描述函数接口:
prime§,返回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 PrimeSum(m,n):
    fin = 0
    def prime(p):
        for i in range(2,p):
            if p % i == 0:
                return False
        return True
    for i in range(m,n + 1):
        if prime(i) == True:
            fin = fin + i
    if m == 1:
        fin = fin - 1
    return fin

3
6-3 使用函数统计指定数字的个数 (20 分)

本题要求实现一个统计整数中指定数字的个数的简单函数。

CountDigit(number,digit )

其中number是整数,digit为[1, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。

函数接口定义:
在这里描述函数接口。例如:
CountDigit(number,digit ),返回digit出现的次数
裁判测试程序样例:

/* 请在这里填写答案 */

number,digit=input().split()
number=int(number)
digit=int(digit)
count=CountDigit(number,digit )
print(“Number of digit 2 in “+str(number)+”:”,count)
输入样例:
在这里给出一组输入。例如:

-21252 2
输出样例:
在这里给出相应的输出。例如:

Number of digit 2 in -21252: 3

def CountDigit(number,gigit):
    n = 0
    alist = []
    if number < 0:
        number = abs(number)
    while number:
        alist.append(int(number % 10))
        number = number // 10
    for i in range(len(alist)):
        if alist[i] == gigit:
            n = n + 1
    return n

4
6-4 使用函数输出指定范围内Fibonacci数的个数 (20 分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目。 所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,fib(0)=fib(1)=1。其中函数fib(n)须返回第n项Fibonacci数;函数PrintFN(m,n)用列表返回[m, n]中的所有Fibonacci数。

函数接口定义:
在这里描述函数接口。例如:
fib(n),返回fib(n)的值
PrintFN(m,n),用列表返回[m, n]中的所有Fibonacci数。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
/* 请在这里填写答案 */

m,n,i=input().split()
n=int(n)
m=int(m)
i=int(i)
b=fib(i)
print(“fib({0}) = {1}”.format(i,b))
fiblist=PrintFN(m,n)
print(len(fiblist))
输入样例:
在这里给出一组输入。例如:

20 100 6
输出样例:
在这里给出相应的输出。例如:

fib(6) = 13
4

def fib(n):
    a = 0
    b = 1
    c = a + b
    for i in range(n-1):

        a = b
        b = c
        c = a + b
    return c

def PrintFN(m,n):
    alist = []
    i = 1
    while fib(i) < m:
        i = i + 1

    j = i
    while fib(j) <= n:
        j = j + 1


    for m in range(i,j):
        alist.append(fib(m))

    return alist

5
6-5 汉诺塔问题 (15 分)

汉诺塔问题求解:有三根相邻的柱子,假设标号分别为A、B、C,其中A柱子从下到上按金字塔状依次叠放了N个不同大小的圆盘,现要把A柱子上的所有圆盘一次一个地移动到C柱子上,移动的过程中可以借助B柱子做中转,并且每根柱子上的圆盘必须始终保持上小下大的叠放顺序。编写一个函数,输出移动轨迹(提示:用递归函数)

在这里插入图片描述

函数接口定义:
函数接口:
hanoi(n,a,b,c),print移动轨迹并统计移动次数
n表示要移动的圆盘个数,a,b,c为三根柱子名称,表示将盘子从a移动到c,b为中转柱。
裁判测试程序样例:
测试样例:
n=int(input())
step=0
hanoi(n,‘A’,‘B’,‘C’)
print(‘共移动次数:’,step)
输入样例1:
输入n(1<=n<=5):

1
输出样例1:
在这里给出相应的输出。例如:

A -> C
共移动次数: 1
输入样例2:
输入n(1<=n<=5):

3
输出样例2:
在这里给出相应的输出。例如:

A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
共移动次数: 7

count = 0


def hanoi(n, a, b, c):
    global count  # 声明全局变量
    global step
    if n == 1:  # 1个环的情况,也是递归的出口
        print(a, '->', c)  # 第一个环的移动情况
        count = count + 1  # 次数+1
        step = count
    else:  # n > 1时,用抽象出的3步来移动
        hanoi(n - 1, a, c, b)  # 将(n-1个环)从a移动到b上
        print(a, '->', c)  # 将底盘从a移动到c上
        count = count + 1  # 第n个环的移动情况
        hanoi(n - 1, b, a, c)  # 将b上的(n-1个环)移动到c

        step = count




n=int(input())
step=0
hanoi(n,'A','B','C')
print('共移动次数:',step)


6
6-6 兔子繁殖 (15 分)

兔子繁殖问题。假设有一对新生的兔子,从第三个月开始他们每个月月初都生一对兔子,新生的兔子从第三个月月初开始又每个月又生一对兔子。按此规律,并假定兔子没有死亡,n(n<=20)个月月末共有多少对兔子?

函数接口定义:
函数接口:
rabit(n),n为第几个月
裁判测试程序样例:
n=int(input())
print(rabit(n))
输入样例1:
在这里给出一组输入。例如:

3
输出样例1:
在这里给出相应的输出。例如:

2
输入样例2:
在这里给出一组输入。例如:

5
输出样例2:
在这里给出相应的输出。例如:

5

def rabit(n):
    a = 0
    b = 1
    c = 0
#这题就是费波纳茨数列
    for i in range(n):
        a = b
        b = c
        c = a + b
    return c

7
6-7 成绩绩点计算 (10 分)

假设某大学的成绩绩点计算规则为:90分(含)以上计4.5分,80分(含)-90分(不含)计3分,70分(含)-80分(不含)计1.5分,60分(含)-70分(不含)计1分,60分以下不计分。输入某位同学的各门课成绩,请编写一个函数,打印该同学的平均绩点(保留2位小数)。

函数接口定义:
函数接口描述:
GPA(参数…)
裁判测试程序样例:
lst=list(map(eval,input().split()))
GPA(*lst)
输入样例1:
在这里给出一组输入。例如:

90 95 87
输出样例1:
在这里给出相应的输出。例如:

4.00
输入样例2:
在这里给出一组输入。例如:

60 73 88 59
输出样例2:
在这里给出相应的输出。例如:

1.38

def GPA(*lst):
    fin = 0
    av = 0
    for i in range(len(lst)):
        if lst[i] >= 90:
            fin = fin + 4.5
        elif lst[i] >=80 and lst[i] < 90:
            fin = fin + 3
        elif lst[i] >= 70 and lst[i] < 80:
            fin = fin + 1.5
        elif lst[i] >= 60 and lst[i] < 70:
            fin = fin + 1
        else:
            fin = fin + 0
    av = fin / len(lst)
    print("{:.2f}".format(av))

8
6-8 求嵌套列表的平均值 (30 分)

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(lst):
    blst = []
    for i in range(len(lst)):
        fin = 0
        avg = 0

        for j in range(len(lst[i])):
            fin = fin + lst[i][j]
        avg = fin / len(lst[i])
        blst.append(avg)
    return blst

9
6-9 求多项式的值 (30 分)

一元多项式可以用列表表示。如p(x)=1+3x+9x
​4
​​ ,可以表示成列表[1,3,0,0,9]。输入列表表示的多项式和x的值,求多项式的值。

函数接口定义:
在这里描述函数接口。例如:
value(lst,x)
lst表示多项式,x代表具体的值。

裁判测试程序样例:
/* 请在这里填写答案 */

lst=eval(input())
y=float(input())
print("{:.1f}".format(polyvalue(lst,y)))
输入样例:
在这里给出一组输入。例如:

[1,3,0,0,9]
1
输出样例:
在这里给出相应的输出。例如:

13.0

def polyvalue(lst,y):
    fin = lst[0] 
    x = y
    for i in range(1,len(lst)):
        j = i
        fin = fin + lst[i] * y
        y = y * x

    return fin

10
6-10 jmu-python-函数-找钱 (10 分)

买单时,营业员要给用户找钱。营业员手里有10元、5元、1元(假设1元为最小单位)几种面额的钞票,其希望以
尽可能少(张数)的钞票将钱换给用户。比如,需要找给用户17元,那么其需要给用户1张10元,1张5元,2张1元。
而不是给用户17张1元或者3张5元与2张1元。

函数接口定义:
giveChange(money) #money为要找的钱。经过计算,应按格式"要找的钱 = x10 + y5 + z1"输出。
裁判测试程序样例:
/
请在这里填写答案 /
n = int(input())
for i in range(n):
giveChange(int(input()))
输入样例:
5
109
17
10
3
0
输出样例:
109 = 10
10 + 15 + 41
17 = 110 + 15 + 21
10 = 1
10 + 05 + 01
3 = 010 + 05 + 31
0 = 0
10 + 05 + 01

def giveChange(money):
    shi = int(money / 10)
    if money % 10 == 0:
        print("{} = {}*10 + 0*5 + 0*1".format(money, shi))
    else:
        sh = money - (shi * 10)
        wu = int(sh / 5)
        if sh % 5 == 0:
            print("{} = {}*10 + {}*5 + 0*1".format(money, shi, wu))
        else:
            eng = int((money - (shi * 10) - (wu * 5)))
            yi = int(eng / 1)
            print("{} = {}*10 + {}*5 + {}*1".format(money, shi, wu, yi))

11
6-11 人民币美元双向兑换 (10 分)

本题要求实现一个人民币与美元的双向兑换函数change(money),可实现1美元=6.709人民币的双向兑换。输出兑换的结果保留2位小数。

函数接口定义:
在这里描述函数接口。例如:
change( money )
其中 money都是用户传入的参数,表示待兑换的钱数。

裁判测试程序样例:
/* 请在这里填写答案 */

x = input()

change(x)

输入样例1:
在这里给出一组输入。例如:

$1
输出样例1:
在这里给出相应的输出。例如:

1美元 = 6.71人民币
输入样例2:
在这里给出一组输入。例如:

¥1
输出样例2:
在这里给出相应的输出。例如:

1人民币 = 0.15美元

def change(money):
    money = money.strip()
    if '$' in money:
        mei = eval(money[1:])
        print("{}美元 = {:.2f}人民币".format(mei,mei * 6.709))
    else:
        ren = eval(money[1:])
        print("{}人民币 = {:.2f}美元".format(ren,ren / 6.709))

12
6-12 平均成绩和等级 (15 分)

输入五个考试分数,输出对应的等级和平均分,分级规则见下表。在程序中编写2个函数: cal_average(g1,g2,g3,g4,g5)和cal_grade(g)。

在这里插入图片描述

函数接口定义:
cal_average(g1,g2,g3,g4,g5)。参数g1,g2,g3,g4,g5接受五门课的成绩,并返回分数的平均值。
cal_grade(g)。参数g接受一个考试分数作为参数,并返回成绩等级。
裁判测试程序样例:
/* 请在这里填写答案 */

n0,n1,n2,n3,n4=map(eval,input().split())

print(cal_average(n0,n1,n2,n3,n4))

for i in range(5):
n=eval(‘n’+str(i))
print(cal_grade(n))
输入样例:
在这里给出一组输入。例如:

66 77 88 99 55
输出样例:
在这里给出相应的输出。例如:

77.0
D
C
B
A
F

def cal_grade(g):
    if g >= 90:
        return 'A'
    elif g >= 80 and g <= 89:
        return 'B'
    elif g >= 70 and g <= 79:
        return 'C'
    elif g >= 60 and g <= 69:
        return  'D'
    else:
        return 'F'


def cal_average(g0,g1,g2,g3,g4):
    fin = int(g0) + int(g1) + int(g2) + int(g3) + int(g4)
    return fin / 5

13
7-1 最短跑道长度(高教社,《Python编程基础及应用》习题3-12 (3 分)

假设某飞机的加速度是a,起飞的速度是v,下述公式可以计算出该飞机起飞所需的最短跑道长度: L = v2/(2a)。编写一个程序,提示用户输入起飞速度v(m/s)和加速度a(m/s2),计算飞机起飞的最短跑道长度,输出时保留2位小数。计算过程宜封装成一个函数,该函数接受参数v和a,返回计算所得的L。

输入样例:
在这里给出一组输入。例如:

100
5
输出样例:
在这里给出相应的输出。例如:

最短跑道长度为:1000.00
提示:本题中的冒号均为英文冒号。

def prime(v,a):
    l = (v ** 2) / (2 * a)
    return l


v = int(input())
a = int(input())
print("最短跑道长度为:{:.2f}".format(prime(v,a)))

14
7-2 重复元素查找 (100 分)

每一个列表中只要有一个元素出现两次,那么该列表即被判定为包含重复元素。

编写程序:对n行字符串进行处理,一行字符串构成一个列表。程序判定每一个列表中是否包含重复元素。最后统计包含重复元素的行数与不包含重复元素的行数。

输入格式:
输入n,代表接下来要输入n行字符串。

然后输入n行字符串,字符串之间的元素以空格相分隔。

输出格式:
True=包含重复元素的行数

False=不包含重复元素的行数

输入样例:
5
1 a 3 c 5
a 3 c 5 d
b 2 3 b 1
x 2 w 2 w
a 1 1 1 1
输出样例:
True= 3
False= 2

def prime(alist):
    alist = list(alist)
    for line in alist:
        if alist.count(line) > 1:
            return True
    return False



data = int(input())
blist = []
for i in range(data):
    alist = input().strip("\n").split()
    blist.append(prime(alist))


print("True= {}".format(blist.count(True)))
print("False= {}".format(blist.count(False)))

15
7-3 大型田字格 (10 分)
设计程序,输入n,输出n×n的田字格。

输入格式:
输入一个0~10之间的整数,n∈[0,10]

输出格式:
使用print函数输出“+”、“-”、“|”以及空格组成的田字格图形(每个方格由四个‘+’号,水平),如输入为0,什么也不输出。

输入样例:
在这里给出一组输入。例如:

1
输出样例:
在这里给出相应的输出。例如:

在这里插入图片描述

输入样例:
在这里给出一组输入。例如:

4
输出样例:
在这里给出相应的输出。例如:

在这里插入图片描述

data = int(input())

if data == 0:
    pass

else:
    for i in range(data):
            print("+ - - - - "*data+"+")
            print("|         "*data+"|")
            print("|         "*data+"|")
            print("|         " * data + "|")
            print("|         " * data + "|")

    print("+ - - - - "*data+"+")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值