在这里简单分享一下利用豆包ai生成代码注释的功能。
在每一个"""内的文本都是我将代码发送给豆包并且让豆包生成注释和样例,然后我将豆包生成的话语以自己的形式书写在注释栏内。比如第一个Counter对象,在我接触青训营之前从来没有看过python相关的文章,函数更是不了解,豆包能给我解释这样的函数,弥补缺陷。
说完了功能,下面就是我对寻找最大葫芦这个题目的所思所想,全部以注释的形式展现。可能会帮助到大家,如果有啥解释不到位的请及时在评论区提出建议,感谢大家利用宝贵时间观看这些浅谈!
题目:
在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。 “葫芦”由五张牌组成,其中包括三张相同牌面值的牌 aa 和另外两张相同牌面值的牌 bb。 如果两个人同时拥有“葫芦”,我们会优先比较牌 aa 的大小,若牌 aa 相同则再比较牌 bb 的大小。
在这个问题中,我们对“葫芦”增加了一个限制:组成“葫芦”的五张牌牌面值之和不能超过给定的最大值 maxmax。 牌面值的大小规则为:A > K > Q > J > 10 > 9 > ... > 2,其中 A 的牌面值为1,K 为13,依此类推。
给定一组牌,你需要找到符合规则的最大的“葫芦”组合,并输出其中三张相同的牌面和两张相同的牌面。 如果找不到符合条件的“葫芦”,则输出 “0, 0”。
def solution(n, max_value, array) :
from collections import Counter
count = Counter(array)
"""
Counter对象 记录了每种牌面值的出现次数
"""
sorted_values = sorted(count.keys(), reverse=True)
"""
sorted_values 对牌面值进行排序,方便找到最大的组合
count.keys() 返回包含所有牌面值的列表
sorted() 内置排序函数
reverse=True 参数由大到小排列
"""
max_a, max_b = 0, 0
"""
初始化 a, b 最大组合的值
"""
for a in sorted_values:
"""
∵a的数量必须有3张 且 a的数量超过3张也不会影响比较
∴a>=3
"""
if count[a] >= 3:
# 遍历所有可能的牌面值 b
for b in sorted_values:
"""
“另外两张相同牌面值的牌b”告诉我们a和b的值不一样
∴引进b时要判断a=b是否成立
∵b的数量必须有2张 且 b的数量超过2张也不会影响比较
∴b>=2
注:其中包括三张相同牌面值的牌a 和另外两张相同牌面值的牌b 用完了
"""
if b != a and count[b] >= 2:
# 计算当前组合的和
current_sum = 3 * a + 2 * b
# 检查是否符合条件
"""
“组成“葫芦”的五张牌牌面值之和不能超过给定的最大值 max”
"""
if current_sum <= max_value:
# 判断a,b是否为1
if a == 1:
max_a = a
if b == 1:
max_b = b
"""
∵1的面值>2~13所有的面值
∴当1出现时 其他所有数字都要失效 即1成为最大值
∵首先识别a的最大值
∴先判断a是否为上限1 并且如果a不是上限1 max_a不会改变
∵牌a相同再比较b的大小
∴判断b是否为上限1 并且b不是上限1时max_b不会改变
"""
# 这个条件的问题在于max_a和max_b都是存储当前找到的最大葫芦组合的三张or两章牌面值
# 并非存储a或b在所有组合中的最大值
# if (a != 1 and max_a == 1) and (b != 1 and max_b == 1) :
# a, b = 1, 1
"""
∵ a 的优先级比 b 高 即使 b 为 1
∴首先满足 a > max_a
∵规则中 1 最大 且 a = 1 已判断
∴ a != 1
∴ a 满足第一个条件时 max_a, max_b 改变
∵ a 相同(即 a == max_a)再比较 b 的大小
同理可得(b > max_b 且 b != 1)
∴ b 满足条件时 a 与 max_a 等量代换 max_b 改变
考虑到 a < max_a 但 b = 1 的情况 这里交换范围为 a >= max_a 排除了 a < max_a 的可能 也排除了这种情况
"""
# 更新最大组合
if (a > max_a and a != 1) or (a == max_a and b > max_b and b != 1):
max_a, max_b = a, b
# 如果没有找到符合条件的组合,返回 [0, 0]
if max_a == 0 and max_b == 0:
return [0, 0]
return [max_a, max_b]