接触越多,越觉得python简洁方便啊。。
1. 编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。
def cal(n):
cnt1=cnt2=cnt3=cnt4=0
for i in n:
if i.islower():
cnt1+=1
elif i.isupper():
cnt2+=1
elif i.isdigit():
cnt3+=1
else:
cnt4+=1
return cnt1,cnt2,cnt3,cnt4
print(cal(input()))
这里有一个值得注意的点:四个数逗号连接就自动生成了元组。事实上,任何类型用逗号连接都会返回一个由其构成的元组。
>>> 1,'a',2
(1, 'a', 2)
>>> [1,2],'a',(1,2)
([1, 2], 'a', (1, 2))
2、编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。
def cal(*p):
p=list(map(int,p))
print('最大值为:',max(p))
print('和为:',sum(p))
cal(*input().split())
任意多个整数则需要用到可变长参数(即在函数定义的参数前加*),而最后一行调用函数时,由于.split()会返回一个列表,这时再函数调用的参数解包即可将其序列中的元素传给各个形参。
3. 编写函数,模拟内置函数s3、orted()。(你需要先读内置函数 sorted() 的关方文档,搞清楚它的输入参数和输出)
def Sorted(iterable,key=None,reverse=None):
l=list()
s=iterable[:]
if key:
s=list(map(key,s))
while len(s):
m=min(s)
l.append(m)
s.remove(m)
if reverse:
l=l[::-1]
return l
x=Sorted([(2,3),(1,4),(3,1)],lambda x:x[1],reverse=True)
print(x)
这个题模拟key参数是个难点,我写的这个模拟key只有在key是lambda或key为None时成立,而当key为str.lower()这类,用map模拟key是会报错的。我也没办法了…
4. 以字典为基础建立一个通讯录,向字典中添加和删除通讯人(名字、电话、email、工作单位等),查询某个人的信息,然后输出通讯录中所有人的信息。
d=dict()
def add(name,phone,email,place):
d.update({name:[phone,email,place]})
def delete(name):
del d[name]
def search(name):
if name in d:
print(d[name])
else:
print('Not found')
add('haha','123','101@','school')
add('xixi','234','121@','school')
delete('xixi')
search('xixi')
for k,v in d.items():
print(k,v)
这个我就简略写了一下,有兴趣的朋友可以把交互写好,如输入1进行什么操作、输入2……
方法是键为名字,值为电话、email等的列表, 一一对应。 (in是用来判断该键是否存在于字典中)
5. 用生成器的方式计算任意起止范围内质数的和。质数又称素数,是大于1的自然数,除了1和它本身外,不能被其他自然数整除。
import math
def is_prime(n):
if n>1:
for i in range(3,int(math.sqrt(n)+1),2):
if n%i==0:
return False
return True
return False
def get_prime(n):
while True:
if is_prime(n):
yield n
n+=1
def sum_prime(start,end):
total=0
for i in get_prime(start):
if i<=end:
total+=i
else:
print(total)
return
start_end=list(map(int,input().split()))
sum_prime(*start_end)
生成器求无限素数的例子老师讲过,所以还是蛮简单的。只是要注意生成器函数是可迭代对象,遍历相当于每次调用其__next__()方法。