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
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值