第1关:字符串反转
挑战任务
将输入的字符串str进行反转。
编程要求
补全右侧inversion(self,str)函数实现字符串的反转并返回反转之后的字符串,其中函数参数str表示要反转的字符串。
测试说明
将反转的字符串作为函数的返回值返回
输入:
hello world
输出:
dlrow olleh
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def inversion(self, str):
new_str = []
index = len(str) # 计算列表中元素的个数
while index:
index -= 1
new_str.append(str[index])
return new_str
第2关:简单计算器
挑战任务
本关任务:编写一个能计算两个数字加减乘除的小程序。
编程要求
根据提示,在右侧编辑器补充代码,实现计算并返回简单表达式的值。
返回结果请保留2位小数。
本关涉及的代码文件src/step3/easy_cal_stu.py,请读者仔细阅读并完成空缺代码的填写。
测试说明
本关的测试文件是src/step3/main.py。
读者将src/step3/easy_cal_stu.py中的代码补充完毕,然后点击评测,平台自动编译运行src/step3/main.py,并以标准输入方式提供测评输入;
平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。
我会对你编写的代码进行测试:
每次测试输入3行。
第一行输入一个字符op,表示要进行的运算,保证表达式进行的运算只有加减乘除,即该字符只可能是+ - * /中的一个。
第二行输入一个数字,表示第一个操作数num_1。
第三行输入一个数字,表示第二个操作数num_2。
测试输入:
*
5
6
预期输出:
30.00
class Solution:
def solve(self, op, num_1, num_2):
'''
:type op, num_1, num_2: str, int, int
:rtype : Str
'''
#请在此添加代码,实现计算并返回表达式的结果,要求结果保留2位小数
#********** Begin *********#
ops=['+','-','*','/']
if op in ops:
s=eval('%d %s %d'%(num_1,op,num_2))
return ("%.2f"%s)
#********** End *********#
第3关:九九乘法表
挑战任务
打印九九乘法表。
编程要求
利用for循环来打印下面的九九乘法表。
提示:相邻两列之间相隔4个空格的距离。
测试说明
测试输入:无输入
预期输出:
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
for a in range(1,10):
for b in range(1,a+1):
print ("%dx%d=%d " %(a,b,a*b),end ="")
print ()
第4关:数组排序
挑战任务
本关挑战任务是对一个数组进行排序,排序需要遵守一些规则:
先对数组从左到右,相邻元素进行比较,如果第一个比第二个大,就交换它们,进行一个升序排序;
再对数组从右到左,相邻元素进行比较,如果第一个比第二个小,就交换它们,进行一个降序排序;
以此类推,持续的、依次的改变排序的方向,并不断缩小没有排序的数组范围;
按照这种规则依次给整个数组排序,并将排序过程打印到控制台。
比如给出一组数据4,1,3,5,2,排序过程如下:
最后得到结果:1 2 3 4 5。
编程要求
请在右侧编辑器中填充代码,补全sort(self,xlist)函数,实现指定的排序功能,并打印出排序过程,函数参数说明如下:
xlist:待排序的数组
注:不需排序的数组(如:1 2 3),直接打印原数组。
测试说明
样例1:
输入:
2 3 4 5 1
输出:
样例2:
输入:
1 5 4 3 2 6
输出:
class Task:
def sort(self, xlist):
# ********* Begin *********#
if sorted(xlist) == xlist:
xlist1 = list(map(str, xlist))
print(' '.join(xlist1))
else:
for i in range(int(len(xlist)/2)):
for i in range(len(xlist) - 1):
if xlist[i] > xlist[i + 1]:
xlist[i],xlist[i+1] = xlist[i+1],xlist[i]
xlist1 = list(map(str, xlist))
print(' '.join(xlist1))
for i in range(len(xlist) - 1, 0, -1):
if xlist[i] < xlist[i-1]:
xlist[i], xlist[i-1] = xlist[i-1], xlist[i]
xlist1 = list(map(str, xlist))
print(' '.join(xlist1))
# ********* End *********#
第5关:找基因
任务描述
生物学家使用A,C,T, 和G构成的字符串来构建一个基因组,基因是其中的的一个子串,它固定从ATG这三元组后开始,在TAG, TAA,或者TGA之前结束。此外,每个基因字符串的长度是3的倍数,而且不包括:ATG,TAG,TAA,和TGA这四种子串。 输入一个字符串(基因组),输出其中所有的基因,如果没有找到基因,则输出error。
测试说明
每一行输入一个由A,C,T,和G构成的字符串,分行输出找到的基因字符串(3的倍数长度),注意,一个基因字符串输出一行。
输入输出样例
输入:TTATGTTTTAAGGATGGGGCGTTAGTT
输出:
TTT
GGGCGT
输入:TGTGTGTATAT
输出:error
def find_gene(genes):
if genes.find('ATG') != -1:
index = genes.find('ATG')
start = genes[index+3:] #截至到起始密码子之后
number = len(start)//3 #使用列表的手段,将字符串三个三个拿出来
gene = []
for i in range(number):
gene.append(start[3*i:3*i+3])
final =['TAG','TAA','TGA'] #将终止密码子储存起来
final_index = []
for x in final:
if x in gene:
final_index.append(gene.index(x))
if final_index: #如果存在终止密码子继续运行
first = gene[:min(final_index)] #终止密码子等价
print(''.join(first)) #取出第一段基因
second = gene[min(final_index)+1:] #取出其余部分转换为字符串开始迭代
second = ''.join(second)
find_gene(second)
else: #不存在的话就,走人
print('error')
genes = input('')
if genes.find('ATG') == -1: #起始密码子都不存在的情况
print('error')
else:
find_gene(genes)