检查python

时间:2017-11-17 18:23:28

标签: python python-3.x

我正在制作一个代码,其中三个骰子被滚动,如果所有三个骰子相等,则添加值。如果两个骰子相等,则加上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:

现在我不知道如何找出两个骰子中的哪一个能够将它们加在一起。我该怎么做?

3 个答案:

答案 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