今天这个一天四更多少有点离谱。
本关的编程任务是补全src/Step2/menu.py
文件的代码,实现相应的功能。具体要求如下:
向menu_dict
字典中添加一道菜名lamb
,它的价格是50
;
获取menu_dict
字典中的fish
的价格并打印出来;
将menu_dict
字典中的fish
的价格改为100
;
删除menu_dict
字典中noodles
这道菜;
输出新的menu_dict
菜单。
先通过这关快速熟悉一下字典的基本操作。难度不大。
# 创建并初始化menu_dict字典
menu_dict = {}
while True:
try:
food = input()
price = int(input())
menu_dict[food]= price
except:
break
# 请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
########## Begin ##########
menu_dict['lamb']=50
print(menu_dict['fish'])
menu_dict['fish']=100
del menu_dict['noodles']
print(menu_dict)
########## End ##########
本关的编程任务是补全src/Step3/key-values.py
文件的代码,实现相应的功能。具体要求如下:
将menu_dict
菜单的键遍历输出;
将menu_dict
菜单的值遍历输出。
简单的字典遍历,页面左侧提示已经给足了。
# 创建并初始化menu_dict字典
menu_dict = {}
while True:
try:
food = input()
price = int(input())
menu_dict[food]= price
except:
break
# 请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
########## Begin ##########
for key in menu_dict.keys():
print(key)
for value in menu_dict.values():
print(value)
########## End ##########
本关的编程任务是补全src/Step4/menu_nest.py
文件的代码,实现相应的功能。具体要求如下:
menu_total
列表中初始时只包含menu1
字典,menu1
字典中包含两道菜和两道菜的价格;
编程要求是向menu_total
列表中添加另外一个菜单字典menu2
,menu2
菜单中的菜名和menu1
菜单一样,菜的价格是menu1
菜的价格的2倍;
输出新的menu_total
列表。
这个答案不是最优解,但相对比较容易想到。
# 初始化menu1字典,输入两道菜的价格
menu1 = {}
menu1['fish']=int(input())
menu1['pork']=int(input())
# menu_total列表现在只包含menu1字典
menu_total = [menu1]
# 请在此添加代码,实现编程要求
########## Begin ##########
menu2={}
menu2['fish']=menu1['fish']*2
menu2['pork']=menu1['pork']*2
menu_total=[menu1,menu2]
本关的编程任务是补全src/Step2/menu2.py
文件的代码,实现相应的功能。具体要求如下: 统计给定菜单menu_dict,计算菜单中菜价的平均值并输出
这个遍历和之前的没有什么区别,照着以前的做法做就可以。
# 创建并初始化menu_dict字典
menu_dict = eval(input())
# 请在此添加代码,实现对menu_dict平均菜价的计算,并打印输出
########## Begin ##########
s=0
count=0
for value in menu_dict.values():
s+=value
count+=1
print("平均菜价为:{:.2f}元".format(s/count))
########## End #########
给定一个字符串s,统计0-9每个数字在字符串s中出现的次数存储在字典count,并输出字典
我的做法也不是最优解,仅供参考。
首先把字符串转换成列表(方便排序并删掉小数点),然后对列表进行遍历。
如果数字i在字典count里还未出现过,就在字典里创建一个key用来表示数字i;如果已经出现过,就对其value+1。
from math import *
# 输入字符串
s=input()
# 创建并初始化字典
count={}
# 请在此添加代码,统计0-9每个数字在字符串中出现的次数存储在字典count,并输出字典
########## Begin ##########
a=list(s)
a.remove('.')
a.sort()
for i in a:
if int(i) in count:
count[int(i)] += 1
else:
count[int(i)] = 1
print(count)
########## End ##########
程序会输入一个查找姓名name,一个用字典嵌套列表scores存储学生的姓名和成绩,请查找姓名为name的同学的成绩,并统计显示平均成绩、最高最低成绩,按指定格式输出;如成绩表中没有该姓名,则输出‘没有该姓名’
同样仅供参考。我们遍历 scores 列表中的每个字典,如果字典的 'name' 键值等于输入的 name,我们就将其对应的 'score' 键值赋值给变量 score,并设置一个标志变量 found 为 True。如果遍历完列表后,found 变量仍为 False,那就说明这个人不在字典中。
平均分、最高分和最低分的计算就比较简单了。
# 输入查找姓名
name=input()
# 创建并初始化成绩字典列表
scores=eval(input())
found = False
for record in scores:
if record['name'] == name:
found = True
score = record['score']
if found:
print(f"姓名:{name},成绩:{score:.2f}")
score_list = [record['score'] for record in scores]
avg = sum(score_list) / len(score_list)
max = max(score_list)
min = min(score_list)
print(f"平均成绩:{avg:.2f},最高成绩:{max:.2f},最低成绩:{min:.2f}")
else:
print("没有该姓名")
########## End ##########
本关的编程任务是补全src/Step2/prime.py
文件的代码,实现相应的功能。具体要求如下:
True
,否则输出为False
。这关我没用到内置函数,用的还是常规的循环,总感觉不太对劲……不过能做就行。
n = int(input())
if n < 2:
print('False')
else:
for i in range(2,n):
if n%i == 0:
print('False')
break
else:
print('True')
本关的编程任务是补全src/Step2/func_call.py
文件的代码,实现相应的功能。具体要求如下:
只要用一个函数就能解决。
# 输入数字字符串,并转换为数值列表
a = input()
num1 = eval(a)
numbers = list(num1)
# 请在此添加代码,对数值列表numbers实现从小到大排序
########## Begin ##########
numbers.sort()
print(numbers)
########## End ##########
本关的编程任务是补全src/step3/func_ref.py
文件的代码,实现相应的功能。具体要求如下:
仍然是只要用两行代码就可以解决的简单题目。
from math import pi as PI
n = int(input())
# 请在此添加代码,实现圆的面积计算,并输出面积结果
########## Begin ##########
s = PI * n**2
print("{:.2f}".format(s))
########## End ##########
迷惑的一关。
这关很简单,甚至只要写一行代码,但是题目要求看上去很奇怪。题干老长的我也不清楚在说什么。
# 创建一个空列表numbers
numbers = []
# str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表
str = input()
lst1 = str.split(' ')
# 将输入的数字字符串转换为整型并赋值给numbers列表
for i in range(len(lst1)):
numbers.append(int(lst1.pop()))
# 请在此添加代码,对输入的列表中的数值元素进行累加求和
########## Begin ##########
d=sum(numbers) #没错,就只要写这一行
########## End #########
print(d)
本关的编程任务是补全src/step2/return.py
文件的代码,实现相应的功能。具体要求如下:
gcd
,功能是求两个正整数的最大公约数;gcd
,得到输入的两个正整数的最大公约数,并输出这个最大公约数。计算最大公约数的题我们之前见过,相信这次再见到这题,难度已经降低了很多。
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最大公约数
########## Begin ##########
def gcd(a,b):
list=[]
for i in range(1,min(a,b)+1):
if max(a,b)%i == 0 and min(a,b)%i == 0:
list.append(i)
return(max(list))
########## End ##########
# 调用函数,并输出最大公约数
print(gcd(a,b))
这关要求又是不知所云,从代码来看应该是要计算最小公倍数。这题比计算最大公约数还要简单一些。
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最小公倍数
########## Begin ##########
def lcm(a,b):
list=[]
for i in range(max(a,b),a*b+1):
if i % a == 0 and i % b == 0:
return i
break
########## End ##########
现在有点晚了,这一节比较简单,我们速战速决。
解一元二次方程,利用二次方程的求根公式计算就行。
from math import sqrt
a = float(input()); b = float(input()); c = float(input())
def roots(a,b,c):
#请在此添加代码,求方程 ax^2+bx+c = 0的解,返回由方程根构成的列表,若方程有无数解,返回['inf']
#********** Begin *********#
list=[]
delta = b**2 - 4*a*c
if delta > 0:
list.append((-b+delta**0.5)/(2*a))
list.append((-b-delta**0.5)/(2*a))
elif delta == 0:
list.append(-b/(2*a))
return list
#********** End **********#
print (roots(a,b,c))
这题和上一题非常相似,甚至找不出区别在哪。
from math import sqrt
a=float(input()); b=float(input()); c=float(input())
def roots(a, b, c):
#请在此添加代码,在a不等于0的情况下编写函数求解方程的两个根并将根返回
#********** Begin *********#
delta = b**2 - 4*a*c
x1=(-b+sqrt(delta))/(2*a)
x2=(-b-sqrt(delta))/(2*a)
return(x1,x2)
#********** End **********#
if a != 0:
print (roots(a,b,c))
这关需要用到全局变量global,页面左侧已经给出提示。
counter = 0
def access():
#请在此添加代码,实现counter的调用,每次调用counter的值加1
#********** Begin *********#
global counter
counter += 1
return counter
#********** End **********#
for i in range(5):
access()
print (counter)
任务和标题好像没啥关联。这关需要利用求导公式计算出sinx的导数。那能不能直接用cosx来代替呢?感兴趣的可以试试看。
from math import sin, cos
delX = 0.001
x = float(input())
#请在此添加代码,用lambda方式定义sin()的导数函数diff
#********** Begin *********#
def diff(x,delX):
return (sin(x+delX)-sin(x-delX))/(2*delX)
#********** End *********
print ("%.2f"%(diff(x,delX)))
怎么又是这题?
import math
#请在此添加代码,定义solve函数,求一元二次方程的的两个根,该函数应包括三个参数分别表示方程的三个系数,默认第三个参数为-4
#********** Begin *********#
def solve(a,b):
delta = b**2 + 16 * a
x1=(-b+math.sqrt(delta))/(2*a)
x2=(-b-math.sqrt(delta))/(2*a)
return(x1,x2)
#********** End *********#
a=eval(input())
b=eval(input())
x1, x2 = solve(a, b) #默认第三个参数为-4
print('x1=%.2f, x2=%.2f' % (x1, x2))
依然是很迷惑的一道题,上下那么长一堆,实际上只要填一行。
import random
from functools import reduce
n = input() # useless
n = random.randint(5,10)
L = []
for i in range(n):
L.append(random.randint(1,n))
def sum_of_paras(*arg):
#请在此添加代码,返回参数列表 arg 中所有数的和
#********** Begin *********#
return sum(L) #填这里就行了
#********** End *********#
strcall = "sum_of_paras(";
strcall += reduce(lambda x, y: x+","+y, [str(s) for s in L])
strcall +=")"
if eval(strcall) == sum(L):
print("Y")
else:
print("N")
递归比较难理解,不过本题用递归做很简单。
n=int(input())
#请在此添加代码,返回斐波拉契数量第n项的值
#********** Begin *********#
def fib(n):
if n == 1:
return 0
elif n == 2:
return 1
return fib(n-2) + fib(n-1)
#********** End *********#
print(fib(n))