2014-01-22 48 views
2

我有一個包含52個鍵的字典:值,就像一副撲克牌。如果有兩個或更多的值(卡片)使用相同的短語,我需要檢查一個'if'語句。我需要這個功能,所以我可以多次調用它。檢查python中的一對短語的幾個值/字符串/變量3.3

總之,我需要識別一對'卡'的代碼,就像在德克薩斯舉行'他們',但我不希望它識別兩次相同的價值(卡)。 到目前爲止,我已經嘗試過(我不知道正確的語法,幾乎是僞代碼):

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已經從字典中已經分配的字符串變量,所以對待他們,如果他們是串;因爲他們是。

回答

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") 

或這樣的任意數量的參數的個數:

def cintelpair3(*args): 
    if any(args.count(card) == 2 for card in ['Ace', 'Two']): 
     print("You have a pair") 
+0

感謝您的回覆,也會考慮這個選項,這似乎是一個可能的選擇。 – Russman

2

我認爲將5個參數放在列表中會更方便。然後,該功能可適用於任何尺寸的手。你想匹配的牌可以進入一個名單,matching_cards,這也將適用於任何規模。

Python的換別的語法將很好地工作這種類型的應用:如果你正在尋找確切的字符串匹配

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的樣式。對於matching_phrases中的每個phrase,該函數檢查cardany是否包含phrase。對於要執行的if聲明,allphrase必須位於其中一張卡片中。

def matching(hand, matching_phrases): 
    if all(any(phrase in card for card in hand) for phrase in matching_phrases): 
     print("Match detected!") 
    else: 
     print("Nothing found!") 
+0

感謝您的答覆,我會考慮這個,因爲它似乎比我的當前設置更加有效和可行的。 – Russman

+0

@Russman看到編輯,第一個函數可能不是你正在尋找的。 – jayelm

+0

Thankyou添加該編輯,你是正確的,我想匹配字符串的部分,只是注意到在你的第一個選項!你和ndpu的那兩個一起建議的是我正在尋找的。 – Russman

0

假設你有以下字典:

your_dict = { 
    'ace1': 1, 
    'ace2': 1, 
    ... 
    'two1': 2, 
    'two2': 2, 
    ... 
} 

你湊LD:

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(二王牌卡),2張卡,其值是4(兩張4張牌)和一張價值7美元的卡(一張七張卡)

然後你需要有一個字典(大概),其中包含可能的手(對,滿屋等),並沿着jmu303推薦的行數。

當然,這忽略了一個事實,你會需要比較個人的手,看看誰贏了;)

相關問題