sdut-python-实验五-函数、模块、包(编程题)
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 permutations
n=int(input())
for s in permutations(range(1,1+n)):
for i in str(s):
if i.isdigit():
print(i,end="")
print()
7-3 sdut-列表数字元素加权和(2)
分数 10
作者 周雪芹
单位 山东理工大学
输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。
第一层每个元素 的值为:元素值*1,第二层每个元素的值为:元素值*2,第三层每个元素的值为:元素值*3, ...,以此类推!
输入格式:
在一行中输入列表。
输出格式:
在一行中输出元素加权之和。
输入样例:
[1,2,[3,4,[5,6],7],8]
输出样例:
72
实现代码:
def fun(l,d):
sum = 0
for i in l:
if isinstance(i,int):
sum+=i*d
elif isinstance(i,list):
sum+=fun(i,d+1)
return sum
l=eval(input())
d=1
print(fun(l,d))
7-4 sdut-列表或元组的数字元素求和(yeild)
分数 10
作者 周雪芹
单位 山东理工大学
求列表中数字和,列表中嵌套层次不限。
输入格式:
在一行中输入列表或元组。
输出格式:
在一行中输出数字的和。
输入样例:
[11,2,[3,7],(68,-1),"123",9]
输出样例:
99
实现代码:
def fun(l):
sum=0
for i in l:
if isinstance(i,int):
sum+=i
elif isinstance(i,list):
sum+=fun(i)
elif isinstance(i,tuple):
sum+=fun(i)
return sum
l=eval(input())
print(fun(l))
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
实现代码:
n=int(input())
t=n//2
l=[]
l0=[]
l1=[]
while n:
n-=1
x,y=map(str,input().split())
l.append(y)
x=int(x)
if x==0:
l0.append(y)
else:
l1.append(y)
a=b=0
for i in range(t):
if l[i] in l0:
print(l[i],l1[t-1-a])
a+=1
else:
print(l[i], l0[t-1 - b])
b += 1
7-7 sdut-求指定层的元素个数
分数 10
作者 周雪芹
单位 山东理工大学
输入一个嵌套列表,再输入层数,求该层的元素个数。
输入格式:
第一行输入列表,第二行输入层数。
输出格式:
在一行中输出元素个数。
输入样例:
[1,2,[3,4,[5,6],7],8]
3
输出样例:
2
实现代码:
def fun(l,n,d):
sum=0
if n==d:
return len(l)
else:
for i in l:
if isinstance(i,list):
sum+=fun(i,n,d+1)
return sum
l=eval(input())
n=int(input())
d=1
print(fun(l,n,d))
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
n=int(input())
while n:
n-=1
s=input()
if '+' in s:
x,y=s.split('+')
print(Fraction(x)+Fraction(y))
elif '-' in s:
x, y =s.split('-')
print(Fraction(x) - Fraction(y))
elif '*' in s:
x, y = s.split('*')
print(Fraction(x) * Fraction(y))
elif '\\' in s:
x, y = s.split('\\')
print(Fraction(x) / Fraction(y))
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
while True:
try:
s=input()
if '+' in s:
x,y=s.split('+')
print(Fraction(x)+Fraction(y))
else:
x, y = s.split('-')
print(Fraction(x) - Fraction(y))
except:
break更多推荐


所有评论(0)