Skautská hra

Řešení bez slovníků, ale hlavně takové, kde by nebylo úplně snadné přidat další otázky.

In [ ]:
import random

kdo_seznam = []
s_kym_seznam = []
kde_seznam = []
co_delali_seznam = []
proc_seznam = []
for pocet in range(3):
    kdo = input('Kdo? ')
    kdo_seznam.append(kdo)
    s_kym = input('S kým? ')
    s_kym_seznam.append(s_kym)
    kde = input('Kde? ')
    kde_seznam.append(kde)
    co_delali = input('Co dělali? ')
    co_delali_seznam.append(co_delali)
    proc = input('Proč? ')
    proc_seznam.append(proc)
print(random.choice(kdo_seznam), 's', random.choice(s_kym_seznam),'v', random.choice(kde_seznam), random.choice(co_delali_seznam), random.choice(proc_seznam))

Řešení, kde přidání, změna či odebrání jakékoli otázky znamená jen změnu na jednom míste v seznamu otázek.

In [ ]:
from random import choice

otazky = ['Kdo', 'S kym', 'Co delali', 'Kde']

odpovedi = {}
for otazka in otazky:
    odpovedi[otazka] = []

# Alternativní cesta
# odpovedi = {otazka: [] for otazka in otazky}
    
for otazka in otazky:
    while True:
        odpoved = input('Zadej odpoved na otazku {}? '.format(otazka))
        if odpoved == '':
            break
        else:
            odpovedi[otazka].append(odpoved)

veta = ''

for otazka in otazky:
    veta = veta + choice(odpovedi[otazka]) + ' '

print(veta)

Obecné rady a postřehy

  • Pokud nevracíme n-tici, nepoužíváme za return závorky
    • return (n) je matoucí, správně by mělo být napáno jen return n
    • return (x, y) je správně, ale pro jednoduchost můžeme závorky klině vynechat a napsat jen return x, y
  • Pochvala za validaci inputů
    • Ještě větší pochvala za validaci s pomocí výjimek
  • Pochvala za dokumentační řetězce
    • Ještě větší pochvala za dokumentační řetězce ve třech uvozovkách
      • A ještě větší pochvala těm, kdož jsou konzistentní a dávají dokumentační řetězce úplně všude