python函数题
Posted zhying99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数题相关的知识,希望对你有一定的参考价值。
请大家严格按照下面顺序编写圆形生成器程序。 :
- 定义函数
getCircleArea(r)
,可以对指定r计算圆面积。计算公式math库的pi*r*r
。 - 定义函数
get_rList(n)
,功能:输入n个值放入列表并将列表return
。 - 输入n,调用get_rList(n)获得列表rList。
- 遍历rList,对每个元素调用getCircleArea,并按格式输出。
注意:需导入程序中所需要的库,并提交两个函数的定义。
函数接口定义:
getCircleArea(r) #r代表整数半径
get_rList(n) #n代表在函数中输入n个值放入列表。
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
rList = get_rList(n)
for e in rList:
print(‘:10.3f‘.format(getCircleArea(e)))
print(type(rList))
输入样例:
3
1
2
3
输出样例:
3.142
12.566
28.274
<class ‘list‘>
import math def getCircleArea(r): return math.pi*r*r def get_rList(n): l=[] for i in range(n): a=int(input()) l.append(a) return l n = int(input()) rList = get_rList(n) for e in rList: print(‘:10.3f‘.format(getCircleArea(e))) print(type(rList))
读取若干个点,每个点放入元组。并将所有点的点信息、点的类型、点与原点的距离打印出来。
函数接口定义:
readPoint() #从一行以,分隔的数中读取坐标,放入元组并返回
distance(point) #计算point与原点的距离并返回,要math库中的函数
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
for i in range(n):
p = readPoint()
print(‘Point = , type = , distance = :.3f‘.format(p,type(p),distance(p)))
输入格式:
输入n,代表底下要输入n行点坐标。坐标全部为整数。
点坐标x,y,z以,
分隔。坐标全部为整数。
注意:坐标以,
分隔,相应位置可能无字符或者包含多个空格字符,读入时按照0进行处理。
输出格式:
见输出样例
输入样例:
5
1,1,1
,,
2,,1
3,1,3
5,,
输出样例:
Point = (1, 1, 1), type = <class ‘tuple‘>, distance = 1.732
Point = (0, 0, 0), type = <class ‘tuple‘>, distance = 0.000
Point = (2, 0, 1), type = <class ‘tuple‘>, distance = 2.236
Point = (3, 1, 3), type = <class ‘tuple‘>, distance = 4.359
Point = (5, 0, 0), type = <class ‘tuple‘>, distance = 5.000
import math def readPoint(): #从一行以,分隔的数中读取坐标,放入元组并返回 a=input().split(‘,‘) for i in range(len(a)): try: if eval(a[i])>0: a[i]=int(a[i]) except: a[i]=0 return tuple(a) def distance(point): #计算point与原点的距离并返回,要math库中的函数 sum=0 for i in range(3): sum=sum+point[i]*point[i] return math.sqrt(sum) n = int(input()) for i in range(n): p = readPoint() print(‘Point = , type = , distance = :.3f‘.format(p,type(p),distance(p)))
在上题(1.计算坐标点欧氏距离)的基础上。将每个点根据距离原点的远近分成两类,一类是小于r的点,一类是大于等于r的点。
步骤如下:
- 调用
ClassifyPoints(points, r)
函数根据输入的半径r进行分类,将所有<r的点放入a列表,>=r的点放入b列表。然后将a,b列表以元组的方式返回赋值给pointsTuple
。 - 将
pointsTuple
直接输出。 - 调用
printPointsTuple(pointsTuple, r)
,将<r与>=r的点集合分情况输出,输出还需包含每个点集的平均距离。
函数接口定义:
readPoint() #从一行以,分隔的数中读取坐标,放入元组并返回。如果相应位置无数据,按0处理。
distance(point) #计算point与原点的距离并返回,要math库中的函数
ClassifyPoints(points, r): #根据r将points中的点分成两类放入两个列表,距离小于r与大于等于r。然后将两个列表以元组的形式返回
avgDistance(pointList): #计算列表pointList中的所有点到原点的平均距离,可利用distance(p)函数
printPointsTuple(psTuple, r): #将元组psTuple中的数据按照输出样例格式输出。输出顺序由psTuple中点列表的顺序决定。
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
r = int(input())
points = []
for i in range(n):
p = readPoint()
points.append(p)
print(‘Point = , type = , distance = :.3f‘.format(p,type(p),distance(p)))
pointsTuple = ClassifyPoints(points, r)
print("pointsTuple = ".format(pointsTuple))
printPointsTuple(pointsTuple,r)
输入格式:
输入n,代表底下要输入n行点坐标。点坐标x,y,z以,
分隔。坐标全部为整数。
输入r, 代表要以r作为分类依据。
注意:坐标以,
分隔,相应位置可能无字符或者包含多个空格字符,读入时按照0进行处理。
输出格式:
见输出样例。注意:= < >=
两侧均有一个空格,,
后面要有一个空格。printPointsTuple
中计算的平均距离保留3位小数。输出顺序由psTuple中点列表的顺序决定。
输入样例:
5
5
1,1,1
,,
2,3,5
3,1,3
5,,
输出样例:
Point = (1, 1, 1), type = <class ‘tuple‘>, distance = 1.732
Point = (0, 0, 0), type = <class ‘tuple‘>, distance = 0.000
Point = (2, 3, 5), type = <class ‘tuple‘>, distance = 6.164
Point = (3, 1, 3), type = <class ‘tuple‘>, distance = 4.359
Point = (5, 0, 0), type = <class ‘tuple‘>, distance = 5.000
pointsTuple = ([(1, 1, 1), (0, 0, 0), (3, 1, 3)], [(2, 3, 5), (5, 0, 0)])
distance < 5, avgDistance = 2.030, points = [(1, 1, 1), (0, 0, 0), (3, 1, 3)]
distance >= 5, avgDistance = 5.582, points = [(2, 3, 5), (5, 0, 0)]
import math def readPoint(): a=input().split(‘,‘) for i in range(len(a)): try: if eval(a[i])>0: a[i]=int(a[i]) except: a[i]=0 return tuple(a) def distance(point): sum=0 for i in range(3): sum+=point[i]**2 return math.sqrt(sum) def ClassifyPoints(points, r): a,b=[],[] for i in range(len(points)): if distance(points[i])<r: a.append(points[i]) else: b.append(points[i]) z=(a,b) return z def avgDistance(pointList): sum=0 for i in range(len(pointList)): sum+=distance(pointList[i]) return sum/len(pointList) def printPointsTuple(psTuple, r): print("distance < , avgDistance = :.3f, points = ".format(r,avgDistance(psTuple[0]),psTuple[0])) print("distance >= , avgDistance = :.3f, points = ".format(r,avgDistance(psTuple[1]),psTuple[1])) n = int(input()) r = int(input()) points = [] for i in range(n): p = readPoint() points.append(p) print(‘Point = , type = , distance = :.3f‘.format(p,type(p),distance(p))) pointsTuple = ClassifyPoints(points, r) print("pointsTuple = ".format(pointsTuple)) printPointsTuple(pointsTuple,r)
随机生成n个点并存入字典,每个点的坐标为(x, y),坐标x、y的取值范围是[0,10]之间的整数。
随机生成点的过程中可能会产生重复的点(两个点的坐标值一样),需记录该点生成的次数,如在
整个生成点的过程中生成了3个坐标为(2,1)的点,那么需将3作为点生成次数纪录下来。
最后在字典中查询3次点坐标,并返回查询结果。
建议:使用字典存储点。
思考:如何在此基础上使用蒙特卡洛方法计算圆周率。
步骤如下:
输入n代表要产生n个点
输入x代表随机数种子(注意:设置种子前需将x转化为整型)
- 调用
generatePoint(n)
函数生成n个点,每个点包含x,y坐标,将(x,y)存为元组,然后将该元组作为元素放入列表(可放重复的点坐标),并将该列表返回。 - 调用
createPointDict(pList)
将步骤1生成的点列表pList中的每个点放入字典pDict中,字典的键为点(元组),值为出现次数。 - 调用
doQuery(pDict, p):
在pDict中查询p,如果查到则输出点即出现次数,否则输出Not Found。
注意:需要导入random库
函数接口定义:
generatePoints(n) #产生n个2维坐标点放入列表并返回该列表
createPointDict(pList) #将pList中的节点加入字典并统计出现次数,然后返回字典
doQuery(pDict, p) #在pDict中查询p,如果查到则输出该点及其出现次数,否则输出‘Not Found‘。
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
seed(int(input()))
pList = generatePoints(n)
pDict = createPointDict(pList)
for i in range(3):#查询3次
x, y = [int(e) for e in input().split(‘,‘)]
doQuery(pDict, (x, y))
输入格式:
输入的n代表产生n个坐标点
输入x代表种子(x需转化为整型)
若干个行所要查找的坐标。
输出格式:
如果存在,输出 二维坐标点 = 出现次数
。注:二维坐标点以元组形式出现。
否则输出Not Found
输入样例:
10000
1
2,9
99,100
1,7
输出样例:
(2, 9) = 87
Not Found
(1, 7) = 75
from random import* import math def generatePoints(n): #产生n个2维坐标点放入列表并返回该列表 l=[] for i in range(n): x,y=randint(0,10),randint(0,10) z=(x,y) l.append(z) return l def createPointDict(pList): #将pList中的节点加入字典并统计出现次数,然后返回字典 s= for i in pList: if i in s: s[i]+=1 else: s[i]=1 return s def doQuery(pDict, p): #在pDict中查询p,如果查到则输出该点及其出现次数,否则输出‘Not Found‘。 if p in pDict: print(" = ".format(p,pDict[p])) else: print("Not Found") n = int(input()) seed(int(input())) pList = generatePoints(n) pDict = createPointDict(pList) for i in range(3):#查询3次 x, y = [int(e) for e in input().split(‘,‘)] doQuery(pDict, (x, y))
本题要求实现一个函数,判断参数是否是质数,是的话返回True,否则返回False
注意:函数中要有异常处理,如果参数不是整数,返回False
函数接口定义:
def isPrime(num)
裁判测试程序样例:
/* 请在这里填写答案 */
num=input()
if isPrime(num):
print(‘yes‘)
else:
print(‘no‘)
输入样例1:
ab
输出样例1:
no
输入样例2:
1.1
输出样例2:
no
输入样例3:
11
输出样例3:
yes
def isPrime(num): try: num=int(num) for i in range(2,num): if num%i==0: return False return True except: return False num=input() if isPrime(num): print(‘yes‘) else: print(‘no‘)
买单时,营业员要给用户找钱。营业员手里有10元、5元、1元(假设1元为最小单位)几种面额的钞票,其希望以
尽可能少(张数)的钞票将钱换给用户。比如,需要找给用户17元,那么其需要给用户1张10元,1张5元,2张1元。
而不是给用户17张1元或者3张5元与2张1元。
函数接口定义:
giveChange(money) #money代表要找的钱,为整数。该函数经过计算,然后按照格式"要找的钱 = x*10 + y*5 + z*1"直接输出。
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
for i in range(n):
giveChange(int(input()))
输入样例:
5
109
17
10
3
0
输出样例:
109 = 10*10 + 1*5 + 4*1 17 = 1*10 + 1*5 + 2*1 10 = 1*10 + 0*5 + 0*1 3 = 0*10 + 0*5 + 3*1 0 = 0*10 + 0*5 + 0*1
def giveChange(a): a10, a5, a1 = 0, 0, 0 a10 = a//10 a5 = (a%10)//5 a1 = (a%10)%5 print(" = *10 + *5 + *1".format(a, a10, a5, a1))
根据输入的n打印n行杨辉三角型。
函数接口定义:
printYanghui(n):#打印n行杨辉三角型
裁判测试程序样例:
/* 请在这里填写答案 */
n = int(input())
printYanghui(n)
输入格式:
输入n,转化为整数
输出格式:
每个数后面均有一个空格。
输入样例:
5
输出样例:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
def printYanghui(n): num=[] for i in range(n+1): num+=[[]] for j in range(n+1): num[i]+=[0] num[1][1]=1 for i in range(2,n+1): for j in range(1,n+1): num[i][j]=num[i-1][j]+num[i-1][j-1] for i in range(1,n+1): for k in range(n-i): print("",end=‘ ‘) for j in range(1,i+1): print(num[i][j],end=‘ ‘) print() n = int(input()) printYanghui(n)
编写程序统计1行字符串中:
- 不同字符的个数。
- 每种字符出现的次数。
函数接口定义:
Freq(line)
函数功能:该函数统计不同字符出现的次数,并最后按照字符升序进行输出。输出格式见输出样例。
参数说明:line为需要统计的字符串。
裁判测试程序样例:
/* 请在这里填写答案 */
line = input()
Freq(line)
输入样例:
abc 123 adex!!!
输出样例:
11
= 2
! = 3
1 = 1
2 = 1
3 = 1
a = 2
b = 1
c = 1
d = 1
e = 1
x = 1
输出格式说明:
- 第1行输出不同字符的个数。
- =两边应有空格。
- 上述输出样例中第2行的字符是空格。
- 输出按照字符升序排列。
def Freq(line):
words=line
s=
for i in words:
if i in s:
s[i]+=1
else:
s[i]=1
s=list(s.items())
print(len(s))
s.sort(key=lambda x:x[0])
for i in range(len(s)):
word,count=s[i]
print(" = ".format(word,count))
line = input()
Freq(line)
给定两个均不超过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): sum=0 for i in range(1,n+1): c=a for j in range(0,i-1): c=a+c*10 sum=sum+c return sum
使用函数求素数和
prime(p), 其中函数prime当用户传入参数p为素数时返回True,否则返回False. PrimeSum(m,n),函数PrimeSum返回区间[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): if p<=1: return False for i in range(2,p): if p%i==0: return False return True def PrimeSum(m,n): sum=0 for i in range(m,n+1): if prime(i): sum+=i return sum
本题要求实现一个统计整数中指定数字的个数的简单函数。
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,digit ): count=0 if number<0: number=-number while number>0: i=number%10 if i==digit: count+=1 number//=10 return count
本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加):
cos (x) = x^0 / 0! - x^2 / 2! + x^4 / 4! - x^6 / 6! + ?
函数接口定义:funcos(eps,x ),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。
函数接口定义:
函数接口:
funcos(eps,x ),返回cos(x)的值。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
/* 请在这里填写答案 */
eps=float(input())
x=float(input())
value=funcos(eps,x )
print("cos(0) = 1:.4f".format(x,value))
输入样例:
在这里给出一组输入。例如:
0.0001
-3.1
输出样例:
在这里给出相应的输出。例如:
cos(-3.1) = -0.9991
def funcos(eps,x ): sum=0 i=0 count=0 while True: c=1 for j in range(1,2*i+1): c=c*j if ((x**(2*i))/c)<eps: return sum break else: if count%2==0: sum=sum+(x**(2*i))/c else: sum=sum-(x**(2*i))/c i+=1 count+=1
本题要求实现一个计算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): if n==0 or n==1: return 1 else: return fib(n-1)+fib(n-2) def PrintFN(m,n): a=[] #for i in range(m,n+1): for j in range(26): if m<=fib(j)<=n: a.append(fib(j)) #print(a) return a
本题要求计算输入两个正整数x,y(x<=y,包括x,y)素数和。函数isPrime用以判断一个数是否素数,primeSum函数返回素数和。
输入格式:
输入两个整数。
输出格式:
[m-n]间的素数和
裁判测试程序样例:
/* 请在这里填写答案 */
x,y =map(int, input().split())
print(primeSum(x,y))
输入样例:
2 8
输出样例:
17
def isPrime(num): num=int(num) for i in range(2,num): if num%i==0 : return False return True def primeSum(a,b): sum=0 for i in range(a,b+1): if isPrime(i): sum+=i return sum
以上是关于python函数题的主要内容,如果未能解决你的问题,请参考以下文章