2017-12-08 10 views
-1

카드 덱을 만들고 특정 작업을 완료해야합니다. 세 번째 작업에서는 두 개의 카드를 비교할 것을 묻습니다 : card1card2. card1card2보다 큰 경우 1, card2card1보다 큰 경우 2 또는 두 카드가 동일한 경우 0을 반환해야합니다. 정장은 무시해야합니다. 출력이 올바르지 않습니다. hand_1의 경우, 0이 리턴되어야 할 때 1이 리턴됩니다. hand_2의 경우 올바른 2가 반환됩니다. hand_3의 경우 1을 반환해야하는 경우 2가 반환됩니다. 내 질문은 : 0, 1, 2가 올바르게 반환되도록하려면 어떻게해야합니까? 전체 코드를 제공했습니다 (작업 3은 맨 아래에 있습니다). 나에게 제공되는 코드는 변경할 수 없으므로이 코드로 작업해야합니다.두 카드의 더 높은 값을 반환하는 방법은 무엇입니까?


#Task 1 
#------ 

import random 

diamonds = ['2♦','3♦','4♦','5♦','6♦','7♦','8♦','9♦','10♦','J♦','Q♦','K♦','A♦'] 
clubs = ['2♣','3♣','4♣','5♣','6♣','7♣','8♣','9♣','10♣','J♣','Q♣','K♣','A♣'] 
hearts = ['2♥','3♥','4♥','5♥','6♥','7♥','8♥','9♥','10♥','J♥','Q♥','K♥','A♥'] 
spades = ['2♠','3♠','4♠','5♠','6♠','7♠','8♠','9♠','10♠','J♠','Q♠','K♠','A♠'] 

def shuffled_deck(): 
    """ 
    Shuffles the deck of cards and returns a shuffled deck. 
    """ 
    deck = diamonds + clubs + hearts + spades 
    random.shuffle(deck) 
    return deck 

deck = shuffled_deck() 

if (len(deck) == 52): 
    print("You might have created a random deck!") 
    print(deck) 
else: 
    print("Your deck isn't yet complete.") 
    print(deck) 

#Task 2 
#------ 

def deal_N_cards(deck, N): 
    """ 
    Returns a list of N cards and removes them from the deck. 
    """ 
    return [deck.pop() for k in range(N)] 

deck2 = shuffled_deck() 
hand1 = deal_N_cards(deck2, 5) 
hand2 = deal_N_cards(deck2, 5) 
hand3 = deal_N_cards(deck2, 20) 

if (len(hand1) + len(hand2) + len(hand3) + len(deck2) == 52): 
    print() 
    print("You might have completed task 2!") 
    print("hand1:") 
    print(hand1) 
    print("hand2:") 
    print(hand2) 
    print("hand3:") 
    print(hand3) 
    print("deck2:") 
    print(deck2) 
else: 
    print() 
    print("Your function isn't yet complete.") 
    print("hand1:") 
    print(hand1) 
    print("hand2:") 
    print(hand2) 
    print("hand3:") 
    print(hand3) 
    print("deck2:") 
    print(deck2) 

#Task 3 
#------ 

def compare_cards(card1, card2): 
    """ 
    Returns 1 if the value of card1 is greater, 
    2 if the value of card2 is greater, 
    or 0 if the values of both card1 and card2 are equal. 
    """ 
    'A' == 11 
    'K' == 10 
    'Q' == 10 
    'J' == 10 
    if card1 > card2: 
     return 1 
    if card1 < card2: 
     return 2 
    if card1 == card2: 
     return 0 

deck3 = shuffled_deck() 
hand_1 = compare_cards('4♣', '4♠') 
hand_2 = compare_cards('2♠', '6♣') 
hand_3 = compare_cards('A♣', 'K♠') 

print() 
print("You might have completed task 3!") 
print("Hand 1:") 
print(hand_1) 
print("Hand 2:") 
print(hand_2) 
print("Hand 3:") 
print(hand_3) 

답변

1

'문자열 사전 식 비교하고, 이종 타입들은 타입 ("INT"< "문자열")의 이름에 의해 비교된다. 3.x는 두 번째 점을 비 호환으로 수정합니다. '기본적으로 수학 논리를 사용하여 문자열을 비교하면 효과가 없습니다.

이 문제를 해결하는 방법에 대해서는 데크가 어떻게 만들어 졌는지 재구성해야한다고 생각합니다. 키가 슈트이고 값이 value 인 사전을 만들어이 작업을 수행 할 수 있습니다. 또는 각 목록의 이름이되는 수트가있는 목록을 가질 수 있습니다. 하지만 전반적으로 코드를 구조화하는 방법은보다 객체 지향적 인 접근 방식이 필요합니다. 데크가 두 번째 데크를 만드는 대신 다양한 기능을 가진 객체 인 데크와 같은 경우.