PyLadies Brno

popis_karty pomocí vyhledávacích tabulek

Na jednom z předchozích srazů jsme napsaly funkci popis_karty, která vypadala zhruba takhle:

def popis_karty(karta):
    hodnota, barva, licem_nahoru = karta
    if not licem_nahoru:
        return '[???]'

    if hodnota == 1:
        znak_hodnoty = 'A'
    elif hodnota == 10:
        znak_hodnoty = 'X'
    elif hodnota == 11:
        znak_hodnoty = 'J'
    elif hodnota == 12:
        znak_hodnoty = 'Q'
    elif hodnota == 13:
        znak_hodnoty = 'K'
    else:
        znak_hodnoty = str(hodnota)

    if barva == 'Pi':
        znak_barvy = '♠ '
    elif barva == 'Sr':
        znak_barvy = ' ♥'
    elif barva == 'Ka':
        znak_barvy = ' ♦'
    elif barva == 'Kr':
        znak_barvy = '♣ '

    return '[{}{}]'.format(znak_hodnoty, znak_barvy)

Teď, když známe slovníky, můžeme tuhle funkci výrazně zjednodušit pomocí vyhledávacích tabulek.

  • Schovej si funkční verzi Klondike do Gitu, pokud ji tam ještě nemáš.
  • Přepiš funkci popis_karty tak, aby na zjištění znaku barvy používala místo několika ifů slovník.
  • Pusť testy, a pokud projdou, schovej tuhle verzi do Gitu.
  • Přepiš funkci popis_karty tak, aby používala slovník i na zjištění znaku pro hodnotu. Funkce by měla obsahovat jenom jeden if – if not licem_nahoru:.
  • Pusť testy, a pokud projdou, schovej i tuhle verzi do Gitu.

Řešení

def popis_karty(karta):
    hodnota, barva, licem_nahoru = karta
    if not licem_nahoru:
        return '[???]'

    barvy = {'Pi': '♠ ', 'Sr': ' ♥', 'Ka': ' ♦', 'Kr':'♣ '}
    znak_barvy = barvy[barva]

    hodnoty = {1: 'A', 10: 'X', 11: 'J', 12: 'Q', 13: 'K'}
    znak_hodnoty = hodnoty.get(hodnota, str(hodnota))

    return '[{}{}]'.format(znak_hodnoty, znak_barvy)