第一階段
第一關(guān)-字符串反轉(zhuǎn)
將輸入的字符串str
進(jìn)行反轉(zhuǎn)。
編程要求
補(bǔ)全右側(cè)inversion(self,str)
函數(shù)實(shí)現(xiàn)字符串的反轉(zhuǎn)并返回反轉(zhuǎn)之后的字符串易迹,其中函數(shù)參數(shù)str
表示要反轉(zhuǎn)的字符串巾遭。
測試說明
輸入:
hello world
輸出:
dlrow olleh
官方解答:考查了新建列表肉康,用len()函數(shù)求列表的長度、向列表中append()元素灼舍、按照下標(biāo)取出列表中對(duì)應(yīng)的元素
1.1 新建一個(gè)列表吼和,將str列表中的元素倒序append進(jìn)新列表中
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def inversion(self,str):
# ********* Begin *********#
new_str = []
index = len(str) # 計(jì)算列表中元素的個(gè)數(shù)
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 *********#
第二關(guān)-扔桃子
動(dòng)物園有一只小猴子喜歡吃桃子,不過它有個(gè)很獨(dú)特的習(xí)慣骑素,每次都把找到的桃子分成相等的兩份炫乓,吃掉一份,留一份。如果不能等分厢岂,小猴子就會(huì)丟掉一個(gè)然后再分光督。第二天再繼續(xù)這個(gè)過程,直到最后剩一個(gè)桃子了塔粒,也直接扔掉结借。
有一天,小猴子找到了n
個(gè)桃子卒茬,請(qǐng)問船老,它在吃這些桃子的過程中,一共要扔掉多少個(gè)桃子圃酵。
編程要求
- 補(bǔ)全方法
getNum(self,n)
柳畔,計(jì)算小猴子總共要扔掉多少個(gè)桃子。將最后的結(jié)果作為函數(shù)的返回值返回郭赐。
具體請(qǐng)參見后續(xù)測試樣例薪韩。
測試說明
樣例1
輸入:
3
輸出:
2
樣例2
輸入:
1544
輸出:
3
官方解答:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def getNum(self,n):
#********* Begin *********#
count = 0 #用來統(tǒng)計(jì)扔掉的桃子的個(gè)數(shù)
while n :
if n%2 == 1: # 說明此時(shí)手中所剩的桃子的個(gè)數(shù)為奇數(shù)
n -= 1 # 扔掉一個(gè)桃子
count += 1 # 扔掉的桃子的個(gè)數(shù)加一
else: # 如果此時(shí)手中的桃子的個(gè)數(shù)正好可以平分
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整除 即此時(shí)手中的桃子不能平分
n = n // 2 # python中的整除用//
sum = sum + 1
else: # 如果此時(shí)手中的桃子的個(gè)數(shù)正好可以平分
n = n // 2
return sum
#********* End *********#
第三關(guān)-旋轉(zhuǎn)數(shù)組
在計(jì)算機(jī)中,一張數(shù)字圖像捌锭,可以被看做是一個(gè)矩陣或者說數(shù)組俘陷。
學(xué)過線性代數(shù)的同學(xué)對(duì)矩陣肯定不陌生。一般來說观谦,圖像是一個(gè)標(biāo)準(zhǔn)的矩形拉盾,有著寬度(width
)和高度(height
)。而矩陣有著行(row
)和列(column
)豁状,矩陣的操作在數(shù)學(xué)和計(jì)算機(jī)中的處理都很常見且成熟捉偏,于是很自然的就把圖像作為一個(gè)矩陣,把對(duì)圖像的操作轉(zhuǎn)換成對(duì)矩陣的操作泻红,實(shí)際上所有的圖像處理工具都是這么做的夭禽。
所以我們?nèi)绻獙?duì)圖像進(jìn)行操作,其實(shí)也就是在對(duì)一個(gè)數(shù)組進(jìn)行操作谊路。
本關(guān)要求你編寫代碼實(shí)現(xiàn)對(duì)一張圖像的90°
旋轉(zhuǎn)讹躯,即對(duì)矩陣的90°
旋轉(zhuǎn)。
編程要求
補(bǔ)全函數(shù)rotate(self,metrix)
凶异,實(shí)現(xiàn)對(duì)輸入的數(shù)組進(jìn)行旋轉(zhuǎn)的功能蜀撑。
注意:
你必須使用原地算法來旋轉(zhuǎn)圖像,而不能重新創(chuàng)建一個(gè)數(shù)組剩彬,本關(guān)不需要你輸出數(shù)組酷麦,只需要修改數(shù)組metrix
即可。
測試說明
輸入:
3 3
1 2 3
4 5 6
7 8 9
原地旋轉(zhuǎn)喉恋,使其變?yōu)?
[7, 4, 1]
[8, 5, 2]
[9, 6, 3]
輸入的3 3
是用作構(gòu)建數(shù)組的不會(huì)作為函數(shù)的參數(shù)輸入沃饶,可以忽略母廷。
官方解答: 目前還不太理解,還要總結(jié)矩陣逆時(shí)針旋轉(zhuǎn)90度的情況http://www.reibang.com/p/59bc67c9ed03
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Task:
def rotate(self,matrix):
#********* Begin *********#
length = len(matrix) # 統(tǒng)計(jì)出該矩陣中元素的個(gè)數(shù)
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] 先將矩陣的行進(jìn)行倒序操作
#zip(*matrix[::-1]) 將新矩陣的列當(dāng)成行依次輸出
#********* End *********#
第四關(guān)-計(jì)算日期
我們吃的食物都有保質(zhì)期糊肤,現(xiàn)在食品監(jiān)督管理局想要制作一個(gè)能準(zhǔn)確計(jì)算食品過期日期的小程序琴昆,需要請(qǐng)你來進(jìn)行設(shè)計(jì)。
例如:A食品在2018年1月1日生產(chǎn)馆揉,保質(zhì)期是20
天业舍,則它的過期日期在2018年1月21日。
編程要求
補(bǔ)全函數(shù)getDate(self,releaseDate,day)
其中releaseDate
表示食品出廠日期day
表示保質(zhì)期升酣,請(qǐng)根據(jù)傳入的數(shù)據(jù)計(jì)算食品的過期日期舷暮,格式為yyyy-mm-dd
即4
位年份2
位月份2
位日期。比如:2015-02-19
請(qǐng)嚴(yán)格按照格式書寫噩茄,不能出現(xiàn)其它文字或符號(hào)下面,并將最終結(jié)果做為函數(shù)的返回值返回。
測試說明
樣例1:
輸入:
2016-01-01
绩聘,20
輸出:
2016-01-21
官方解答:考查對(duì)datetime類的了解沥割,該類的各種方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
class Task:
def getDate(self,releaseDate,day):
# 先將releaseDate 以-為分割,分到list中(此時(shí)各個(gè)元素是string類型的)凿菩,再將字符串強(qiáng)制類型轉(zhuǎn)化為整型
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")#轉(zhuǎn)化成datetime格式
end = (start + datetime.timedelta(days=day)).strftime("%Y-%m-%d")#轉(zhuǎn)換標(biāo)準(zhǔn)的輸出格式
return end
#********* End *********#