Python上机实验2

接触越多,越觉得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__()方法。

 

 

你可能感兴趣的:(Python,Python)