我有一个包含52个键的字典:值,就像一包卡片。如果有两个或更多的值(卡片)具有相同的短语,我需要检查一个'if'语句。我需要这个函数,所以我可以多次调用它。
简而言之,我需要代码来识别“一对”牌,就像德州扑克一样,但我不希望它识别相同的值(卡)两次。 到目前为止,我已经尝试过(我不确定正确的语法,非常多的伪代码):
def cintelpair3(a, b, c, d, e):
if any 2 'Ace' or 'Two' in(a, b, c, d, e):
print("You have a pair")
假设变量a到e已经从字典中分配了字符串,所以将它们视为字符串;因为他们是。
答案 0 :(得分:2)
我认为将5个参数放在列表中会更方便。然后,该函数适用于任何大小的手。您想要匹配的卡片可以放入列表matching_cards
,该列表也适用于任何尺寸。
Python的for-else语法对于这种类型的应用程序非常有效:
def matching(hand, matching_cards):
for card in matching_cards:
if card not in hand:
print("Nothing found!") # Every card needs to be in the hand
break
else: # Every card was found in hand, break never executed
print("Match detected!")
如果您正在寻找精确的字符串匹配,此功能将起作用。但是,如果您想匹配手中的部分字符串(例如,您使用"Two"
之类的短字来匹配"Two of Spades"
和"Two of Hearts"
等卡片,那么该功能会更高级。我认为有两种方法可以解决这个问题:
def matching(hand, matching_phrases):
for phrase in matching_phrases:
for card in hand:
if phrase in card: # Phrase must be in string of at least one card
break # Once phrase is found in one string, break
else: # Otherwise, phrase was never found in any of the cards. No match
print("Nothing found!")
break
else: # Every phrase was found in hand, break never executed
print("Match detected!")
或者,使用更类似于@ndpu的样式。对于phrase
中的每个matching_phrases
,此函数会检查any
的{{1}}是否包含card
。对于要执行的phrase
语句,if
all
必须位于其中一张卡中。
phrase
答案 1 :(得分:2)
如果函数参数是字符串,你可以这样做:
def cintelpair3(a, b, c, d, e):
if any([a, b, c, d, e].count(card) == 2 for card in ['Ace', 'Two']):
print("You have a pair")
对于任意数量的args,或这种方式:
def cintelpair3(*args):
if any(args.count(card) == 2 for card in ['Ace', 'Two']):
print("You have a pair")
答案 2 :(得分:0)
假设您有以下词典:
your_dict = {
'ace1': 1,
'ace2': 1,
...
'two1': 2,
'two2': 2,
...
}
你可以:
import random
hand_values = {}
# Returns a list of 5 (your_dict's VALUES)
random_five = random.sample(list(your_dict.values()), 5)
for card in random_five:
if card in hand_values:
hand_values[card] += 1
else:
hand_values[card] = 1
这会产生类似的结果:
hand_values = {1: 2, 4: 2, 7: 1}
以上是说:你必须包含2张价值为1张的卡(两张Ace卡),2张价值为4张的卡(两张4张卡)和一张价值为7张的卡(一张七张卡)
然后你需要有一个dict(大概),其中包含可能的手(成对,满屋等),并按照jmu303推荐的方式做一些事情。
这当然忽略了这样一个事实:你需要比较个人的手,看谁赢了;)