我正在努力用 Python 重新創建一個名為 Knucklebones 的骰子游戲,作為一個有趣的個人專案。
對于游戲邏輯,我需要將串列中的所有匹配值相乘,然后將剩余的值相加。
示例 1:
numbers = [3, 3, 2]
此串列應將 3 和 3 相乘,然后加 2,總共 11。
示例 2:
numbers2 = [4, 4, 4]
此串列應乘以 4 x 4 x 4 總共 64
示例 3:
numbers3 = [2, 4, 6]
此串列中不應增加任何內容。所有數字應相加,總共為 12。
有人可以幫我解決這個問題的邏輯嗎?
uj5u.com熱心網友回復:
我認為這應該有效
我會建議使用內置模塊集合中的修改過的計數器。
默認情況下,計數器將僅計算所有串列中的條目,因為它的作業方式類似于字典 將所有條目相乘并將它們相加相當簡單
在這里你有更多資訊:
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)
11
out = MyCounter([4, 4, 4])
output = out.sum_entries()
print(output)
64
out = 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
uj5u.com熱心網友回復:
內置方法。用于dict.fromkeys將計數器初始化為零(并洗掉重復項)。然后用回圈固定結果的頻率并應用“Knucklebones”規則。
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://www.uj5u.com/houduan/505878.html
上一篇:長度為5的回文數
下一篇:JS中物件的遞回解決方案
