Python习题

每日小练习,不定期更新

  1. 实现删除一个list 里面的重复元素(set 和 for 实现)
s1 = [1,1,2,2,2,3]1set(s1)2)s1_new=[]
for i in s1:
    if i not in s1_new:
        s1_new.append(i)
print(s1_new)

2.利用切片操作,实现一个函数,去除字符串首尾的空格,不允许使用strip()函数

def trim(s):
    if s[:1]!= ' ' and s[-1]!=' ':
        return s
    elif s[:1] == ' ':
        return trim(s[1:])
    else:
        return trim(s[:-1])

3.猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上
又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零 一个。到第10天早上想吃时,只剩下一个桃子了。求第一天共摘多少个桃子。

sums = 1
print('10  1')
for i in range(9,0,-1):
    sums = (sums+1)*2
    print('{:^2} {:>2}'.format(i,sums))

4.杨辉三角实现

triangle=[]
n=3
for i in range(n):
    cue=[1]
    triangle.append(cue)
    if i==0:
        continue
    pre = triangle[i-1]
    for j in range(i-1):
        cue.append(pre[j]+pre[j+1])
    cue.append(1)
print(triangle)

5.随机产生10个数字,每个数字取值范围[1,20],统计重复和不重复的数字

方法一、二:
import random
s1=[random.randint(1,20) for i in range(10)]
length=len(s1)
print(s1)
num_dic={}
for i in s1:
#     if i not in num_dic:
#         num_dic[i]=1
#     else:
#         num_dic[i]+=1
    num_dic[i]=num_dic.get(i,0)+1
num_dict = list(num_dic.items())
print(num_dict)

6.求100内的素数,可扩展到10W

#效率较高的求100内的素数
方法一:
n = 100
print(2)
for i in range(3,n,2):#奇数求
    if i>10 and i%5==0:
        continue
    for j in range(3,int(i**0.5)+1):#利用中间数, #整除是向下,无论多少都会取整数部分,例如3.9取3,所以会丢数字,需要加上1
        if i%j==0:
            break
    else:
        print(i)
 方法二:使用素数列表
 n=10
primenumber=[2]
for i in range(3,n,2):
    flag = False #设置标志位
    edg = int(i**0.5) #中间位
#     if i==0:
#         continue
    for j in primenumber:
        if j > edg:
            flag=True
            break
        if i%j==0:
            break
    if flag:
        primenumber.append(i)
print(primenumber)

7、从lst = [1,(2,3,4),5]中,提取4出来.利用解构的方式
8、环境变量JAVA_HOME=/usr/bin,返回环境变量名和路径

7、lst = [1,(2,3,4),5]
a,(b,c,d),e = lst
print(a,b,c,d,e)

8、lst='JAVA_HOME=/usr/bin'.partition('=') #partition 以什么分割
a,_,c=lst
print(a,c)

set 集合运算

#你的好友A、B、C,他的好友C、B、D,求共同好友
s1 = set('a,b,c')
s2 = set(['c','b','d'])
s1 & s2
随机产生2组各10个数字的列表,如下要求:
 每个数字取值范围[10,20]
 统计20个数字中,一共有多少个不同的数字?
 2组之间进行比较,不同的数字有几个?分别是什么?
 2组之间进行比较,相同的数字有几个?分别是什么?
import random
a = [random.randint(10,20) for i in range(10)] 
b = [random.randint(10,20) for i in range(10)] 
a=set(a)
b=set(b)
print(a)
print(b)
print(a^b)#对称差集 由所有不属于A和B的交集元素组成的集合
print(a&b)#交集
  1. key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序
from collections import OrderedDict
import random
d = {'banana':3,'apple':4,'pera':1,'orange':2}
print(d)
keys = list(d.keys())
random.shuffle(keys)
print(keys)
od = OrderedDict()
for key in keys:
    od[key]=d[key]
print(od)
print(od.keys())
  1. 计算时间:
import datetime
import time
start = datetime.datetime.now()
time.sleep(2)
duration = (datetime.datetime.now() - start).total_seconds()
print(duration)

[返回值 for 元素 in 可迭代对象 if 条件]
例子: 生成一个列表,元素0~9,对每一个元素自增1后求平方返回新列表

[(i+1)**2 for i in range(10) ]

20以内,既能被2整除又能被3整除的数

[ i for i in range(20) if i%2==0 and i%3==0]

有一个列表lst = [1,4,9,16,2,5,10,15],生成一个新列表,要求新列表元素是lst相邻2项的和

lst = [1,4,9,16,2,5,10,15]
[lst[i]+lst[i+1] for i in range(len(lst)-1)]

“0001.abadicddws” 是ID格式,要求ID格式是以点号分割,左边是4位从1开始的整数,右边是
10位随机小写英文字母。请依次生成前100个ID的列表

import random
import string
lower = string.ascii_lowercase
num = ['{:04}.{}'.format(i,''.join([random.choice(lower) for i in range(10)])) for i in range(1,5)]
print(num)

请生成6个ID字符串,格式为 随机3个小写字母 . 随机4个大写字母 . 随机5个数字字符
azy.YBSR.02900
lux.OBRS.00270
yez.IGEV.29062

import random
import string
lower = string.ascii_lowercase
upper = string.ascii_uppercase
dignumber = string.digits
num = ['{}.{}.{}'.format(''.join(random.choice(lower) for i in range(3)),
                   ''.join(random.choice(upper) for j in range(4)),
                    ''.join(random.choice(dignumber) for i in range(5))
                   ) for i in range(6)]
print(num)

转置矩阵

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
nums = [i for i in zip(*matrix)]
print(nums)
----
l = ['a', 'b', 'c', 'd', 'e', 'f']
num = (zip(l[:-1], l[1:]))
print([i for i in num])


完成一个函数,可以接收输入的多个数,每一次都能返回到目前为止的最大值、最小值

def dip():
    max_ = min_ = None
    while True:
        a = input('>>>')
        num = [int(c) for c in a.replace(',',' ').split()]
        if not num:
            continue
        if max_ is None:
            max_= min_= num[0]
        max_ = max(max_,*num)
        min_ = min(min_,*num)
        print(max_,min_)
dip()

自建内建函数sort,并实现反转

def sort(iterable,reverse = False):
    new_list=[]
    for x in iterable:
        for i,y in enumerate(new_list):
            order = x>y if reverse else x<y
            if order:
                new_list.insert(i,x)
                break
        else:
            new_list.append(x)
    return new_list

#将下面的时间,转化为标准时间输出

s1 = "2010 Jan 1"
s2 = '31-1-2000'
s3 = 'October10, 1996, 10:40pm'
from dateutil.parser import parse
print(parse(s1))
print(parse(s2))
print(parse(s3))
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值