我正在制作一个代码,其中三个骰子被滚动,如果所有三个骰子相等,则添加值。如果两个骰子相等,则加上2个相等的骰子值,并从总和中减去奇数骰子值。
这是我目前的代码
import random
d1 = random.randint(1,6)
d2 = random.randint(1,6)
d3 = random.randint(1,6)
print(d1)
print(d2)
print(d3)
if d1 == d2 and d2 == d3:
score = d1 + d2 + d3
elif d1 == d2 or d1 == d3 or d2 == d3:
现在我不知道如何找出两个骰子中的哪一个能够将它们加在一起。我该怎么做?
答案 0 :(得分:7)
您可以使用if-statements
:
if d1 == d2:
if d2 == d3:
score = d1 + d2 + d3
else:
score = (d1 + d2) - d3
elif d2 == d3:
score = (d2 + d3) - d1
elif d1 == d3:
score = (d1 + d3) - d2
else:
score = 0
括号不是必需的,只是让它更清晰
答案 1 :(得分:3)
我可能会使用collections.Counter
。
Counter
是计算对象的dict
子类。在生成的字典中,键是要计数的对象,而值是这些对象出现的次数。
我们可以通过将random.randint()
的结果列表传递给Counter
的构造函数来创建骰子数量计数,如下所示:
Counter(random.randint(1,6) for _ in range(3)) # 3 6-sided rolls
除了通过dict
[]
运营商访问计数外,我们还可以通过Counter.most_common()
访问这些计数,该rolls[0]
会返回包含所有广告资料的列表相关计数。
在我们的计划中,rolls[0][0]
是最常见的滚动及其计数,rolls[0][1]
是滚动的值,rolls[1][0]
是滚动的次数。同样,import random
from collections import Counter
rolls = Counter(random.randint(1,6) for _ in range(3)).most_common()
if len(rolls) == 1:
score = rolls[0][0] * 3
elif len(rolls) == 2:
score = rolls[0][0] * 2 - rolls[1][0]
else:
score = 0
print (rolls, score)
是第二常见的值。
0
如果没有匹配项,您还没有指定正确的分数。如果没有匹配,上述算法得分为import random
from collections import Counter
rolls = Counter(random.randint(1, 6) for _ in range(3)).most_common()
score = sum(roll[0] * (-1 if roll[1]==1 else 1) * roll[1] for roll in rolls)
print(rolls, score)
。
这是另一种算法,如果没有匹配则对所有骰子的负和进行评分。从本质上讲,它将所有匹配的骰子相加并减去每个单独的骰子。这为您描述的每个案例提供了所请求的答案,但更严重地惩罚了不匹配的卷。注意这个版本如何容易地推广到不同数量的骰子和不同数量的边。
unsigned long nr_segments = 1;
size_t count = 1;
struct msghdr msg = {};
struct iovec iov = {};
iov.iov_base = data;
iov.iov_len = dataLen;
iov_iter_init(&msg.msg_iter, READ, &iov, nr_segments, count);
答案 2 :(得分:2)
使用集合可能是确定如果你有重复的最优雅的解决方案,但它不会告诉你重复哪个元素。
您可以将所有骰子保存在列表中:
d = [random.randint(1,6) for _ in range(3)]
您可以对列表进行排序。如果所有元素都相同,则第一个和最后一个值将匹配。如果有重复,则中间元素将匹配第一个或最后一个:
d.sort()
if d[0] == d[2]:
score = sum(d)
elif d[0] == d[1]:
score = d[0] + d[1] - d[2]
elif d[1] == d[2]:
score = d[1] + d[2] - d[0]
else:
score = 0