个人归纳的一些代码案例库(持续更新)

本文介绍了使用Python进行数字组合计算的方法,如购买商品的组合方案,以及如何利用for循环和简单的算法解决问题。同时,讲解了如何通过map函数将字符串列表转为数字列表,并展示了计算数字列表最大值、最小值和平均值的示例。此外,探讨了递归函数的概念,提供了一个递归处理数字累加问题的例子。最后,讨论了random模块的使用,包括各种随机数生成和序列操作的方法,如彩票随机选号的实现。
摘要由CSDN通过智能技术生成

1、对于一些数字组合方案,可以利用 for 循环,结合简单的算法来实现:比如

"""
200块钱买洗发水15元/瓶,香皂2元/块,牙刷5元/支,
有多少中组合购买方案

"""
money = 200
x = money//15
for i in range(0,x+1):
    y = (money-15*i)//2
    for j in range(0,y+1):
        z = (money-15*i-2*j)//5
        for k in range(0,z+1):
            if 15*i+2*j+5*k == money:
                print(f"可买洗发水{i}瓶,香皂{j}块,牙刷{k}支。")

2、当需要把列表中的字符串类型的数值转化为数字类型时,可以用到内置map函数,返回一个map对象,再用list将其转换为列表。格式:map(函数名 , 一个或多个序列)。

"""
栗子:随便输入一组数字并用空格隔开,返回该组数中的最大值、最小值和平均数。

"""
x = input("输入一组数字并用空格隔开")

def func(x):
    lis = x.split(" ")
    n = lis.count("")  # 统计列表里的 "" 个数
    while n != 0:
        lis.remove("")  # 利用循环全部移除 "",解决多空格报错问题
        n = lis.count("")
    li = list(map(int,lis))  # map函数转化
    Max = max(li)
    Min = min(li)
    Avg = sum(li)/len(li)
    return f"该组数字中的最大值为{Max},最小值为{Min},平均值为{Avg}"

print(func(x))

3、递归函数的一些思路:递归函数就是函数自己调用自己,必须要设置一个递归出口,否则无限死循环。出口条件可以理解成一个最小单元的值,递归就是将一个大的事物分解为一个个小的基本单元,一旦分解到最小单元即终止递归,然后计算最终结果。

知乎大神链接参考:https://zhuanlan.zhihu.com/p/158300209?utm_id=0

自己整理的代码例子:


# 栗子一:用递归处理数字累加问题

def fun(x):
    if x == 1:  # 最小单元
        return x
    res = fun(x-1)+x  # 递归分解
    return res
    # 递推思维:1+2+3
    # 递归思维:3+2+1
    # fun(2)+3
    # fun(1)+2+3
    # 1+2+3=6
    # fun(1)+2 X
    # fun(0)+1+2 X
    # fun(-1)+0+1+2 X
    # fun(-2)+-1+0+1+2 X
print("计算结果:{}".format(fun(3)))
print(f"计算结果:{fun(3)}")
"""
栗子二:
养鸭人每过一个村庄卖出手上鸭子数量的一半又一只,一共卖了7个村,最后还剩2只鸭子,
问原来共有几只鸭子?(递归方法解决)
"""


def isplu(k, m):
    if k < 0 or m < 0:  # 函数作用是判断村子和鸭子不能为负
        print("查询参数不能为负数,请重新输入==》")  # 负数则提示重新输入
    else:
        print("初始共有{}只鸭子".format(sums(k, m)))  # 正数则继续执行sums函数


def sums(k, m):

    if k == 0:  # 无交易的话剩余即是总数
        return m

    else:
        res = sums(k-1, m)*2+2
        return res
    # 递推思维:510/2-1....n/2-1=2 总数卖到最后剩2只
    # 递归思维:2*2+2....n*2+2=510 累计卖的数量得到总数
    # f(0,2) = 2
    # f(7,2) = f(6,2)*2+2
    # f(7,2) = (f(5,2)*2+2)*2+2
    # ...


while 1:
    try:  # 捕获输入除数字外的所有异常
        k = int(input("一共在几个村卖鸭子?==》"))
        m = int(input("最后卖完还剩几只鸭?==》"))
        isplu(k, m)  # 调用isplu函数
        print("****" * 10)
    except Exception as e:  # 打印异常提示重新输入
        print("!!!wrong,请重新输入!!!")
        print(e)

4、知识点:字符串、列表、字典方法的使用,利用字符替换、字符串是否为数字、字符个数统计、字符串分割、列表特定数值移除、根据下标值查询等方法,处理输入的文本,根据条件逻辑查询结果。

"""
题目:输入某年某月某日,判断这一天是这一年的第几天?
"""


def formatDate(date):
    dateInfo = date.replace(" ", "")  # 去除字符串里的所有空格,字符串方法
    if dateInfo.isdigit():  # 判断去除空格后的文本是否全为数字,字符串方法
        # print(dateInfo, date)
        dateInfos = date.split(" ")  # 如果全为数字则以空格分割输出列表,字符串方法
        n = dateInfos.count("")  # 统计列表里的 "" 个数,列表方法
        while n != 0:
            dateInfos.remove("")  # 利用循环全部移除 "",列表方法
            n = dateInfos.count("")
        dateInfos = list(map(int, dateInfos))  # str转化int
        # print(dateInfos, len(dateInfos))
        if len(dateInfos) != 3:  # 判断是否年月日格式
            print("日期格式不规范,请重新输入==》")
        elif dateInfos[1] <= 0 or dateInfos[1] > 13:  # 判断月份是否符合逻辑
            print("输入月份不存在,请重新输入==》")
        else:
            whatDay(dateInfos)  # 调用函数

    else:
        print("只能输入正整数,请重新输入==》")


def whatDay(dateInfos):
    year = dateInfos[0]
    month = dateInfos[1]
    day = dateInfos[2]
    sums = months[str(month)]  # 本月前的天数总和,字典根据key查询value
    sums += day  # 加上本月的天数即为结果
    leap = 0  # 如果闰年则二月份后天数加一天
    if year % 4 == 0 or year % 400 == 0 and year % 100 != 0:
        leap = 1
    if leap == 1 and month > 2:
        sums += 1
    print(f"这天是今年的第{sums}天")


months = {
    "1": 0,
    "2": 31,
    "3": 59,
    "4": 90,
    "5": 120,
    "6": 151,
    "7": 181,
    "8": 212,
    "9": 243,
    "10": 273,
    "11": 304,
    "12": 334,
}
while 1:
    date = input("请输入年 月 日并用空格隔开(按”0“退出)")
    if date == "0":
        exit()
    formatDate(date)

5、内置模块random的相关使用,while循环。常用的random模块方法有:

# 方法一:random.random():随机产生一个[0,1)的数字
n = random.random()
print(n)

# 方法二:random.shuffle():打乱序列
n = [1, 2, 3, 4, 5]
random.shuffle(n)
print(n)

# 方法三:
# random.getstate():获取当前随机状态
# random.setstate():设置当前随机状态
# 通常用于当前的随机状态,两个函数搭配使用
a = [1, 2, 3, 4, 5]
b = ["one", "two", "three", "four", "five"]
state = random.getstate()  # 提前保存随机状态(顺序)
random.shuffle(a)  # 先将a序列顺序随机打乱
random.setstate(state)  # 讲当前随机状态(顺序)设置为之前保存的随机状态
random.shuffle(b)  # 再将b序列顺序随机打乱
print(a)  # [2, 1, 3, 5, 4]
print(b)  # ['two', 'one', 'three', 'five', 'four']
# 根据两者的输出结果,发现随机顺序(下标)位置都是一一对应


# 方法四:random.uniform(m,n):返回一个在m,n之间的数
n = random.uniform(0, 10)
print(n)

# 方法五:random.randint(m,n):返回一个在m,n之间的整数
n = random.randint(0, 10)
print(n)

# 方法六:random.randrange(start,end,step):从start到end但不包括end,步长位step的随机数
n = random.randrange(0, 10, 2)  # [0,2,4,6,8] 就是从序列的切片结果中随机获取一个数
print(n)

# 方法七:random.choice(n):随机返回n中的一个随机元素(可能重复),一般n为一个有序序列
n = "abcd1234"
print(random.choice(n))  # b

# 方法八:random.sample(有序序列, 取样次数):随机取样,以列表的形式返回,不会选到重复的元素,如果取样次数超过元素个数会报错
n = "abcd1234"
print(random.sample(n, 3))  # ['3', 'a', '1']
print(random.sample(n, 9))  # ValueError: Sample larger than population or is negative
  • 举个例子:利用随机数模块知识,写一个彩票随机35选7的代码 
import random

temp = [i + 1 for i in range(35)]  # 先生成一个包含数字1~35的列表
random.shuffle(temp)  # 打乱列表
# print(temp)

lis = []
n = 0  # 取数次数
while n < 7:
    d = random.randint(0, 34)  # 随机生成一个0~34范围的下标值
    while temp[d] in lis:
        # print(temp, temp[d])
        d = random.randint(0, 34)
    lis.append(temp[d])
    n += 1

# print(lis)
lis.sort()   # 列表里数值升序
print(*lis)  # 4 7 13 17 23 25 26

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值