首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从7张纸牌中提取对

从7张纸牌中提取对
EN

Stack Overflow用户
提问于 2020-01-07 11:16:30
回答 1查看 58关注 0票数 0

我正在用Python语言编写代码来创建一个GoFish游戏,而不是四个人而不是一种人,你需要寻找对。我用python写了一段代码,用来在7张牌中找对。代码给出了所有对的列表(所以它是列表的列表)。因为我是Python新手,所以我想知道是否有更有效的方法来实现我的代码所做的事情。

这是我写的代码。最终,它将成为类中的一个函数。

代码语言:javascript
运行
复制
#hand = ['D2', 'S1', 'D3', 'H1', 'C1', 'H5', 'D5']
#hand = ['D1', 'S1', 'S2', 'H2', 'C1', 'H5', 'D5']
#hand = ['D1', 'S1', 'S2', 'H1', 'C1', 'H5', 'D5']
hand = ['D1', 'S1', 'C1', 'H1', 'C2', 'H2', 'D5']
#hand = ['D2', 'S1', 'C3', 'H4', 'C5', 'H6', 'D7']

list_of_pairs = []
i=0
while i < len(hand):
    current_pos = i
    for k in range(i+1, len(hand)):
        card_1 = hand[i]
        card_2 = hand[k]
        if card_1[-1:] == card_2[-1:]:
            pair_2 = hand.pop(k)
            pair_1 = hand.pop(i)
            pair = [pair_1, pair_2] 
            list_of_pairs.append(pair)
            i = current_pos - 1
            break
    i +=1 

print(f"List of pairs is {list_of_pairs}")
print(f"Left over hand is {hand}")
EN

回答 1

Stack Overflow用户

发布于 2020-02-07 15:35:14

代码语言:javascript
运行
复制
hand = [1,1,2,2,3,4,5,6,7,7,8,9,9]
hand_set = set()
pairs = set()
for card in hand:
    if card in hand_set:
        pairs.add(card)
    else:
        hand_set.add(card)

如果可以有两对相同卡片

代码语言:javascript
运行
复制
from collections import Counter
hand = [1,1,1,1,2,2,3,3,4,4,5,5,6,7,8,9,9,9,9]
card_counter = Counter()
for card in hand:
    card_counter[card]+=1

pairs = []
for k in card_counter:
    for i in range(int(card_counter[k]/2)):
        pairs.append([k,k])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59621733

复制
相关文章

相似问题

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