首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挑选四张卡片,检查它们是否等于24 - Python。

挑选四张卡片,检查它们是否等于24 - Python。
EN

Stack Overflow用户
提问于 2016-03-10 22:47:31
回答 4查看 558关注 0票数 1

我需要一个程序,选择四张牌,并计算他们的总和。

注意,ace = 1,jack = 11,queen = 12,king = 13。在计算它们的和时,检查该和是否等于24。如果是的话,就录下来。最后,程序应该显示总和为24的组合数。

以下是我所拥有的:

代码语言:javascript
复制
def selfour():
    total = 0

    cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
             1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
             1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
             1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

    for a in range(52):
        for b in range(1, 52):
            for c in range(2, 52):
                for d in range(3, 52):
                    print(cards[a], cards[b], cards[c], cards[d])
                    if (cards[a] + cards[b] + cards[c] + cards[d]) == 24:
                        total += 1

    return total


def main():
    print(selfour())

main()

我不太确定这个程序是否给出了正确的答案,但是效率很低。如果有人能提供帮助,使这段代码更有效率,那就太好了。我相当肯定,这并不能给出一个正确的答案,所以在这方面提供帮助也是很好的。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-10 23:00:41

工具是你的朋友。你可以用一个衬里来做这件事:

代码语言:javascript
复制
import itertools

cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
         1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
         1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
         1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

def selfour():
    return sum(sum(i) == 24 for i in itertools.combinations(cards, 4))
票数 8
EN

Stack Overflow用户

发布于 2016-03-10 23:10:19

你们在想牌不是平等的,但你们不太明白。

代码语言:javascript
复制
for a in range(52):
    for b in range(1, 52):

应该是这样的:

代码语言:javascript
复制
for a in range(52):
    for b in range(52):
        if b == a:
            continue

有一个名为itertools的模块,它的combinations实现了您想要的功能。使用它,嵌套的for循环可以变成:

代码语言:javascript
复制
from itertools import combinations
for a in combinations(cards, 4):
    if sum(a) == 24:
        total += 1
票数 1
EN

Stack Overflow用户

发布于 2016-03-11 00:04:28

我不能百分之百肯定这是否正确,但我做到了:

代码语言:javascript
复制
from itertools import combinations
def sel(it, cnt=4, val=24):
    return sum(sum(_) == val for _ in combinations(it, cnt))

cards = # ...
print(sel(cards, 4, 24))  # => 12517

编辑:对不起,我相信新的答案已经发布了。这件事一出现,我就开始写了,但在发出去之前我就心不在焉了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35928914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档