简介
其他各类实训答案的目录见这里
答案查询的入口见这里
答案获取的方法简介见这里
并不是所有的关卡都有答案,有些只有部分关卡有,因为金币不太够…
在电脑网页界面的右侧,有个文章目录,可以在那里查一下要找的实训标题
python相关实训答案
Python表达式问题求解(一)※ >>>链接
第4关: 解决实际问题※
解题代码
from math import *
def print_(x):
if type(x) == float:
print("%.4f" % x)
else:
print(x)
# ********** Begin ********** #
#第一题
for (vin, rin, rout) in [(10, 10, 5), (10, 10, 10), (20, 20, 5), (20, 20, 10)]:
#请在下面编写代码
vout = vin * (rin/rout)**2
#请不要修改下面的代码
print_(vout)
print('\n***********************\n')
#第二题
for (d, p, S) in [(7,300,10000),(7,400,15000),(10,400,12000),(15,400,12000)]:
# 请在下面编写代码
r = ((d * p) / (pi * S))**(1/3)
# 请不要修改下面的代码
print_(r)
print('\n***********************\n')
#第三题
for (P, N, r) in [(300000,10,6.5), (300000,20,6.5),(300000,30,6.5)]:
# 请在下面编写代码
monthR = r/1200
N = N * 12
payPerMonth = (P * monthR * (1+monthR)**N) / ((1+monthR)**N - 1)
# 请不要修改下面的代码
print_(payPerMonth)
print('\n***********************\n')
#第四题
for (m,d,y) in [(1,1,2017), (2,14,2017), (5,1,2017), (6,1,2017),(7,1,2017),(12,25,2017)]:
# 请在下面编写代码
y0 = y - (14 - m)//12
x = y0 + y0//4 - y0//100 + y0//400
m0 = m + 12 * ((14 - m)//12) - 2
d0 = (d + x + (31 * m0)//12)%7
# 请不要修改下面的代码
print_(d0)
print('\n***********************\n')
#第五题
for (x1,y1,x2,y2) in [(48.87,-2.33,37.8,-122.4),(40.89,116.50,37.8,-122.4),(40.89,116.50,48.87,-2.33)]:
# 请在下面编写代码
x1 = radians(x1)
y1 = radians(y1)
x2 = radians(x2)
y2 = radians(y2)
R = 69.1105*1.609
dist = R*acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2))*180/pi
# 请不要修改下面的代码
print_(dist)
print('\n***********************\n')
#第六题
for (t, v) in [(32,10), (32, 100), (40, 10), (40, 100)]:
# 请在下面编写代码
w = 35.74 + 0.6215 * t + (0.4275 * t - 35.75) * (v ** 0.16)
# 请不要修改下面的代码
print_(w)
# ********** End ********** #
Python控制结构(二)※ >>>链接
第2关: 循环结构基础实训
解题代码
from random import *
from math import *
r = []
for i in [10, 200,300,400,500,600,700,800,900,1000]:
seed(i)
r.append(randint(1, i))
#第一题
#请在下面编写代码
# ********** Begin ********** #
print('摄氏温度\t\t华氏温度')
print('*'*20)
for temp in range(-40, 55, 5):
print(str(temp)+'\t\t'+str(9 * temp / 5 + 32))
# ********** End ********** #
#请不要修改下面的代码
print('\n***********************\n')
#第二题
numbers = []
# 请在下面编写代码
# ********** Begin ********** #
i = 0
while i <= 300:
if i % 2 == 0 and i % 3 == 0 and i % 5 == 0:
numbers.append(i)
i += 1
# ********** End ********** #
# 请不要修改下面的代码
print(numbers)
print('\n***********************\n')
#第三题
# 请在下面编写代码
# ********** Begin ********** #
sum = 0
for i in range(1, 101):
sum += i
# ********** End ********** #
# 请不要修改下面的代码
print(sum, '\t', 100*(100+1)//2)
print('\n***********************\n')
#第四题
# 请在下面编写代码
# ********** Begin ********** #
fac = 1
for i in range(1, 31):
fac *= i
# ********** End ********** #
# 请不要修改下面的代码
print(fac)
print('\n***********************\n')
#第五题
for num in r:
#请在下面编写代码
# ********** Begin ********** #
prime = True
for i in range(2, num-1):
if num % i == 0:
prime = False
break
print(prime)
# ********** End ********** #
# 请不要修改下面的代码
print('\n***********************\n')
#第六题
sum = 0
avg = 0
for num in r:
# 请在下面编写代码
# ********** Begin ********** #
sum += num
avg = sum / len(r)
# ********** End ********** #
# 请不要修改下面的代码
print(sum, '\t', avg)
第4关: 控制结构综合实训
解题代码
#第一题
def rankHurricane(velocity):
#请在下面编写代码
# ********** Begin ********** #
rank = None
if 74 <= velocity <= 95:
rank = 1
elif 96 <= velocity <= 110:
rank = 2
elif 111 <= velocity <= 130:
rank = 3
elif 131 <= velocity <= 154:
rank = 4
elif velocity >= 155:
rank = 5
# ********** End ********** #
#请不要修改下面的代码
return rank
#第二题
def validCreditCard(num):
#请在下面编写代码
# ********** Begin ********** #
valid = False
if 100000000 > num > 10000000:
oddSum = 0
even = 0
evenSum = 0
while not(num == 0):
oddSum += (num % 10)
num = num // 10
even = (num % 10) * 2
while not(even==0):
evenSum += (even % 10)
even = even // 10
num = num // 10
final = oddSum + evenSum
if final % 10 == 0:
valid = True
# ********** End ********** #
#请不要修改下面的代码
return valid
#第三题
def ISBN(n):
# 请在下面编写代码
# ********** Begin ********** #
total = 0
num = n
for i in range(2, 11):
digit = num % 10
total += i * digit
num //= 10
strn = str(n)
if len(strn) < 9:
strn = '0'*(9-len(strn)) + strn
trueISBN = ''
if total % 11 == 1:
trueISBN = strn + 'X'
elif total % 11 == 0:
trueISBN = strn + '0'
else:
trueISBN = strn + str(11 - (total % 11))
# ********** End ********** #
# 请不要修改下面的代码
return (trueISBN)
#第四题
def day(y, m, d):#计算y年m月d日是星期几
# 请在下面编写代码
# ********** Begin ********** #
y0 = y - (14 - m) // 12
x = y0 + y0 // 4 - y0 // 100 + y0 // 400
m0 = m + 12 * ((14 - m) // 12) - 2
d0 = (d + x + (31 * m0) // 12) % 7
# ********** End ********** #
# 请不要修改下面的代码
return d0
def isLeapYear(year): #判断year年是否闰年
# 请在下面编写代码
# ********** Begin ********** #
isLeapYear = (year % 4 == 0)
isLeapYear = isLeapYear and (year % 100 != 0)
isLeapYear = isLeapYear or (year % 400 == 0)
# ********** End ********** #
# 请不要修改下面的代码
return isLeapYear
def calendar(y, m): #打印y年m月日历
print(' {}年{}月'.format(y,m))
print('Su\tM\tTu\tW\tTh\tF\tSa')
# 请在下面编写代码
# ********** Begin ********** #
date = day(y, m, 1)
days = 0
if m in [1, 3, 5, 7, 8, 10, 12]:
days = 31
elif m in [4, 6, 9, 11]:
days = 30
else:
if isLeapYear(y):
days = 29
else:
days = 28
count = date
for i in range(date):
print('\t', end='')
for d in range(1, days + 1):
print(str(d) + '\t', end="")
count = (count + 1) % 7
if count == 0:
print()
print()
# ********** End ********** #
# 请不要修改下面的代码
#第五题
def ramanujan(n):
results = []
#请在下面编写代码
# ********** Begin ********** #
for a in range(1, n + 1):
a3 = a * a * a
if a3 > n:
break
# Start at a to avoid print out duplicate.
for b in range(a, n + 1):
b3 = b * b * b
if a3 + b3 > n:
break;
# Start at a + 1 to avoid printing out duplicates.
for c in range(a + 1, n + 1):
c3 = c * c * c
if c3 > a3 + b3:
break
# Start at c to avoid printing out duplicates.
for d in range(c, n + 1):
d3 = d * d * d
if c3 + d3 > a3 + b3:
break
if c3 + d3 == a3 + b3:
result = str(a3+b3) + ' = ' + str(a) + '^3 + ' + str(b) + '^3 = ' + str(c) + '^3 + ' + str(d) + '^3'
results.append(result)
# ********** End ********** #
# 请不要修改下面的代码
return results
#第六题
def unit_to_word(u): #将0~9的数字转换成英文,并返回转换后的英文
# 请在下面编写代码
# ********** Begin ********** #
convert_table = {
0: "zero",
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
}
return convert_table[u]
# ********** End ********** #
# 请不要修改下面的代码
def tens_to_word(t): #利用unit_to_word,将10~19、以及20~99的十位部分数字转换成英文,并返回转换后的英文
# 请在下面编写代码
# ********** Begin ********** #
convert_table = {
0: "",
10: "ten",
11: "eleven",
12: "twelve",
13: "thirteen",
14: "fourteen",
15: "fifteen",
16: "sixteen",
17: "seventeen",
18: "eighteen",
19: "nineteen",
2: "twenty",
3: "thirty",
4: "forty",
5: "fifty",
6: "sixty",
7: "seventy",
8: "eighty",
9: "ninety",
}
if 9 < t < 20:
return convert_table[t]
else:
tens = convert_table[t//10] + " " + unit_to_word(t%10)
return tens.lstrip()
# ********** End ********** #
# 请不要修改下面的代码
def hundreds_to_word(h): #利用unit_to_word、tens_to_word进行转换,并返回转换后结果的函数
# 请在下面编写代码
# ********** Begin ********** #
if h > 99:
word = unit_to_word(h//100) + " hundred"
tens = h % 100
if tens == 0:
return word
else:
return word + " and " + tens_to_word(tens)
else:
return tens_to_word(h)
# ********** End ********** #
# 请不要修改下面的代码
if __name__ == '__main__':
for v in [60, 74, 95, 96, 110, 111, 130, 131, 154, 170]:
rank = rankHurricane(v)
print(rank)
print('\n***********************\n')
for num in [1234567, 43589795, 87539319, 123456789]:
valid = validCreditCard(num)
print(valid)
print('\n***********************\n')
for num in [201314525, 488888913, 977889994, 753231846, 701134069]:
trueISBN = ISBN(num)
print(trueISBN)
print('\n***********************\n')
for (y,m) in [(2017,8), (2017,10),(2015,8), (2017,2), (2016,2)]:
calendar(y, m)
print('---------------------------')
print('\n***********************\n')
for num in [2000, 10000, 100000]:
st = ramanujan(num)
for item in st:
print(item)
print('\n***********************\n')
for test in [0, 5, 19, 23, 100, 700, 711, 729]:
print(test, "=>", hundreds_to_word(test))
基于Python语言的文件与文件夹管理 >>>链接
第1关: 创建子文件夹
解题代码
本关任务对应参考代码实现如下:
import os
def mkDir():
# 请在这里补充代码,完成本关任务
#-----------Begin----------
os.mkdir('dst')
#------------End-----------
第2关: 删除带有只读属性的文件
解题代码
本关任务对应参考代码实现如下:
import os, sys
import os.path
def removeFile():
# 请在这里补充代码,完成本关任务
#-----------Begin----------
fn = os.path.join(sys.path[0],r'src/removeme.txt')
os.chmod(fn, 0o777)
os.remove(fn)
#------------End-----------
第3关: 批量复制文件夹中的所有文件
解题代码
本关任务对应参考代码实现如下:
import os
import os.path
import shutil
def copyTree(src, dst):
# 请在这里补充代码,完成本关任务
#-----------Begin----------
total = 0
def copy(src, dst):
nonlocal total
for item in os.listdir(src):
srcPath = os.path.join(src, item)
dstPath = os.path.join(dst, item)
if os.path.isdir(srcPath):
os.makedirs(dstPath)
total += 1
copy(srcPath, dstPath)
elif os.path.isfile(srcPath):
shutil.copyfile(srcPath, dstPath)
total += 1
copy(src, dst)
return total
#------------End-----------
Python 入门之控制结构 - 循环结构 >>>链接
第4关: 迭代器
解题代码
List = []
member = input()
for i in member.split(','):
result = i
List.append(result)
# 请在此添加代码,将List转换为迭代器的代码
########## Begin ##########
IterList = iter(List)
########## End ##########
while True:
try:
# 请在此添加代码,用next()函数遍历IterList的代码
########## Begin ##########
num = next(IterList)
########## End ##########
result = int(num) * 2
print(result)
except StopIteration:
break
Python 入门之函数结构 >>>链接
第2关: 函数的返回值 - 可有可无的 return
解题代码
# coding=utf-8
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最大公约数
########## Begin ##########
def gcd(a,b):
if a < b:
t=a
a=b
b=t
while b:
t = a%b
a = b
b = t
return a
########## End ##########
# 调用函数,并输出最大公约数
print(gcd(a,b))
第3关: 函数的使用范围:Python 作用域
解题代码
# coding=utf-8
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最小公倍数
########## Begin ##########
# 先定义一个private函数_gcd(),该函数先求a,b两个正整数的最大公约数
def _gcd(a,b):
if a < b:
t=a
a=b
b=t
while b:
t = a%b
a = b
b = t
return a
# 再定义public函数lcm(),在lcm()函数中调用_gcd()函数
def lcm(a,b):
return int(a*b/_gcd(a,b))
########## End ##########
# 调用函数,并输出a,b的最小公倍数
print(lcm(a,b))
Python 入门之经典函数实例 >>>链接
第3关: Map-Reduce - 映射与归约的思想
解题代码
# coding=utf-8
# 输入一个正整数
x = int(input())
# 请在此添加代码,将输入的一个正整数分解质因数
########## Begin ##########
t = x
i = 2
result = []
while True:
if t==1:
break
if t%i==0:
result.append(i)
t = t/i
else:
i+=1
########## End ##########
# 输出结果,利用map()函数将结果按照规定字符串格式输出
print(x,'=','*'.join(map(str,result)))
Python入门之模块 >>>链接
第1关: 模块的定义
解题代码
# coding=utf-8
import math
# 输入正整数a和b
a = float(input())
b = float(input())
# 请在此添加代码,输入直角三角形的两个直角边的边长a和b,计算出其斜边边长
########## Begin ##########
c = math.sqrt(a**2+b**2)
print('%.3f'%c)
########## End ##########
Python 初体验—— Hello world >>>链接
第1关: Hello Python,我来了!
解题代码
# coding=utf-8
# 请在此添加代码,实现编程要求
########## Begin ##########
print('Hello Python')
########## End ##########
基于Python语言的图像绘制与空域融合 >>>链接
第1关: 创建图像
解题代码
本关任务对应参考代码实现如下:
from PIL import Image, ImageDraw
def generateCircle(width, height):
# 请在这里补充代码,完成本关任务
#-----------Begin----------
img = Image.new('RGB', (width,height), (255,255,255))
imgDraw = ImageDraw.Draw(img)
imgDraw.arc((0,0,width-1,height-1), 0, 360, fill=(0,0,0))
img.save('circle.png')
#------------End-----------
第2关: 为图像添加随机噪点
解题代码
本关任务对应参考代码实现如下:
from random import randint
from PIL import Image
def addNoise(num):
# 第一关生成的PNG图像文件
fileName = 'circle.png'
# 请在这里补充代码,生成num个含有随机噪点的图像文件
#-----------Begin----------
for i in range(num):
# 打开原始图像
im = Image.open(fileName)
# 获取图像尺寸
width, height = im.size
# 添加噪点,每个结果图像中含有的噪点数量可能会不一样
n = randint(1, 20)
for j in range(n):
# 随机位置
w = randint(0, width-1)
h = randint(0, height-1)
# 修改随机位置的像素值
im.putpixel((w,h), (0,0,0))
# 保存结果图像
im.save(str(i+1)+'.png')
#------------End-----------
Python初体验——Hello World >>>链接
第1关: Hello Python,我来了!
解题代码
# coding=utf-8
# 请在此添加代码,实现编程要求
#********** Begin *********#
print('Hello Python')
#********** End **********#
python之文件管理 >>>链接
第1关: 文件管理基本函数
解题代码
import os
answer=[0]*8
#第1题
answer[1] = os.getcwd()
#--------E N D--------
#第2题
answer[2] = os.listdir()
#--------E N D--------
relapath='sample/note.txt'
#第3题
answer[3] = os.path.join(os.getcwd(), relapath)
#--------E N D--------
#第4题
answer[4] = os.path.isfile(relapath)
#--------E N D--------
#第5题
def cre_del(path):
if os.path.exists(path):
os.rmdir(path)
else:
os.mkdir(path)
#--------E N D--------
answer[5]=cre_del
#第6题
def getname(filepath):
name=os.path.split(filepath)[1]
name=os.path.splitext(name)[0]
return name
#--------E N D--------
answer[6]=getname
#第7题
def delete(path):
if os.path.isfile(path):
os.remove(path)
else:
os.rmdir(path)
#--------E N D--------
answer[7]=delete
第2关: 文件检索
解题代码
import os
def search(path, name):
#--------begin--------
filelist=[]
for file in os.listdir(path):
filepath = os.path.join(path, file)
if name in file:
filelist.append(filepath)
if os.path.isdir(filepath):
filelist.extend(search(filepath, name))
return filelist
#--------end--------
第3关: 获取目录下某类型文件的总大小
解题代码
import os
def isType(filepath, ext):
#--------begin--------
if os.path.isfile(filepath):
if ext in os.path.splitext(filepath)[1]:
return True
return False
#--------end--------
def getSize(path, ext):
#--------begin--------
size=0
for file in os.listdir(path):
filepath=os.path.join(path, file)
if isType(filepath,ext):
size+=os.path.getsize(filepath)
if os.path.isdir(filepath):
size+=getSize(filepath, ext)
return size
#--------end--------
python之文件读写 >>>链接
第3关: 文件读取
解题代码
答案一
def countLines(path):
#---------START----------
f = open(path, "r")
lines = f.readlines()
f.close()
return len(lines)
#----------END----------
def lines_length(path):
#---------START----------
lengths = []
f = open(path, "r")
lines = f.readlines()
for line in lines:
lengths.append(len(line))
f.close()
return lengths
#----------END----------
答案二
def countLines(path):
#---------START----------
f = open(path, "r")
count =0
while 1:
line = f.readline()
if line == '':
break
count += 1
f.close()
return count
#----------END----------
def lines_length(path):
#---------START----------
lengths = []
f = open(path, "r")
while 1:
line = f.readline()
if line == '':
break
lengths.append(len(line))
f.close()
return lengths
#----------END----------
python之Image库图片处理 >>>链接
第2关: 彩色图片转黑白
解题代码
from PIL import Image
def rgb2gray(r, g, b):
#--------------------
color = [r, g, b]
for i in range(3):
if color[i] < 0:
color[i] = 0;
if color[i] > 255:
color[i] = 255
else:
#加0.5然后取整以实现四舍五入
color[i] = int(color[i]+0.5)
return int(color[0]*0.299 + color[1]*0.587 + color[2]*0.114 +0.5)
#--------------------
def convertGray(img):
#--------------------
width, height = img.size
#创建一个新灰度图片
gray_img = Image.new('L', (width, height))
for x in range(width):
for y in range(height):
r, g, b = img.getpixel((x,y))
gray = rgb2gray(r, g, b)
gray_img.putpixel((x,y), gray)
return gray_img
#--------------------
第3关: 统计图片使用的颜色
解题代码
答案一
def getcolors(img):
#----------START----------
colors = {}
width, height = img.size
for x in range(width):
for y in range(height):
pixel = img.getpixel((x, y))
#若字典colors中存在键pixel则返回pixel对应的值,否则返回0
colors[pixel] = colors.get(pixel, 0) + 1
#colors.items()得到字典colors所有的键-值对
return list(colors.items())
#----------END----------
答案二
def getcolors(img):
#----------START----------
#创建两个列表,分别存储颜色值和其出现的次数
colors = []
counts = []
width, height = img.size
for x in range(width):
for y in range(height):
pixel = img.getpixel((x, y))
if pixel in colors:
idx = colors.index(pixel)
counts[idx] += 1
else:
colors.append(pixel)
counts.append(1)
for i in range(len(counts)):
colors[i] = (colors[i], counts[i])
return colors
#----------END----------
第4关: 图片透明化
解题代码
答案一
def transparency(img):
#黑白的灰度临界值
GRAY = 240
#----------START----------
width, height = img.size
#创建一个颜色模式为RGBA的新图片
new_img = Image.new("RGBA", (width, height))
for x in range(width):
for y in range(height):
r, g, b = img.getpixel((x, y))
if rgb2gray(r, g, b) > GRAY:
new_img.putpixel((x,y), (255, 255, 255, 0))
else:
new_img.putpixel((x,y), (r, g, b, 255))
return new_img
#----------END---------
答案二
def transparency(img):
#黑白的灰度临界值
GRAY = 240
#----------START----------
width, height = img.size
#将原图片的颜色模式转化为RGBA
new_img = img.convert("RGBA")
for x in range(width):
for y in range(height):
r, g, b = img.getpixel((x, y))
if rgb2gray(r, g, b) > GRAY:
new_img.putpixel((x,y), (255, 255, 255, 0))
return new_img
#----------END---------
第5关: 图片裁剪函数的实现
解题代码
def crop(img, box):
#----------START----------
if not box: #判断box是否为空值
return img.copy() #注意不能直接返回img
mode = img.mode
left, upper, right, lower = box
width = right-left if right-left>0 else 0
height = lower-upper if lower-upper>0 else 0
new_img = Image.new(mode, (width, height))
for x in range(width):
for y in range(height):
if 0 <= left+x < img.width and 0 <= upper+y < img.height:
color = img.getpixel((left+x, upper+y))
new_img.putpixel((x, y), color)
return new_img
#----------END----------
Python入门-绘制炸弹轨迹 ※ >>>链接
第1关: 绘制一个坐标点
解题思路1
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt #导入matplotlib.pyplot
h, v0, g = 3000, 200, 9.8
for t in [10, 15, 20, 24]:
xt = v0*t
yt = h-1/2*g*t**2
plt.ylim((0, 3000))
plt.xlim((0, 5000))
plt.grid('on')
######## begin ############
# 请使用plot函数,绘制一个坐标点
plt.plot(xt, yt, 'ro')
######## end ##############
plt.savefig('./student result/%s秒后.png' % str(t))
plt.close()
第2关: 绘制n个坐标点
解题思路1
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt #导入matplotlib.pyplot
h, v0, g = 3000, 200, 9.8
t, n = 0, 30 #n为要绘制的坐标点数量,假设为30
tmax = (2*h/g)**0.5
delta = tmax/(n-1) #delta为相邻两时刻之间的间隔
while t<=tmax: #t从0变到tmax,每次加delta
###### begin ##########
# 请在此填写表达式,计算时间为t时,x轴与y轴的位置,并命名为xt与yt
xt = v0*t
yt = h-1/2*g*t**2
######### end ############
plt.plot(xt,yt,'ro')
t = t+delta
plt.grid('on')
plt.axis([0, 5000, 0, h])
plt.savefig('./student result2/%s个点.png' % str(n))
plt.close()
第3关: 绘制一条轨迹
解题思路1
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt #导入matplotlib.pyplot
h, v0, g = 3000, 200, 9.8
n = 30
xt, yt = [], []
tmax = (2*h/g)**0.5
delta = tmax/(n-1)
for i in range(n):
t = delta*i
xt.append(v0*t)
yt.append(h-1/2*g*t**2)
#### begin ###########
# 请使用plot函数绘制一条线
plt.plot(xt,yt,'r-')
#### end ##############
plt.grid('on')
plt.axis([0, 5000, 0, h])
plt.savefig('./student result3/轨迹.png')
plt.close()
第4关: 更简单的绘制一条轨迹
解题思路1
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt #导入matplotlib.pyplot
h, v0, g, n = 3000, 200, 9.8, 30
tmax = (2*h/g)**0.5
########### begin ##############
# 请使用numpy的linspace函数,在[0, tmax]上平均取30个点
t = np.linspace(0, tmax, n) #在[0, tmax]上平均取n个点
########## end #################
xt = v0*t #计算n个点的横坐标
yt = h-1/2*g*t**2 #计算n个点的纵坐标
plt.plot(xt, yt, 'r-')
plt.grid('on')
plt.axis([0, 5000, 0, h])
plt.savefig('./student result4/轨迹.png')
plt.close()
第5关: 绘制多条轨迹
解题思路1
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt #导入matplotlib.pyplot
def calBombTrace(h, v0):
g, n = 9.8, 30
tmax = (2*h/g)**0.5
t = np.linspace(0, tmax, n)
xt = v0*t
yt = h-1/2*g*t**2
##### begin ############
# 函数bia返回xt,yt
return xt, yt
###### end #############
H, V0 = [3000, 2000], [200, 260]
for h in H:
for v0 in V0:
xt, yt = calBombTrace(h, v0)
plt.plot(xt, yt)
plt.grid('on')
plt.axis([0, 6500, 0, 3000])
plt.savefig('./student result5/轨迹.png')
plt.close()
python基础(2)程序设计入门 >>>链接
第1关: 试一试1——缩进1
第一处错误提示
File "train/suojin.py", line 2
b=4
^
IndentationError: unexpected indent
第二行
b=4处有意想不到的缩进
删除缩进即可
第二处错误提示
File “train/suojin.py”, line 5
print(“b>0”)
^
IndentationError: expected an indented block
第5行,
print(“b>0”)
预计一个缩进块
在此处增加一个TAB缩进即可
第三处错误提示
File “train/suojin.py”, line 6
print(b)
^
TabError: inconsistent use of tabs and spaces in indentation
第6行
TAB错误,不一致的使用制表符和空格缩进
这里的缩进没有使用TAB而是使用的空格,删除空格并按TAB键输入缩进即可
第2关: 注释
解题思路1
此题考察注释的写法
1、前两行为单行注释,在注释的内容前面加#即可,注意不要注释掉前面正确的语句
2、多行注释,在若干行的“以下为注释信息”前后添加三个单引号或双引号即可
python基础(4-3)程序控制-循环程序:for >>>链接
第1关: 从测试集中读取字符串并按要求打印。
解题思路1
使用切片找出前n-1个字符
循环打印这n-1个字符(带逗号)
循环后打印最后一个字符
解题思路2
前n-1个字符组成的字符串:s[0:-1]
最后一个字符:s[-1]
解题思路3
for c in s[0:-1]:
print(c,end=',')
print (s[-1])
第2关: 统计字符出现个数
解题思路1
设置两个字符统计的辅助变量m,n
循环遍历列表中的字符,是‘a’则m+1,‘*’则n+1
遇到’.'则停止循环
解题思路2
循环遍历,循环中分为三种情况,
(1)字符‘a’则‘m+1’
(2)字符‘*’则‘n+1’
(3)字符‘.’则‘break’
解题思路3
for c in s:
if c == 'a':m=m+1
if c == '*':n=n+1
if c == '.':break
Python入门之类的基础语法 >>>链接
第1关: 类的声明与定义
解题代码
# 请在下面填入定义Book类的代码
#********** Begin *********#
class Book(object):
#********** End *********#
# '书籍类'
def __init__(self,name,author,data,version):
self.name = name
self.author = author
self.data = data
self.version = version
def sell(self,bookName,price):
print("%s的销售价格为%d" %(bookName,price))
第2关: 类的属性与实例化
解题代码
class People:
# 请在下面填入声明两个变量名分别为name何country的字符串变量的代码
#********** Begin *********#
name = ''
country = ''
#********** End **********#
def introduce(self,name,country):
self.name = name
self.country = country
print("%s来自%s" %(name,country))
name = input()
country = input()
# 请在下面填入对类People进行实例化的代码
#********** Begin *********#
p = People()
#********** End **********#
p.introduce(name,country)
第3关: 绑定与方法调用
解题代码
import fractionSumtest
# 请在下面填入创建fractionSum的实例fs的代码
#********** Begin *********#
fs = fractionSumtest.fractionSum()
#********** End **********#
n = int(input())
if n % 2 == 0:
# 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为偶数时计算的和
#********** Begin *********#
sum = fs.dcall(fs.peven,n)
#********** End **********#
else:
# 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为奇数时计算的和
#********** Begin *********#
sum = fs.dcall(fs.podd,n)
#********** End **********#
print(sum)
第4关: 静态方法与类方法
解题代码
class BookSell:
static_var = 100
def sell(self,name,author,version,price):
print("%s的销售价格为%d" %(name,int(price)))
# 请在下面填入函数修饰符将printStatic()方法声明为静态方法
#********** Begin *********#
@staticmethod
#********** End **********#
def printStatic():
print(BookSell.static_var)
# 请在下面填入函数修饰符将printVersion(cls)方法声明为类方法
#********** Begin *********#
@classmethod
#********** End **********#
def printVersion(cls):
print(cls)
第5关: 类的导入
解题代码
# 请在下面输入调用DataChange模块中eightToten(self,p)的代码,以实现将输入的八进制转换成十进制输出
#********** Begin *********#
import DataChangetest
dc = DataChangetest.DataChange()
p = input()
dc.eightToten(p)
#********** End **********#
Python入门之控制结构 - 顺序与选择结构 >>>链接
第1关: 顺序结构
解题代码
changeOne = int(input())
changeTwo = int(input())
plus = int(input())
#请在此添加代码,交换changeOne,changeTwo的值,然后计算changeOne和plus的和result的值
#********** Begin *********#
tmp = changeOne
changeOne = changeTwo
changeTwo = tmp
result = changeOne + plus
#********** End **********#
print(result)
第2关: 选择结构:if-else
解题代码
workYear = int(input())
#请在此添加代码,如果workYear < 5的判断语句
#********** Begin *********#
if workYear < 5:
#********** End ***********#
print("工资涨幅为0")
#请在此添加代码,如果workYear >= 5 and workYear < 10的判断语句
#********** Begin *********#
elif workYear >= 5 and workYear < 10:
#********** End ***********#
print("工资涨幅为5%")
#请在此添加代码,如果workYear >= 10 and workYear < 15的判断语句
#********** Begin *********#
elif workYear >= 10 and workYear < 15:
#********** End ***********#
print("工资涨幅为10%")
#请在下面填入当上述条件判断都为假时的判断语句
#********** Begin *********#
else:
#********** End ***********#
print("工资涨幅为15%")
第3关: 选择结构 - 三元操作符
解题代码
jimscore = int(input())
jerryscore = int(input())
#请在此添加代码,判断若jim的得分jimscore更高,则赢家为jim。若jerry的得分jerryscore更高,则赢家为jerry并输出赢家的名字。
#********** Begin *********#
winner = 'jim' if jimscore > jerryscore else 'jerry'
#********** End **********#
print(winner)
python基础(5-2)列表、元组、字典、集合——元组 >>>链接
第4关: 盘点订单
解题思路1-去重复思路
按顺序去掉重复
定义一个新列表List2为空
遍历List1,如果元素在List2中,则跳过,否则加入到list2中
将list2整体赋值给list1
解题思路2-单日最大订单数思路
由于规则规定订单最后4位为单日的订单序号,那么元素最后四位转换为整数后最大值就是单日订单数最多的那个元素!
程序开始,先定义最大值下标为n=0,最大值为maxorder=0。
循环变量i从下标为0到range(len(tup))挨个查看元组元素,
将第i个元组元素tup[i]后四位转成数值型
m=int(tup[i][-4:])
如果m>maxorder则
更换最大值下标n为当前下标i
更换最大值maxorder为m
循环结束后,找到的这个n就是我们要找的元素下标了
根据这个下标就能够得到该订单编号
由订单编号截取出前6位就是年月日了!
祝大家编程愉快!
解题思路3-去重复代码
list2=[]
for item in list1:
if item in list2:
pass
else:
list2.append(item)
list1=list2
print(tuple(list1))
解题思路4—单日最大订单数代码
tup=tuple(list1)
n=0
maxorder=0
for i in range(len(tup)):
if int(tup[i][-4:])>maxorder:
maxorder=int(tup[i][-4:])
n=i
print (tup[n][0:6])
python基础(3)运算符与表达式 >>>链接
第1关: 算术表达式结果是否为整数
解题思路1
(int(exp)exp)
解题思路2
(expint(exp))
python基础(4-3)程序控制-循环程序:for >>>链接
第1关: 从测试集中读取字符串并按要求打印。
解题思路1
使用切片找出前n-1个字符
循环打印这n-1个字符(带逗号)
循环后打印最后一个字符
解题思路2
前n-1个字符组成的字符串:s[0:-1]
最后一个字符:s[-1]
解题思路3
for c in s[0:-1]:
print(c,end=',')
print (s[-1])
第2关: 统计字符出现个数
解题思路1
设置两个字符统计的辅助变量m,n
循环遍历列表中的字符,是‘a’则m+1,‘*’则n+1
遇到’.'则停止循环
解题思路2
循环遍历,循环中分为三种情况,
(1)字符‘a’则‘m+1’
(2)字符‘*’则‘n+1’
(3)字符‘.’则‘break’
解题思路3
for c in s:
if c == 'a':m=m+1
if c == '*':n=n+1
if c == '.':break
python基础(5-2)列表、元组、字典、集合——元组 >>>链接
第4关: 盘点订单
解题思路1-去重复思路
按顺序去掉重复
定义一个新列表List2为空
遍历List1,如果元素在List2中,则跳过,否则加入到list2中
将list2整体赋值给list1
解题思路2-单日最大订单数思路
由于规则规定订单最后4位为单日的订单序号,那么元素最后四位转换为整数后最大值就是单日订单数最多的那个元素!
程序开始,先定义最大值下标为n=0,最大值为maxorder=0。
循环变量i从下标为0到range(len(tup))挨个查看元组元素,
将第i个元组元素tup[i]后四位转成数值型
m=int(tup[i][-4:])
如果m>maxorder则
更换最大值下标n为当前下标i
更换最大值maxorder为m
循环结束后,找到的这个n就是我们要找的元素下标了
根据这个下标就能够得到该订单编号
由订单编号截取出前6位就是年月日了!
祝大家编程愉快!
解题思路3-去重复代码
list2=[]
for item in list1:
if item in list2:
pass
else:
list2.append(item)
list1=list2
解题思路4—单日最大订单数代码
tup=tuple(list1)
n=0
maxorder=0
for i in range(len(tup)):
if int(tup[i][-4:])>maxorder:
maxorder=int(tup[i][-4:])
n=i
print (tup[n][0:6])
04-2 Python程序设计入门2-基本输入输出、字符串、内置函数实训 >>>链接
第1关: python输出
解题思路1
print(’{:>3}%@{}’.format(N,’=’*(N//5)))
第2关: 字符变量统计
解题思路1
m=s.count(’,’)+s.count(’?’)
解题思路2
n=len(s)-m
第3关: 身体质量指数(BMI)
解题思路1
print(“BMI是{:.1f}”.format(w/(h**2)))
第4关: 含字符串、内置函数、特殊要求的输出
解题思路1
a,x = input().split(’,’) # 请输入1个整数和1个符号,逗号隔开
print(x**eval(a),a,x**eval(a))
注意input()必须紧跟函数
解题思路2
以下都可以
print("{:.2f}"’%’.format(3.1415926))
print("{:.2f}""%".format(3.1415926))
print("{:.2f}%".format(3.1415926))
print(’{:.2f}%’.format(3.1415926))
04-3 Python程序设计入门2-课后练习 >>>链接
第2关: 按要求输出
解题思路1
print(’{}+{}-{}[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqqZCAZZ-1597031162718)(/api/attachments/639315)]{}={}’.format(a,b,c,d,a+b-c*****d))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsOT7raJ-1597031162724)(/api/attachments/639307)]
04-1 Python程序设计入门2-视频指导 >>>链接
第2关: python当做计算器
解题思路1
a=int(input())
b=int(input())
print(’{}+{}={}’.format(a,b,a+b))
print(’{}-{}={}’.format(a,b,a-b))
print(’{}{}={}’.format(a,b,ab))
print(’{}/{}={}’.format(a,b,a/b))
a=float(input())
b=float(input())
print(’{:.2f}+{:.2f}={:.2f}’.format(a,b,a+b))
print(’{:.2f}-{:.2f}={:.2f}’.format(a,b,a-b))
print(’{:.2f}{:.2f}={:.2f}’.format(a,b,ab))
print(’{:.2f}/{:.2f}={:.2f}’.format(a,b,a/b))
03-6 Python程序设计入门-闯关升级 >>>链接
第3关: 判断变量数据类型并输出
代码完善1
改错行
new_data=#使用eval函数将my_data的类型转换为应有的数据类型变量new_data
new_data=eval(my_data)
代码完善2
代码完善2
new_data_type=#使用type函数获取new_data的数据类型
new_data_type=type(new_data)
源代码
"""
#本关的任务是请编写代码查看从测试集中读入数据的类型!
"""
my_data=input()#从测试集获取数据给my_data,此时获取的数据应为字符串型
#############请在此之后开始你的编码#################
new_data=eval(my_data)#使用eval函数将my_data的类型转换为应有的数据类型变量new_data
new_data_type=type(new_data)#使用type函数获取new_data的数据类型
print( new_data_type )#打印这个数据类型new_data_type
#############请在此之前完成你的编码#################
第4关: 数据类型转换(实型、浮点型之间的转换)
使用float函数将my_num转换为小数
代码完善1
my_num_float=#使用float函数将my_num转换为小数
my_num_float=float(my_num)
采用round函数四舍五入取整
my_num_float1=#采用round函数四舍五入取整
round(my_num_float,my_n_int)
直接舍去
my_num_float2=#巧妙采用将小数放大后取整再缩小的方式可以获取直接截取
可将12.3456*100变为1234.56。采用int对1234.56直接取整获得1234。再讲1234/100得到12.34
对my_num_float变量就是 int(my_num_float*100)/100
源码
#############完成以下代码实现程序功能################
my_num=input() #从测试集获取浮点型数字
my_n=input() #从测试集获要保留的位n
my_num_float=float(my_num ) #使用float函数将my_num转换为小数
my_n_int=int(my_n ) #使用int函数将my_bit转换为整数
my_num_float1=round(my_num_float,my_n_int) #采用round函数四舍五入取整
my_num_float2=int(my_num_float*100)/100 #巧妙采用将小数放大后取整再缩小的方式可以获取直接截取
print(my_num_float1) #输出结果1
print(my_num_float2) #输出结果2
###################end################################
第5关: 多变量赋值-交换两个变量的值
解题思路1
使用传统方式进行x、y值互换
t=x
x=y
y=t
可以交换x,y两个值
解题思路2
多变量赋值
a,b=b,a
可以直接实现a,b值的互换
解题思路3
源码
################开始完成代码补充############
a=eval(input()) #获取测试集a的值
b=eval(input()) #获取测试集b的值
x=a #将a的值赋值给x
y=a+b #将a+b的值赋值给y
#使用传统方式进行x、y值互换
t=x
x=y
y=t
print(x,y) #输出交换后的值
#使用多变量赋值方式交换a,b
a,b=b,a #在a后补全该行代码
print(a,b) #输出交换后的值
################END########################
03-2 Python程序设计入门1-运算符与表达式 >>>链接
第1关: 正确写出表达式
算术表达式
算术表达式依靠变量来写
2分之3的3倍写成3/2*3
因此a分之b的c倍就应写成b/a*3
依次去写剩余部分
复杂表达式
复杂表达式
x5=#(4)输出c、d、e是否按从小到大顺序排列
是否按从小到大顺序排列可以使用关系表达式连写。
比如:a
x6=#(5)输出e是否同时能被2、3整除
e被2整除,可写为e除以2后的余数是否为0.表达式写为e%2==0,能整除则运算结果为真,否则为假。同理可计算e是否能整除3。两个结果再进行逻辑与运算即可获得结果
x7=#(6)输出d是否高于或等于这5个数的平均值
关系表达式,>=号左边应为d,右边是5个数的平均值表达式。如果这个关系表达式真,则运算结果为真。d高于或等于平均值。反之则为假。
源码
源码
a=int(input())#输入a并转换为整型
b=int(input())#输入b并转换为整型
c=int(input())#输入c并转换为整型
d=int(input())#输入d并转换为整型
e=int(input())#输入e并转换为整型
x1=b/a*3 # x1为2分之3的3倍
x2=(b/a)**3
x3=d%e
x4=d//e
print(x1)
print(x2)
print(x3)
print(x4)
x5=(c
x6=(e%2==0 and e%3==0)
x7=(d>=(a+b+c+d+e)/5)
print(x5)
print(x6)
print(x7)
第3关: 注释
解题思路1
此题考察注释的写法
1、前两行为单行注释,在注释的内容前面加#即可,注意不要注释掉前面正确的语句
2、多行注释,在若干行的“以下为注释信息”前后添加三个单引号或双引号即可
凑占比,不要点开
凑占比,不要点开
第4关: 缩进
解题思路1
File "train/suojin.py", line 2
b=4
^
IndentationError: unexpected indent
第二行
b=4处有意想不到的缩进
删除缩进即可
解题思路2
File “train/suojin.py”, line 5
print(“b>0”)
^
IndentationError: expected an indented block
第5行,
print(“b>0”)
预计一个缩进块
在此处增加一个TAB缩进即可
解题思路3
File “train/suojin.py”, line 6
print(b)
^
TabError: inconsistent use of tabs and spaces in indentation
第6行
TAB错误,不一致的使用制表符和空格缩进
这里的缩进没有使用TAB而是使用的空格,删除空格并按TAB键输入缩进即可
03-3 Python程序设计入门2-基本输入输出、字符串、内置函数-视频学习 >>>链接
第2关: python当做计算器
解题思路1
a=int(input())
b=int(input())
print(’{}+{}={}’.format(a,b,a+b))
print(’{}-{}={}’.format(a,b,a-b))
print(’{}{}={}’.format(a,b,ab))
print(’{}/{}={}’.format(a,b,a/b))
a=float(input())
b=float(input())
print(’{:.2f}+{:.2f}={:.2f}’.format(a,b,a+b))
print(’{:.2f}-{:.2f}={:.2f}’.format(a,b,a-b))
print(’{:.2f}{:.2f}={:.2f}’.format(a,b,ab))
print(’{:.2f}/{:.2f}={:.2f}’.format(a,b,a/b))
第3关: 如何输出3.14%
解题思路1
print(’{:.2f}%’.format(pi))
解题思路2
print(’%.2f’%pi+’%’)
第5关: 内置函数
解题思路1
###1数学函数###
print(abs(-2)) #求数值的绝对值
print(max(1,6,3)) # 取3个中较大者
print(min(7,2,3)) # 取3个中较小者
print(pow(2,5)) #返回两个数值的幂运算值
print(round(3.1415926,3)) #对浮点数进行保留3位小数的四舍五入求值
print(sum([1,2,3])) # 求和
print(divmod(19,4)) #返回两个数值的商和余数
print(divmod(19.0,4)) #返回两个数值的商和余数
print(divmod(19.5,4)) #返回两个数值的商和余数
str_example = ‘hello world!hello Python!’
index1=str_example.find(“or”) #找到or在字符串中的位置
print(index1)
result = str_example.count(“he”) #统计he在字符串中出现的次数
print(result)
print(int(‘111’,2) ) #二进制111变成十进制整数
print(int(‘111’,8) ) #八进制111变成十进制整数
print(int(‘111’,16)) #十六进制111变成十进制整数
print(chr(100)) #输出ASCII为100的值对应的字符
print(ord(‘H’) ) #输出字母H的ASCII值
print(ord(‘h’) ) #输出字母h的ASCII值
Python 计算思维训练——输入和错误处理-jzx >>>链接
第1关: 交互式输入 - 输出前 n 个偶数
解题代码
# 请在此处填写代码
#********** Begin **********#
n = int(input())
for i in range(2, 2*n+1, 2):
print(i)
#********** End **********#
第2关: 可执行对象内置函数 - 计算公式的微分求导
解题代码
#coding=utf-8
from math import *
formula = input()
#********** Begin **********#
func = """
def f(x):
return %s
""" % formula
exec(func)
def num_derivative(f, x, h=1E-5):
return (f(x+h) - f(x-h))/(2*h)
rx = input()
x=float(rx)
print('%.2f'%(num_derivative(f, x)))
#********** End **********#
第3关: 文件读写 - 将二维表的内容写入文件
解题代码
#coding=utf-8
def write_file():
#********** Begin **********#
data = [[ 0.75, 0.29619813, -0.29619813, -0.75 ],
[ 0.29613, 0.116978, -0.117778, -0.29613],
[-0.29, -0.11698, 0.11697778, 0.29619813],
[-0.75, -0.29619813, 0.29619813, 0.75 ]]
outfile = open('src/step3/output/data.txt', 'w')
for row in data:
for column in row:
outfile.write('%14.8f' % column)
outfile.write('\n')
outfile.close()
#********** End **********#
第4关: 库函数 - 利率计算库
解题代码
# 请在此处填写代码
#********** Begin **********#
from math import log as ln
def present_amount(A0, p, n):
return A0*(1 + p/(360.0*100))**n
def initial_amount(A, p, n):
return A*(1 + p/(360.0*100))**(-n)
def days(A0, A, p):
return ln(A/A0)/ln(1 + p/(360.0*100))
def annual_rate(A0, A, n):
return 360*100*((A/A0)**(1.0/n) - 1)
#********** End **********#
原文链接:https://blog.csdn.net/weixin_44505587/article/details/107905667