乐学Python作业题参考
目录
- 乐学Python作业题参考
- 前言
- 第1周
- 第1题
- 第2周
- 第1题
- 第3周
- 第1题
- 第4周
- 第1题
- 第2题
- 第3题
- 第5周
- 第1题
- 第2题
- 第3题
- 第6周
- 第1题
- 第2题
- 第3题
- 第7周
- 第1题
- 第2题
- 第3题
- 第8周
- 第1题
- 第2题
- 第3题
- 第9周
- 第1题
- 第2题
- 第3题
- 第10周
- 第1题
- 第2题
- 第3题
前言
本文主要记录中国MOOC课程《乐学Python》的作业答案,仅供参考
提示:以下是本篇文章正文内容
第1周
第1题
根据用户输入的半径计算圆面积并输出。
注意:
1.input语句中不要添加任何提示文字
2.计算时使用math库的pi值
3.结果保留两位小数(使用round函数)(10分)
#引入math库
#输入半径
#计算圆面积
#输出圆面积
import math
r = eval(input())
area = math.pi*(r**2)
print(round(area, 2))
第2周
第1题
试编写程序,实现以下功能:
编程程序,实现日期的格式转换,要求如下:
1、接收由用户输入的日期,格式例如:1/2/2019 (月/日/年)
2、从用户输入的字符串中提取年、月、日
3、将年月日重新组合,以要求的形式进行输出,例如:2019-01-02,其中月日均占两个字符的宽度,不足两位的左边补0。注意:输出文本中的冒号要为英文字符。
可参照以下程序进行补全:
date=_______________________ #输入日期,格式如:1/2/2019 (月/日/年)
i=_______________________ #利用index方法获取字符串中第一个’/‘的正向索引
month=_______________________ #提取月份,例如’1/2/2019’ 中的’1’
j=_______________________ #利用rindex方法获取字符串中最后一个’/‘的正向索引
day=_______________________ #提取日,例如’1/2/2019’ 中的’2’
year=_______________________ #提取年份,例如’1/2/2019’ 中的’2019’
print(’_____________’.format(______________)) #输出日期,格式例如:2019-01-02(10分)
date = input() #输入日期,格式如:1/2/2019 (月/日/年)
i = date.index('/') #利用index方法获取字符串中第一个'/'的正向索引
month = date[0:i] #提取月份,例如'1/2/2019' 中的'1'
j = date.rindex('/') #利用rindex方法获取字符串中最后一个'/'的正向索引
day = date[i+1:j] #提取日,例如'1/2/2019' 中的'2'
year = date[j+1:] #提取年份,例如'1/2/2019' 中的'2019'
print('{}-{:0>2}-{:0>2}'.format(year, month, day)) #输出日期,格式例如:2019-01-02(10分)
第3周
第1题
试编写程序实现以下功能:
1、接收由用户输入的分数(假设为整数)
2、根据以下规则输出相应的内容:
如果分数大于等于90且小于等于100,输出’Excellent’
如果分数大于等于80且小于90,输出’Good’
如果分数大于等于60且小于80,输出’Passed’
如果分数大于等于0且小于60,输出’Failed’
如果分数大于100或者小于0,输出’Error’(20分)
n = eval(input()) # 输入分数
if n > 100 or n < 0: # 判断分数是否超出范围
print('Error')
else:
if n >= 90 and n <= 100:
print('Excellent')
elif n >= 80:
print('Good')
elif n >= 60:
print('Passed')
else:
print('Failed')
第4周
第1题
试编写程序,计算给定范围内的所有整数之和。(注:给定范围为闭区间)(10分)
请选择以下任一程序框架进行补全(注意缩进对齐):
while结构:
a,b=________________ #输入a和b的值,输入时格式例如:1,10 (注意此处逗号为英文字符)
i=__________________ #设置循环变量的初始值
s=__________________ #给存放和的变量设置初始值
while _______________ #设置循环条件
_______________ #累加求和
_______________ #改变循环变量的值
____________________ #输出结果
for结构:
a,b=________________ #输入a和b的值,输入时格式例如:1,10 (注意此处逗号为英文字符)
s=__________________ #给存放和的变量设置初始值
for__________________ #设置循环变量的范围
_________________ #累加求和
____________________ #输出结果
# while结构:
try:
a,b=input().strip().split(",") #输入a和b的值,输入时格式例如:1,10 (注意此处逗号为英文字符)
i=eval(a) #设置循环变量的初始值
s=0 #给存放和的变量设置初始值
while i<=eval(b): #设置循环条件
s+=i #累加求和
i+=1 #改变循环变量的值
print(s) #输出结果
except:
print("输入错误")
# -------------------!!!两种方法选择一种即可!!!------------------------
# for结构:
# try:
# a,b=input().strip().split(",") #输入a和b的值,输入时格式例如:1,10 (注意此处逗号为英文字符)
# s=0 #给存放和的变量设置初始值
# for i in range(eval(a),eval(b)+1) #设置循环变量的范围
# s+=i #累加求和
# print(s) #输出结果
# except:
# print("输入错误")
第2题
试编写程序,使用循环结构实现以下功能:
1、接收用户依次输入的五个整数(可以是负数)
2、计算这五个整数的乘积,并将结果输出(10分)
请选择以下任一程序框架进行补全:
while结构:
i=______________ #设置循环变量的初始值
s=_____________ #设置存放乘积的变量的初始值
while_____________ #设置循环条件
_______________ #接收用户新输入的整数
_______________ #计算当前乘积变量的值
_______________ #改变循环变量的值
_________________ #输出结果
for结构:
s=_____________ #设置存放乘积的变量的初始值
for _____________ #设置循环变量的范围
_______________ #接收用户新输入的整数
_______________ #计算当前乘积变量的值
_________________ #输出结果
s=1 #设置存放乘积的变量的初始值
for i in range(5): #设置循环变量的范围
n= eval(input()) #接收用户新输入的整数
s*=n #计算当前乘积变量的值
print(s) #输出结果
第3题
试编写程序,使用穷举法计算两个给定正整数的最大公约数。(10分)
可参照以下程序框架进行补全:
a=____________ #输入一个正整数
b=____________ #输入另一个正整数
if a>b:
____________ #交换a和b,使a的值小于b的值
i=_____________ #设置循环变量的初始值
while _____________ #设置循环条件
if _______________ #判断当前循环变量的值是否为公约数
_______________ #输出当前循环变量的值
_______________ #结束当前循环
_________________ #改变循环变量的值
a=eval(input()) #输入一个正整数
b=eval(input()) #输入另一个正整数
if a>b:
a,b=b,a #交换a和b,使a的值小于b的值
i=a #设置循环变量的初始值
while i<=a: #设置循环条件
if a%i==0 and b%i==0: #判断当前循环变量的值是否为公约数
print(i) #输出当前循环变量的值
break #结束当前循环
i-=1 #改变循环变量的值
第5周
第1题
假设有三个列表:
lst_name=[‘Tommy’,‘Joyce’,‘Dora’],
lst_number=[‘two’,‘three’,‘four’],
lst_fruit=[‘apples’,‘bananas’,‘pears’],
试编写程序,由用户依次输入三个整数(均在[0,2]范围内),将其分别作为索引依次访问三个列表中对应的元素并进行造句。(10分)
lst_name=['Tommy','Joyce','Dora']
lst_number=['two','three','four']
lst_fruit=['apples','bananas','pears']
i=eval(input())
j=eval(input())
k=eval(input())
print('{} has {} {}.'.format(lst_name[i],lst_number[j],lst_fruit[k]))
第2题
试编写程序,实现以下功能:
1、接收由用户输入的分数列表
提示:已知表达式a=eval(input()),当用户输入为’[70,87,90]'时,a获取的值为[70,87,90]
2、将列表中的分数去掉一个最低分和一个最高分(最低分如有相同,仅删除一个;最高分如有相同,也仅删除一个)
提示:可先将列表排序,然后通过索引访问获取最高分和最低分。也可以直接通过max和min函数获取最高分和最低分。
3、计算列表中剩余分数的平均分,并将结果输出,输出时使用format方法保留一位小数。
注意:假设用户输入的分数大于等于三个(10分)
lst_score=eval(input()) #输入分数列表
max_score=max(lst_score) #获取最高分
min_score=min(lst_score) #获取最低分
lst_score.remove(max_score) #删除最高分
lst_score.remove(min_score) #删除最低分
count=len(lst_score) #计算剩余分数个数
s=sum(lst_score) #计算剩余分数总分
print('{:.1f}'.format(s/count)) #输出平均分,结果保留一位小数
第3题
试编写程序,完成以下功能:
1、接收由用户输入的一个英文句子(假设没有任何标点符号,仅由单词和空格组成)
2、接收由用户输入的一个字符,比如’/’,‘-’等
3、从英文句子中提取所有的单词,放入一个列表中
4、使用用户输入的字符作为分隔符,将列表中的每个单词重新连接成一个字符串,并输出。(10分)
s=input().strip()#输入英文句子
c=input()#输入一个字符
lst=s.split() #从英文句子中提取单词放入列表(字符串的split方法)
result=c.join(lst)#使用字符c作为分隔符,将列表中的单词连接成一个新的字符串(字符串的join方法)
print(result)#将结果输出
第6周
第1题
已知列表 lst 用于存放学生的姓名和分数,试编写程序,实现以下功能:
1、依次由用户输入五个学生的姓名和分数(假设姓名没有重复,且分数为整数),并依次将他们组成一个元组添加至列表中。
添加完成后列表格式例如:[ (‘Tom’,90), (‘Mary’,88), (‘John’,89), (’Jack‘,78), (‘Dora’,99) ]
2、根据用户输入的姓名查询分数,如姓名存在,直接将分数输出,否则输出文本‘error’。(10分)
lst=[] #创建空列表
for i in range(5): #设置循环次数
name=input() #输入姓名
score=eval(input()) #输入分数
lst.append((name, score)) #将新输入的姓名和分数组成一个元组,添加至列表中
name_query=input() #输入待查询的姓名
for i in range(5): #遍历列表
if name_query == lst[i][0]: #判断待查询的姓名是否在当前列表元素中
print(lst[i][1]) #输出分数
break #结束循环
else:
print("error")
第2题
已知列表 lst=[1, 8, 4, 10, 20, 12] ,试编写程序,将用户输入的一个整数添加至列表合适的位置。即:将待添加的整数添加至列表中从最左边开始第一个值大于该数的元素之前;如果原列表中没有一个数比待添加的整数大,则将该整数添加至列表末尾。最后将添加新元素之后的列表进行输出。(10分)
lst=[1, 8, 4, 10, 20, 12]
n=eval(input()) #输出一个整数
k=len(lst) #计算列表的长度
for i in range(k): #生成索引序列,用于遍历列表元素
if lst[i]>n: #判断当前元素的值是否大于待添加的整数
lst.insert(i, n) #将待添加的整数添加至当前元素之前
break #立即结束整个循环
else:
lst.append(n)
print(lst)
第3题
已知列表 lst=[ (‘fox’,9), (‘dog’,18), (‘cat’,12) ],存放了各种动物的数量。试编写程序,由用户输入一个新的动物的名称和数量,将其添加至列表中,找出列表中数量最多的动物,将其名称输出。
提示:当使用max函数对形如a=[ (2,4),(3,5),(1,6) ]这样的嵌套列表进行计算时,其比较的是列表中每个元素的第一个值。即max(a)的结果为(3,5)(10分)
lst=[('fox',9), ('dog',18), ('cat',12)]
name=input() #输入动物名称
count=eval(input()) #输入动物数量
lst.append((name, count)) #将输入的动物名称和数量添加至列表中
lst1=[(cell[1],cell[0]) for cell in lst] #利用列表生成式将列表lst中每个元组中的的名称和数量交换顺序
max_animal=max(lst1)[1] #计算lst1中值最大的元素
print(max_animal) #输出数量最大的动物名称
第7周
第1题
已知字典 dic={‘Tommy’:‘123’, ‘Dora’:‘456’, ‘Joyce’:‘789’},存放了某系统所有合法的用户名和密码。试编写程序,判断用户输入的用户名和密码是否合法,并输出相应的提示信息。(10分)
dic={'Tommy':'123', 'Dora':'456', 'Joyce':'789'}
user=input() #输入用户名
password=input() #输入密码
if user not in dic: #判断用户名是否存在
print("unknown username")
elif dic[user]==password: #判断密码是否正确
print("correct")
else:
print("bad password")
第2题
试编写程序,完成以下功能:
1、依次录入五名同学的姓名及成绩,并将其加入字典中,将姓名作为键,成绩作为值。假设用户输入的姓名均不重复且成绩为整数。
2、根据用户输入的学生姓名,在字典中查询相应的成绩并输出。如学生不存在,输出‘error’(10分)
dic={} #创建空字典
for i in range(5): #设置循环次数
name=input() #输入姓名
score=eval(input()) #输入成绩
dic[name]=score #将姓名和成绩组成的键值对加入字典
name_query=input() #输入待查询的学生姓名
if name_query in dic: #判断姓名在字典中是否存在
print(dic[name_query])
else:
print('error')
第3题
试编写程序,完成以下功能:
1、接收用户输入的一个列表
2、对列表中相同元素的出现次数进行统计,并将统计结果加入字典dic中
假设输入的列表为:[1,2,1,2,3,2,2,4,4],则统计后dic的内容应该形如:{1:2, 2:4, 3:1, 4:2}
3、根据用户输入的表达式,在字典dic中查询相应的值并输出。例如:
用户输入 dic[1],输出为2
用户输入 dic[3],输出为1
假设表达式中给定的键在字典中一定存在。(10分)
lst=eval(input()) #输入一个列表
dic={} #创建空字典
for i in lst: #遍历列表元素
if i in dic: #判断该元素是否已在字典中存在相应的键
dic[i]=dic[i]+1
else:
dic[i]=1
query_expression=eval(input()) #输入表达式
print(query_expression) #根据表达式在字典中查询相应的值并输出
第8周
第1题
已知字典 dic={ ‘apple’:6, ‘orange’:5, ‘banana’:3, ‘pear’:8, ‘watermelon’:10} ,存放了水果的名称和价格。试编写程序,实现以下功能:
1、接收用户输入的价格(假设为整数)
2、计算 高于用户输入价格 的所有水果的总价(10分)
dic={'apple':6,'orange':5,'banana':3,'pear':8,'watermelon':10}
price=eval(input()) #输入价格
s=0
for value in dic.values(): #遍历字典
if value > price: #判断当前水果的价格是否高于用户输入的价格
s+=value
print(s) #输出结果
第2题
已知字典 dic={ ‘Tommy’:[92,90,100], ‘Joyce’:[99,100], ‘Dora’:[100,98,95,99], ‘Akili’:[100,99,100,98,99], ‘Alisa’:[98,98,97]} ,存放了学生的姓名及其所有选修课程的成绩。试编写程序,实现以下功能:
1、接收用户输入的分数(假设为整数)
2、筛选出总分高于用户输入分数的学生姓名,一行一个(按照姓名的编码值进行升序排列)(10分)
dic={ 'Tommy':[92,90,100], 'Joyce':[99,100], 'Dora':[100,98,95,99], 'Akili':[100,99,100,98,99],'Alisa':[98,98,97]}
score=eval(input()) #输入分数
lst=[] #创建空列表
for key,value in dic.items(): #遍历字典
if sum(value)>score: #判断当前学生的总分是否高于用户输入的分数
lst.append(key) #将符合条件的当前学生的姓名添加至列表lst中
lst.sort() #对列表进行排序
for name in lst: #遍历列表
print(name) #输出姓名
第3题
已知字典 dic={‘801’:{1:‘Tommy’,2:‘Thomas’,3:‘Jack’,4:‘Ben’},‘303’:{1:‘Joyce’,2:‘Dora’,3:‘Akili’,4:‘Anni’},‘506’:{1:‘Alisa’,2:‘Monica’,3:‘Joan’,4:‘Ada’}},存放了一个班所有学生的宿舍分配情况,其中宿舍号作为键,其对应的值也是一个字典(键为床位号,值为对应的学生姓名)。试编写程序,根据用户输入的学生姓名,查询其宿舍号及床位号,如果学生不存在,则返回’error’。(10分)
dic={'801':{1:'Tommy',2:'Thomas',3:'Jack',4:'Ben'},'303':{1:'Joyce',2:'Dora',3:'Akili',4:'Anni'},'506':{1:'Alisa',2:'Monica',3:'Joan',4:'Ada'}} #初始化字典元素
name=input() #输入学生姓名
for dormitory_number,small_dic in dic.items(): #遍历字典
for bed_number,student_name in small_dic.items(): #对当前宿舍号对应的小字典进行遍历
if name==student_name: #判断姓名是否吻合
print('{}-{}'.format(dormitory_number, bed_number)) #输出相应的宿舍号及床位号,格式为:宿舍号-床位号
break #结束当前for循环
else:
continue #如果在当前宿舍中未找到该学生的信息,则继续查找下一个宿舍
break
else:
print('error')
第9周
第1题
试编写程序,完成以下功能:
1、定义一个函数:判断给定的一个整数是否是素数,是素数返回True,不是素数返回False
2、输出用户指定范围内的所有素数。具体输入输出格式见样例。(10分)
def is_prime(n): #定义函数,判断给定的整数是否为素数
for i in range(2,n):
if n%i==0:
return False
return True
m=eval(input()) #输入范围起始值,为整数
n=eval(input()) #输入范围结束值,为整数
for i in range(m,n+1): #遍历给定范围内的所有整数
if is_prime(i): #调用函数判断当前整数是否为素数
print(i)
第2题
试编写程序,完成以下功能:
1、定义一个函数(函数名为f):计算给定的两个正整数的最小公倍数
2、根据用户输入的函数调用表达式直接输出结果,具体输入输出格式见样例。(10分)
def f(m, n): #定义函数,计算给定的两个正整数的最小公倍数,并将其返回
if m>n:
m,n=n,m #交换m和n的值,使n的值大于m的值
i=n
while True:
if i%n==0 and i%m==0: #判断当前i的值是否是m和n的公倍数
return i #返回当前i的值
i+=1 #计算i的下一个取值
result=eval(input()) #输入函数调用表达式用于得到结果
print(result)
第3题
试编写程序,完成以下功能:
1、定义一个函数(函数名为f):计算给定的一个三位正整数的各位数字之和 及 各位数字之积,并将结果返回。
2、根据用户输入的函数调用表达式直接输出结果。具体输入输出格式见样例。(10分)
def f(n): #定义函数,计算给定三位正整数的各位数字之和 及 各位数字之积,并将它们返回
hundred= n//100 #获取百位数字
ten= (n-100*hundred)//10 #获取十位数字
gewei= n%10 #获取各位数字
return sum((hundred,ten,gewei)),hundred*ten*gewei #返回和与积
result=eval(input()) #输入函数调用表达式用于计算结果
print(result)
第10周
第1题
试编写程序,实现以下功能:
- 定义一个函数(函数名为f):根据给定的参数(上底、下底和高)计算梯形的面积。将形参 上底、下底和高的默认值分别设置为1、2、3.
- 根据用户输入的函数调用表达式,计算梯形面积并输出结果。输出时保留一位小数。具体输入输出格式见样例。(10分)
def f(m=1,n=2,k=3):
s=(m+n)*k/2.0 #计算梯形面积
return s #将面积返回
result=eval(input())
print('{:.1f}'.format(result)) #输出结果并控制输出格式
第2题
试编写程序,实现以下功能:
- 定义一个函数(函数名为f):计算给定的若干整数之积。形参为可变参数
- 根据用户输入的函数调用表达式,计算结果并将其输出。具体输入输出格式见样例。(10分)
def f(*args): #定义一个函数,计算可变形参之积
s=1
for item in args:
s*=item
return s
result=eval(input())
print(result)
第3题
试编写程序,实现以下功能:
- 定义一个函数(函数名为f):计算给定列表中的所有素数之和。假设列表中的元素均为正整数。
- 根据用户输入的函数调用表达式,计算结果并将其输出。具体输入输出格式见样例。(10分)
def prime(n): #定义函数prime,用于判断给定的一个正整数是否为素数,是则返回True,不是则返回False
for i in range(2,n):
if n%i==0:
return False
return True
def f(lst): #定义一个函数,计算给定列表中的所有素数之和
s=0
for i in lst: #对列表lst进行遍历
if prime(i): #调用prime函数对当前列表元素是否为素数进行判断
s=s+i
return s #返回和变量
result=eval(input())
print(result)