1. 程式人生 > >Python期末測試

Python期末測試

文章目錄

1.

Description:

給定用於表示年、月、日的3個整數y、m和d,判定該日期是該年的第幾天。

Input:

輸入用於表示日期(年、月、日)的3個正整數y、m和d,肯定是正整數,但是否屬於合法的日期資料未知。

Output:

返回值為整型
如所給日期資料不合法,返回-1。
如所給日期資料合法,則返回該日期是該年的第幾天。
將程式碼寫入函式func1

Sample Input:

func1(2019,1,32)
func1(2019,3,1)

Sample Output:

-1
60

2.

Description:

已知每隻雞有2只腳,每隻兔子有4只腳,求解雞兔同籠問題。給定雞和兔子的頭的總數m和腳的總數n。求雞和兔子的數量。

Input:

給定m和n為整數。

Output:

如果m和n中任何一個小於0,返回None。
如任何一個解不是整數,或任何一個解小於0,返回None。
返回元組(雞的數量, 兔子的數量)
將程式碼寫入函式func2

Sample Input:

func2(35, 110)
func2(35, 111)
func2(0, 0)
func2(100, 100)

Sample Output:

(15, 20)
None
(0, 0)
None

3.

Description:

判定一個整數列表裡的元素排序後能否構成等差數列。

Input:

給定lst為整數列表或空列表,不保證列表元素有序。

Output:

如果列表為空列表或只有一個元素,返回None。
如果列表有兩個元素,返回True。
如果列表有三個及以上的元素,根據情況返回True或False。
將程式碼寫入函式func3

Sample Input:

func3([1])
func3([19, 1])
func3([19, -1, 100])
func3([33, -7, 3, 13, 43, 53, 23])

Sample Output:

None
True
False
True

4.

Description:

計算並返回整數列表的中位數。中位數的含義:對於一個有序的數列,排列位置位於整個列表中間的那個元素的值即為中位數。如果數列有偶數個值,取最中間的兩個數值的平均數作為中位數。

Input:

給定lst為列表,不保證列表元素有序,不保證每個頂層元素都是整數,也不保證列表中一定有元素。

Output:

如果列表為空列表,返回None。
如果列表的頂層元素出現整數以外的型別,返回None。
對於非空的整數列表返回中位數(結果取整)。
將程式碼寫入函式func4

Sample Input:

func4([1, "abc"])
func4([19, [1, 2, 3]])
func4([19, -1, 100])
func4([19, -1, 1000, 101])

Sample Output:

None
None
19
60

5.

Description:

輸入一個包含3到11個單詞的字串,單詞與單詞之間用一個空格分開,最前和最後沒有空格,其中的單詞一定是0-9數字的英文單詞(單詞的字母可能大寫也可能小寫)。請編寫程式將其轉換為阿拉伯數字的字串。

Input:

給定sentence為字串。

Output:

返回電話號碼字串,如果輸入的長度不合法則返回None。
將程式碼寫入函式func5

Sample Input:

func5("one one two two three three four")
func5("One One Zero")
func5("Nine one one")

Sample Output:

"1122334"
"110"
"911"

6.

Description:

給定4個整數a, b, c, d,求集合s = {x / y | a <= x <= b, c <= y <= d}中元素的個數。

Input:

整數a, b, c, d滿足1 <= a <= b <= 100, 1 <= c <= d <= 100。

Output:

返回s中元素的個數。
將程式碼寫入函式func6

Sample Input:

func6(1, 10, 1, 1)
func6(1, 10, 1, 10)
func6(10, 10, 1, 10)

Sample Output:

10
63
10

7.

Description:

輸入兩個字串引數s1, s2(均不為空字串),和一個非零正整數n。請按照如下規則將字串s2插入到s1中,並返回生成的字串:
s1中每隔n個字元,插入一次s2;
如果最後一次不足n個字元,則先用空格符號補全到n個字元,然後插入一次s2

Input:

s1, s2均不為空字串,n為非零正整數

Output:

返回結果字串
將程式碼寫入函式func7(s1, s2, n)

Sample Input:

func7('abcd','#',1)
func7('abcd','##',2)
func7('abcd','##',3)
func7('abcd','##',5)

Sample Output:

'a#b#c#d#'
'ab##cd##'
'abc##d  ##'
'abcd ##'

8.

Description:

給定一個字串,找出其中“<tag>”形式的標籤片段,並替換成“[TAG-len]”形式的片段。其中tag是由字母、數字和下劃線構成可變的標籤文字,TAG是將tag中的英文字母全部轉換成大寫字母后的形式,len是TAG的長度,詳見測試用例。

Input:

給定sentence為字串,不包含中文。字串中可替換部分可能出現0次或多次。

Output:

返回經過替換的字串。如沒有需要替換的內容,則原樣返回。
將程式碼寫入函式func8

Sample Input:

func8("President <4t>")
func8("hello world")
func8("he defended <_abc>, his decision to <43>")

Sample Output:

"President [4T-2]"
"hello world"
"he defended [_ABC-4], his decision to [43-2]"

Reference Code

import math
import re

def func1(y,m,d,md=[31,28,31,30,31,30,31,31,30,31,30,31]):
    if (y%4==0 and y%100!=0) or y%400==0:md[1]=29
    return -1 if m>12 or d>md[m-1] else sum(md[i] for i in range(m-1))+d

def func2(m,n):
    return None if m<0 or n<0 or n%2!=0 or not 2*n>=4*m>=n else (2*m-n//2,n//2-m)

def func3(lst,i=0,d=0):
    return None if len(lst)<2 else func3(sorted(lst),1,sorted(lst)[1]-sorted(lst)[0]) if i==0 else True if i==len(lst) else False if lst[i]-lst[i-1]!=d else func3(lst,i+1,d)
	
def func4(lst):
    for i in lst:
        if type(i)!=int:return None
    return (sorted(lst)[len(lst)//2]+sorted(lst)[~(len(lst)//2)])//2
	
def func5(sentence,wton={'one':1,'two':2,'three':3,'four':4,'five':5,'six':6,'seven':7,'eight':8,'nine':9,'zero':0}):
    sentence=sentence.lower().split()
    if not 3<=len(sentence)<=11:return None
    return ''.join([str(wton[i]) for i in sentence])

def func6(a,b,c,d):
    return len(set(x/y for x in range(a,b+1) for y in range(c,d+1)))

def func7(s1,s2,n,ans=''):
    if len(s1)%n!=0:s1=s1+' '*(n-len(s1)%n)
    for i in range(len(s1)//n):ans+=s1[i*n:(i+1)*n]+s2
    return ans
		
def func8(sentence):
    for i in re.findall(r'<(.*?)>',sentence):sentence=re.sub(r'<.*?>','['+i.upper()+r'-'+str(len(i))+']',sentence,1)
    return sentence

if __name__ == "__main__":
    pass