我正在重新创建一个名为“Python中的指节骨”的骰子游戏,作为一个有趣的个人项目。
对于游戏逻辑,我需要乘一个列表中的所有匹配值,然后添加其余的值。
示例1:
numbers = [3, 3, 2]这个列表应该将3和3相乘,然后加2,总共11。
示例2:
numbers2 = [4, 4, 4]这个列表应该乘以4乘4,总共64。
示例3:
numbers3 = [2, 4, 6]在这份清单中不应增加任何内容。所有的数字都应该加起来总共12个。
有人能帮我弄清楚这件事的逻辑吗?
发布于 2022-09-05 22:44:05
我觉得这应该管用
我将建议使用从内置模块集合中修改的计数器。
默认情况下,计数器将只计算所有列表中的条目,因为它的工作原理类似于字典,因此可以很简单地乘以所有条目并将它们加起来。
在这里,您有更多信息:
https://docs.python.org/3/library/collections.html
https://realpython.com/python-counter/
from collections import Counter
class MyCounter(Counter):
def __ini__(*arg, **kwargs):
super().__init__(*arg, **kwargs)
def sum_entries(self):
total = 0
for key, val in self.items():
total += key**val
return total
out = MyCounter([3, 3, 2])
output = out.sum_entries()输出
out = MyCounter([3, 3, 2])
output = out.sum_entries()
print(output)11out = MyCounter([4, 4, 4])
output = out.sum_entries()
print(output)64out = MyCounter([2, 4, 6])
output = out.sum_entries()
print(output)12编辑
正如注释中所建议的那样,如果类看起来很复杂,就避免使用类。
from collections import Counter
out = Counter([3, 3, 2])
total = 0
for key, val in out.items():
total += key**val发布于 2022-09-05 23:07:11
内置的方法。使用dict.fromkeys将计数器初始化为零(并删除重复项)。然后用循环来确定结果的频率,并应用“指节骨”规则。
numbers = [3, 3, 2]
d = dict.fromkeys(numbers, 0)
for n in numbers:
d[n] += 1
res = sum(k**frequency for k, frequency in d.items())
print(res)https://stackoverflow.com/questions/73615201
复制相似问题