Python基础算法(持续更新)~~

声明:所有代码均在pycharm下运行

把所有目录上有’f’的目录删除,有’abcd字符串的文件删除’

import os
path = "D:\python"
files = os.walk(path)
for i,j in enumerate(files):
	if j.find("abcd") >= 0:
		file_path = os.path.join(path,j)
		print(file_path)
		if os.path.isfile(file_path):
			os.remove(file_path)
	if j.find("f") >= 0:
		file_path = os.path.join(path,j)
		print(file_path)
		if os.path.isdir(file_path):
			os.remove(file_path) # os.remove()函数无法删除有子文件的文件夹
			# os.rmdir(file_path) # os.rmdir()删除path指定的空目录

用递归列出所有目录和文件绝对路径

import os
allFiles = []
def getFiles(path):
	fileList = os.listdir(path) # 返回path指定的文件夹包含的文件或文件夹的名字的列表
	for i in fileList:
		filepath = os.path.join(path,i) #完整路径
		if os.path.isdir(filepath):
			getFiles(filepath) # 开始递归
		allFiles.append(filepath) 把文件添加到列表
	return allFiles

a = getFiles("D:\python")
print(a)

采用os模块自带的os.walk()方法输出目录和文件绝对路径

第一种方法:
import os
path = "D:\python"
for i in os.walk(path):
	print(i)
第二种方法:返回一个三个元素的元组

· dirPaths 要列出指定目录的路径
· dirNames 目录下的所有文件夹
· fileNames 目录下的所有文件

Files = []
def getAllFiles(path):
	allFiles = []
	for dirPaths,dirNames,fileNames in os.walk(path):
		for dir in dirNames:
			 allFiles.append(os.path.join(dirPath,dir))
		for name in fileNames:
			allFiles.append(os.path.join(dirPath,name))
		return allFiles
path = "D:\python"
Files=getAllFiles(path)
for file in Files:
	print(file)

根据输入参数(行数)不同,输出金字塔(三角形)图形

a = int(input("请输入行数:"))
for i in range(a):  # 循环a次得到i的值
    print(' ' * (a - i - 1) + '*' * (2 * i + 1))  # 输出在第几行*号前面有几个空格加几个*号

运行结果如下:
在这里插入图片描述
编写函数,接收一个包含若干整数的列表参数list,返回一个元组,其中第一个元素为列表list中的最小值,其余元素为最小值在列表list中的下标。

def function(listr):
	num=min(listr) #得到列表中的最小值
	lists=[i for i ,x in enumerate(listr) if x == num] #利用枚举的方法进行比较,并获得下标
	lists.insert(0,num) #插入的列表中
	tup = tuple(lists) # 列表强转元组
	print(tup)

lists = [1, 2, 3, 4, 5, 1, 6, 7]
functions(lists)

轮盘抽奖是比较常见的一种游戏,在轮盘上有一个指针和一些不同颜色、不同面积的扇形,用力转动轮盘,轮盘慢慢停下后依靠指针所处的位置来判定是否中奖以及奖项等级。
转动一万次,请统计每种奖的概率?
例:奖项分布 = {‘一等奖’:(0, 0.08), ‘二等奖’:(0.08, 0.3),‘三等奖’:(0.3, 1.0)}

import random
#声明奖项分布
reward = {'一等奖':(0,0.08),'二等奖':(0.08,0.3),'三等奖':(0.3,1.0)}
#转动方法
def roll(reward):
	#随机值代表转动结果
	result = random.random()
	for k,v in roll.items():
		if v[0] <= result < v[1]
			return k
#声明一个字典,用来存储结果
rewardDetail = {}
#转动一万次
for i in range(10000):
	nowSituation = roll(reward) #当前战绩
	rewardDetail[nowSituadion] = rewardDetail.get(nowSituation,0)+1  #存入字典
#遍历输出转动一万次之后的概率分布
for item in rewardDetail.items():
	print(item)
	

结果如下:
在这里插入图片描述

递归实现一个数的阶乘

def recursion(number):
    if number == 0 or number == 1:
        return 1
    else:
        return number * recursion(number - 1)


s = recursion(5)
print(s)

利用自带*和**的参数计算个数字的累计和

def func(a, b, *c, **d):
    y = 0
    x = a + b
    for i in c:
        y += i
    m = 0
    for value in d.values():
        m += value
    return x, y, m


newList = []
newList = func(2, 3, 2, 3, d=5, z=6)
print(newList)

*注意:*func中的第三个参数相当于传入的是一个列表,即第一个参数2,第二个参数3,之后的2,3是按照列表的形式进行传入的;第四个参数传入的是一个字典(key,value)形式进行存储。

抓小狐狸游戏:假设一共有一排 5 个洞口,小狐狸最开始的时候在其中
一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前跳到隔壁洞口里。

i = random.randint(1, 5)
while 1:
    s = int(input("请选择洞口(1-5):"))
    if s > 5 or s < 1:
        print("您的输入有误")
    elif s == '':
        print("您的输入有误")
    if s == i:
        print("真幸运,抓到了")
        break
    else:
        if i == 1:
            i = i + 1
            print("抓错了")
        elif i == 5:
            i = i - 1
            print("抓错了")
        else:
            i = i + random.choice([-1, 1])
            print("抓错了")

猜数字游戏:程序运行时生成一个100以内的随机数,提示用户输入,有五次机会。并根据用户输入的值进行必要的提示(猜大了、猜小了,猜对了),如果猜对则提前结束游戏,如果没有继续运行直到次数用完,并给出随机数。

a = random.randint(0, 100)
for i in range(1, 6):
    b = int(input("请输入您的猜测(0-100之间):"))
    if b > a:
        print("猜大了")
    elif b < a:
        print("猜小了")
    elif b == a:
        print("恭喜您,猜对了!")
        break
    else:
        print("输入有误")
    i += 1
    if i == 6:
        print("次数用完啦!")
print(a)

思考:如何通过while循环来控制程序呢?

程序实现打印三位数的水仙花数
水仙花数定义:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3+ 5^3+3 ^3 = 153)。
程序实现如下:

flower = []
for i in range(1, 10):
    for j in range(10):
        for k in range(10):
            if i * i * i + j * j * j + k * k * k == 100 * i + 10 * j + k:
                flower.append(100 * i + 10 * j + k)
for i in flower:
    if i == flower[-1]:
        print(i)
    else:
        print(i, end=" ")


斐波那契数列前十项
核心公式:f(0) = 1,f(1) = 1,f(n) = f(n-1) + f(n-2)
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13,特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。

a = 0
b = 1
print(a)
print(b)
i = 1
while i < 9:
    c = a + b
    print(c)
    a = b
    b = c
    i += 1

创建一个包含1-100之间所有素数的列表,排序后打印显示该列表;
随后只保留该列表前5个数字,删除其余内容并打印输出相应结果;
再将每个元素值加上100,显示列表内容;把列表转化为字符串。

思路分析:
1.创建一个空列表,用来存储1-100之间的素数
2.生成1-100之间的所有素数
3.对列表进行处理,只保留前五位
4.转为字符串
代码实现如下:

# 声明一个空列表
eList = []
# 100以内的素数
i = 2
for i in range(2, 100):
    j = 2
    for j in range(2, i):
        if (i % j == 0):
            break
    else:
        eList.append(i)
print(eList)
# 切片保留前五位元素
new_eList = eList[0:5:1]
print(new_eList)
# 每个元素加上100
new_eLists = []
for i in new_eList:
    i = i + 100
    new_eLists.append(i)
print(new_eLists)
# 转为字符串
strs = [str(i) for i in new_eLists]
s = ''.join(strs)
print(s)
9*9乘法表
for i in range(1,10):
	for j in range(1,i):
		print("{}*{}={}\t".format(i,j,i*J),end="")
	print()

运行效果如下图所示:
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值