Python习题

1、利用内置函数chr(),ord()以及random模块写一个简单随机4位验证码

import random


tmp=""
for i in range(0,4):
    n=random.randrange(0,3)
    if n==0:
        num=random.randint(0,10)
        tmp+=str(num)
    if n==1:
        num=random.randrange(65,91)
        tmp+=chr(num)
    if n==2:
        num=random.randrange(97,122)
        tmp+=chr(num)
print(tmp)

2、编写代码,模拟决赛现场最终成绩的计算过程。(去掉最高分,和最低分,求平均分)

 

输入

5
12.7
16.7
14.3
10.2
13.5

输出fd


代码:

n=int(input())
list1=[float(input()) for i in range(n)]
lMax=max(list1)
lMin=min(list1)
list2=list1
list2.remove(lMax)
list2.remove(lMin)
avg=sum(list2)/len(list2)
print(str(lMax)+" "+str(lMin)+" "+str(avg))

测试

5
12.7
16.7
14.3
10.2
13.5

16.7 10.2 13.5


知识点

列表推导式:[float(input()) for i in range(n)]

内置函数max():返回列表元素最大值

内置函数min():返回列表元素最小值

List.remove() 删除首次出现的指定元素

内置函数sum(l) :返回列表l元素之和

内置函数len(l) :返回列表l长度

内置函数str():将任意类型转换为字符串

 

3.判断一个数字是否为丑数。一个数的因数如果只包含235,那么这个数是丑数。

 

输入

20

输出

True


注:这里的因数是质因数,即因子为质数(除了1和本身不能被其他整除)

算法设判断N是否为丑数:将N循环除以2直到不能整除,再循环除3直到不能整除,最后整除5,如果不能整除则不是丑数,如果商为1,且余数为0则为丑数。


代码:

def isCnumber(n):
    for i in (2,3,5):
        while 1:
            p,q=divmod(n,i)
            if(q!=0):
                break;
            else:
                n=p;
    return n==1

n=int(input())
print(isCnumber(n))

 

测试:

20

True


知识点:

divmod(a,b):返回一个包含商和余数的元组(a // b, a % b)

 

4.编写程序,生成一个包含50个随机整数的列表,然后删除其中所有奇数。

代码:

import  random

def getRandom(n):
    if n==50:
        rlist=list(map(lambda x:random.randint(0,100),range(n)))
    if n==20:
        rlist = list(map(lambda x: x, range(1,21)))
    return rlist


def no_odd(list):
    list=[i for i in list if i%2==0]
    if len(list)==10:
        print(list)
    return list


num=input()
mylist=getRandom(int(num))
result=no_odd(mylist)

测试:

20
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]


知识点:

匿名函数:# 冒号:之前的x表示它是这个函数的参数。
                  # 匿名函数不需要return来返回值,表达式本身结果就是返回值。 

                  #这里lambda x:random.randint(0,100),range(n)等价于[ random.randint(0,100) for x in range(n)]

                 

5.编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)

1.20个随机整数的列表,其处理结果不需要输出

2.20个1~20的列表,其处理结果需要输出

 

代码:

import random
def getRandom(n):
    if n==1:
        list1=[random.randint(0,100) for i in range(20)]
    else:
        list1=[i+1 for i in range(20)]
    return list1

def getSorted(list1):
    list2=list1[::2]
    list2=sorted(list2,reverse=True)
    list1[::2]=list2
    return list1

n=0
x=getRandom(n)
x=getSorted(x)
if(n==0):
    print(x)

测试:

[19, 2, 17, 4, 15, 6, 13, 8, 11, 10, 9, 12, 7, 14, 5, 16, 3, 18, 1, 20]
>>> 


知识点:

切片:list[::2]:步长为2截取(即取偶数位)

sorted:默认为升序,要降序需要加上reverse=True

 

6.使用集合实现:编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。

输入

10

输出

{2, 3, 5, 7}

 

代码:

def isPrime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    return True

n=int(input())
result=set()
for i in range(2,n):
    if isPrime(i)==True:
        result.add(i)

print(result)

 

测试:

10
{2, 3, 5, 7}
>>> 


知识点:

集合初始化:result=set()

新增一个元素:result.add()

 

7.假设一段楼梯共 15 个台阶,小明一步最多能上 3 个台阶。编写程序计算小明上这段楼梯一共有多少种方法。要求给出递推法和递归法两种代码。

 

算法:小明一步最多能上3个台阶,我们可以把三个台阶看成一个单位,小明走1,2,3台阶分别有1,2,4中方法,那么走四步台阶则有1+2+4=7种方法,同理,,第五步台阶可以看成是第二步往上走三步,那么走五步台阶则有7+4+2=13种方法,以此类推最终得到:f(n) = f(n-1) f(n-2) f(n-3)

 

代码:

def climbStdt(n):
    a,b,c=1,2,4
    for i in range(n-3):
        a,b,c=b,c,a+b+c
    return c

def climbStdg(n):
    firstSteps={1:1,2:2,3:4}
    if n in firstSteps.keys():
        return firstSteps[n]
    else:
        return climbStdg(n-1)+climbStdg(n-2)+climbStdg(n-3)

print(climbStdt(15))
print(climbStdg(15))

测试:

5768
5768


知识点:

字典:新建:dict = {} or dict = {key:value,.....} 

           判断是否在字典的键中:dict.has_key(key)

 

8.编写程序,生成包含20个随机数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。

思路:切片分成两个列表,排好序后再放在一起

代码:

import random

mlist=[random.randint(1,100) for i in range(20)]
print(mlist)
list1=sorted(mlist[:10])
list2=sorted(mlist[10:],reverse=True)
mlist=list1+list2
print(mlist)

测试:


[78, 100, 97, 49, 36, 30, 89, 26, 40, 3, 87, 64, 5, 34, 80, 49, 20, 97, 26, 5]
[3, 26, 30, 36, 40, 49, 78, 89, 97, 100, 97, 87, 80, 64, 49, 34, 26, 20, 5, 5]

 

知识点

list[::]-返回包含所有元素的列表

list[::-1]-返回列表逆序

list[::2]-偶数位,每隔一个取一个数

list[1::2]-奇数位,每隔一个取一个数

list[3:6]-下标在3-6之间的元素(左闭右开)

list[100:]-下标100之后的所有元素

 

9.编写程序,输入任意大的自然数,输出各位数字之和。

代码:

n=input()
list1=list(map(int,n))
print(sum(list1))

测试:

1234
10

知识点:

map参数问题:map函数的原型是map(function, iterable, …), iterable是可以迭代的对象,如字符串和列表。这里是字符串,即把每个字符转换成整形。

10.编写程序,输入两个集合 setA 和 setB,分别输出它们的交集、并集和差集 setA-setB。

集合输入以0结束

代码:

def getList():
    list2=[]
    num= input()
    while(num!='0'):
        list2.append(num)
        num= input()
    return list2

A=getList()
B=getList()
print(set(A)&set(B))
print(set(A)|set(B))
print(set(A)-set(B))

测试:

1
2
3
0
1
2
4
0
{'1', '2'}
{'4', '1', '2', '3'}
{'3'}

 

 

你可能感兴趣的:(Python习题)