python coding(一)

1、list处理

python 复制代码
#1、打乱list元素
import random
def shuffle_list(ls):
    n=len(ls)
    for i in range(n-1,0,-1):
        j=random.randint(0,i)
        ls[i],ls[j]=ls[j],ls[i]
        print(i,j,sep=',')
    return ls
lst=[1,3,6,8,9,0,2]
#random.shuffle(lst)  #标准库提供的直接打乱列表的方法,使用了Fisher-Yates洗牌算法
print(shuffle_list(lst))

#2、产生10等差为10的等差数列
print([x*10 for x in range(10)
#3、list去重和获得相同和不同元素
l1=[1,2,3,2]
l2=[3,4,5,5]
set1=set(l1)  #元素去重可以使用set 可以使用l3=lsit(set(l1)),得到去重后list
set2=set(l2)
print(f'相同元素:{set1&set2}\n不同元素: {set1^set2}')
#100以内数字求和
print(sum(range(1,101)))
from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101)))
la=[1,2,3,4,5,6,7]
#删除元素
lb=filter(lambda x:x>5,la)
print(list(lb))

2、字典操作

python 复制代码
#排序
da={'a':3,'c':2,'d':1}
print(sorted(da.items(),key= lambda x:x[1])) #[('d', 1), ('c', 2), ('a', 3)]
print(sorted(da.items(),key= lambda x:x[0])) #[('a', 3), ('c', 2), ('d', 1)]
print(sorted(da.items(),key= lambda x:x[0],reverse=True)) #[('d', 1), ('c', 2), ('a', 3)]
#字典处理
s='k:1|k1:2|k2:3|k3:4'
def str2dic(s):
    dic={}
    for it in s.split('|'):
        key,value=it.split(':')
        dic[key]=value
    return dic
#字典推导式
#d={k:int(v) for t in s.split("|") for k,v in (t.split(':'),)}
print(str2dic(s)) #{'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'}

3、单例模式

python 复制代码
#单例模式,装饰模式实现
def singleton(cls):
    instance={}
    def get_instance(*args,**kwargs):
        if cls not in instance:
            instance[cls]=cls(*args,**kwargs)
        return instance[cls]
    return get_instance
@singleton
class MySingleton:
    def __init__(self):
        pass
f1=MySingleton()
f2=MySingleton()
print(f1 is f2)
#使用基类, 继承object的类都是新式类
class Singletion(object):
    def __new__(cls,*args,**kwargs):
        '''
        hasattr是Python中的一个内置函数,它用于检查对象是否具有指定的属性。
        如果对象具有该属性(无论是否可调用),则返回True,否则返回False。
        '''
        if not hasattr(cls,'_instance'):
            cls._instance=super(Singletion,cls).__new__(cls,*args,**kwargs)
        return cls._instance
class Fo(Singletion):
    pass
fo1=Fo()
fo2=Fo()
print(fo1 is fo2)  #True

4、遍历目录,过滤出所有.py文件

python 复制代码
#遍历目录,过滤出所有.py文件
import os
def read_files(dir,suffix):
    #res=[]
    for root,dirs,files in os.walk(dir):
        for file_name in files:
            name,suf=os.path.splitext(file_name) #分离文件名与扩展名
            if suf==suffix:
                print(file_name)
read_files('../','.py')
#第二种方式
def pick(obj):
    if obj.endswith(".py"):
        print(obj)
def scan_path(ph):
    file_list = os.listdir(ph)
    for obj in file_list:
        if os.path.isfile(obj):
            pick(obj)
        elif os.path.isdir(obj):
            scan_path(obj)
if __name__=='__main__':
    scan_path('./')

5、统计文本中出现前3的单词

python 复制代码
#统计文本单词频率最高的单词
import re
from collections import Counter

def check(path):
    with open(path) as f:
        return list(map(lambda c:c[0],Counter(re.sub('\b\w+\b',' ',f.read()).split()).most_common(3)))
print(check('./t.txt'))

6、奇偶数拆分反向排序

python 复制代码
def sort_odd_even(s):
    # 将字符串分割成奇数和偶数两部分
    odds = ''.join(filter(lambda x: x.isdigit() and int(x) % 2 != 0, s))
    evens = ''.join(filter(lambda x: x.isdigit() and int(x) % 2 == 0, s))
    odds = ''.join(sorted(filter(lambda x: x.isdigit() and int(x) % 2 != 0, s)))
    evens = ''.join(sorted(filter(lambda x: x.isdigit() and int(x) % 2 == 0, s), reverse=True))
    return odds + evens
test_str = '19823764'
print(sort_odd_even(test_str))  # 输出: 137592644

7、双色球

python 复制代码
import random
def random_select():
    red_balls = list(range(1, 34))
    selected_balls = []
    for _ in range(6): # 添加6个红色球到选中列表
    # 生成随机整数代表选中的红色球的索引位置
        index = random.randrange(len(red_balls))
    # 将选中的球从红色球列表中移除并添加到选中列表
        selected_balls.append(red_balls.pop(index))
        selected_balls.sort() # 对选中的红色球排序
    blue_ball = random.randrange(1, 17) #选蓝色球
    selected_balls.append(blue_ball)
    return selected_balls
def display(balls):
    for index, ball in enumerate(balls):
        if index == len(balls) - 1:
            print(f'| \033[034m{ball:0>2d}\033[0m',end=' ')
        else: print(f'\033[031m{ball:0>2d}\033[0m', end=' ')
    print()
def main():
    n = int(input('机选几注: '))
    for _ in range(n):
        display(random_select())
if __name__ == '__main__':
    main()

8、猜数字小游戏

python 复制代码
class GessMachine(object):   #猜数字小游戏
    def __init__(self) -> None:
        self._answer=None
        self._counter=None
        self._hint=None
    def reset(self):
        self._answer=randint(1,101)  #取1到100之间的数字
        self._counter=0
        self._hint=None
    def guess(self,you_answer):
        self._counter+=1      #统计你回答对了用了多少次
        if you_answer>self._answer:
            self._hint='大了'
        elif you_answer<self._answer:
            self._hint='小了'
        else:
            self._hint='对了'
            return True
        return False
    @property
    def counter(self):
        return self._counter

    @property
    def hint(self):
        return self._hint
def get_tryagain():
    answer=None
    while answer not in ('yes', 'no'):
        answer = simpledialog.askstring('再玩一次吗', 'Enter "yes" or "no":')
        answer = answer.lower().strip()  # 转换为小写并去除前后空格
    return answer
def guess_test():
    gm=GessMachine()
    play_again=True
    while play_again:
        game_over=False
        gm.reset()
        your_answer=simpledialog.askinteger('猜数字','请输入猜测数字(数字范围是1-100之间)')
        if your_answer is None:
            return None
        while not game_over:
            game_over=gm.guess(your_answer)
            if gm._hint=='大了':
              your_answer=simpledialog.askinteger('猜数字','数字大了,请输入小一点')
            if gm._hint=='小了':
                your_answer=simpledialog.askinteger('猜数字','数字小了,请输入大一点')
            if gm._hint=='对了':
                messagebox.showinfo('恭喜你猜对了,数字是',your_answer)
        if gm.counter>7:
            messagebox.showinfo('超过7次,你难道不知道二分法吗')
        play_again=get_tryagain()=='yes'

if __name__=='__main__':
    guess_test()

9、单元测试

python 复制代码
import unittest #Python 的一个标准库,主要用于编写单元测试
def add(a,b):
    return a+b
# class Test_ut(unittest.TestCase): 
#     def setUp(self):
#         self.data=[1,2,3]
#     def tearDown(self):
#         self.data.clear()
#     def test_add(self):
#         self.assertEqual(3,add(self.data[0],2))
# if __name__ == '__main__':
#     unittest.main()
import pytest
def test_add():
    assert add(1,2)==3
class Test_py:
    def test_one(self):
        assert add(2,3)==5
    def test_two(self):
        assert add(4,3)==7

if __name__ == '__main__':
    pytest.main()
相关推荐
DaphneOdera177 分钟前
Git Bash 配置 zsh
开发语言·git·bash
Code侠客行14 分钟前
Scala语言的编程范式
开发语言·后端·golang
lozhyf34 分钟前
Go语言-学习一
开发语言·学习·golang
dujunqiu44 分钟前
bash: ./xxx: No such file or directory
开发语言·bash
努力的小T1 小时前
基于 Bash 脚本的系统信息定时收集方案
linux·运维·服务器·网络·云计算·bash
爱偷懒的程序源1 小时前
解决go.mod文件中replace不生效的问题
开发语言·golang
日月星宿~1 小时前
【JVM】调优
java·开发语言·jvm
加德霍克1 小时前
【机器学习】使用scikit-learn中的KNN包实现对鸢尾花数据集或者自定义数据集的的预测
人工智能·python·学习·机器学习·作业
2401_843785231 小时前
C语言 指针_野指针 指针运算
c语言·开发语言
matlabgoodboy1 小时前
代码编写java代做matlab程序代编Python接单c++代写web系统设计
java·python·matlab