第一阶段
第一关-字符串反转
将输入的字符串str
进行反转。
编程要求
补全右侧inversion(self,str)
函数实现字符串的反转并返回反转之后的字符串,其中函数参数str
表示要反转的字符串。
测试说明
输入:
hello world
输出:
dlrow olleh
官方解答:考查了新建列表,用len()函数求列表的长度、向列表中append()元素、按照下标取出列表中对应的元素
1.1 新建一个列表,将str列表中的元素倒序append进新列表中
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def inversion(self,str):
# ********* Begin *********#
new_str = []
index = len(str) # 计算列表中元素的个数
while index:
index -= 1
new_str.append(str[index])
return new_str
# ********* End *********#
我的解答:考查列表的切片操作
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def inversion(self,str):
#********* Begin *********#
new_str = str[::-1]
return new_str
#********* End *********#
第二关-扔桃子
动物园有一只小猴子喜欢吃桃子,不过它有个很独特的习惯,每次都把找到的桃子分成相等的两份,吃掉一份,留一份。如果不能等分,小猴子就会丢掉一个然后再分。第二天再继续这个过程,直到最后剩一个桃子了,也直接扔掉。
有一天,小猴子找到了n
个桃子,请问,它在吃这些桃子的过程中,一共要扔掉多少个桃子。
编程要求
- 补全方法
getNum(self,n)
,计算小猴子总共要扔掉多少个桃子。将最后的结果作为函数的返回值返回。
具体请参见后续测试样例。
测试说明
样例1
输入:
3
输出:
2
样例2
输入:
1544
输出:
3
官方解答:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def getNum(self,n):
#********* Begin *********#
count = 0 #用来统计扔掉的桃子的个数
while n :
if n%2 == 1: # 说明此时手中所剩的桃子的个数为奇数
n -= 1 # 扔掉一个桃子
count += 1 # 扔掉的桃子的个数加一
else: # 如果此时手中的桃子的个数正好可以平分
n/=2
return count
#********* End *********#
我的解答:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def getNum(self,n):
#********* Begin *********#
sum = 0
while n > 0:
if(n % 2 != 0): # 不能被2整除 即此时手中的桃子不能平分
n = n // 2 # python中的整除用//
sum = sum + 1
else: # 如果此时手中的桃子的个数正好可以平分
n = n // 2
return sum
#********* End *********#
第三关-旋转数组
在计算机中,一张数字图像,可以被看做是一个矩阵或者说数组。
学过线性代数的同学对矩阵肯定不陌生。一般来说,图像是一个标准的矩形,有着宽度(width
)和高度(height
)。而矩阵有着行(row
)和列(column
),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就把图像作为一个矩阵,把对图像的操作转换成对矩阵的操作,实际上所有的图像处理工具都是这么做的。
所以我们如果要对图像进行操作,其实也就是在对一个数组进行操作。
本关要求你编写代码实现对一张图像的90°
旋转,即对矩阵的90°
旋转。
编程要求
补全函数rotate(self,metrix)
,实现对输入的数组进行旋转的功能。
注意:
你必须使用原地算法来旋转图像,而不能重新创建一个数组,本关不需要你输出数组,只需要修改数组metrix
即可。
测试说明
输入:
3 3
1 2 3
4 5 6
7 8 9
原地旋转,使其变为:
[7, 4, 1]
[8, 5, 2]
[9, 6, 3]
输入的3 3
是用作构建数组的不会作为函数的参数输入,可以忽略。
官方解答: 目前还不太理解,还要总结矩阵逆时针旋转90度的情况https://www.jianshu.com/p/59bc67c9ed03
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def rotate(self,matrix):
#********* Begin *********#
length = len(matrix) # 统计出该矩阵中元素的个数
for i in range(0,length):
for j in range(0,length - i):
tmp = matrix[i][j]
matrix[i][j] = matrix[length - j - 1][length - i - 1]
matrix[length - j - 1][length - i - 1] = tmp
for i in range(0,length):
for j in range(0,int(length/2)):
tmp = matrix[j][i]
matrix[j][i] = matrix[length - j - 1][i]
matrix[length - j - 1][i] = tmp
#********* End *********#
我的解答:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def rotate(self,matrix):
#********* Begin *********#
matrix[:] = map(list,zip(*matrix[::-1]))
# matrix[::-1] 先将矩阵的行进行倒序操作
#zip(*matrix[::-1]) 将新矩阵的列当成行依次输出
#********* End *********#
第四关-计算日期
我们吃的食物都有保质期,现在食品监督管理局想要制作一个能准确计算食品过期日期的小程序,需要请你来进行设计。
例如:A食品在2018年1月1日生产,保质期是20
天,则它的过期日期在2018年1月21日。
编程要求
补全函数getDate(self,releaseDate,day)
其中releaseDate
表示食品出厂日期day
表示保质期,请根据传入的数据计算食品的过期日期,格式为yyyy-mm-dd
即4
位年份2
位月份2
位日期。比如:2015-02-19
请严格按照格式书写,不能出现其它文字或符号,并将最终结果做为函数的返回值返回。
测试说明
样例1:
输入:
2016-01-01
,20
输出:
2016-01-21
官方解答:考查对datetime类的了解,该类的各种方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
class Task:
def getDate(self,releaseDate,day):
# 先将releaseDate 以-为分割,分到list中(此时各个元素是string类型的),再将字符串强制类型转化为整型
yy,mm,dd = [int(i) for i in releaseDate.split("-")]
return str(datetime.date(yy,mm,dd)+datetime.timedelta(days=day))
我的解答:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
class Task:
def getDate(self,releaseDate,day):
#********* Begin *********#
start = datetime.datetime.strptime(releaseDate, "%Y-%m-%d")#转化成datetime格式
end = (start + datetime.timedelta(days=day)).strftime("%Y-%m-%d")#转换标准的输出格式
return end
#********* End *********#