from itertools import combinations
comb = combinations([1, 2, 3, 4, 5, 6, 7, 8], 4)
for i in list(comb):
if sum(combinations) == 15: # eee? "combinations()" je funkce modulu "itertools"
if sum(i) == 15: # co takhle?
print (i)
# jak te vubec napadlo delat sumu nad nazvem funkce?
Jakoze itertools.combinations() je nazev. Jako bys napsal sum('karel novotny'). Co sis od toho sliboval?
Neco jineho je, kdyz tu funkci provedes. Pak by to sum mohlo davat nejaka cisla, ikdyz uplne spatne :)
Tobe mozna unika, stale, co dela ten pudovni kod. Zkusim to napsat nejak vic pro cloveka, co nema tuseni, co je programovani.
from itertools import combinations
# pridani do programu funkce ze skupiny 'itertools'
# to je nejaky soubor, ktery obsahuje seznam nejakych funkci a ty sis vybral jednu z nich
# nebo si muzes pridat vsechny, ale tvuj program po prelozeni do EXE
# bude pak zabirat zbytecne misto navic
# (protoze ty ostatni funkce nepouzijes ani 1x, proc je tam pridavat?)
comb = combinations([1, 2, 3, 4, 5, 6, 7, 8], 4)
# program v procesoru muzes prirovat ke cteni, psani knizky.
# pr: precte slovo, treba, skoc o 5 slov dal a to udela
# pr: zkopiruj text od pateho pismene, 40 pismen a uloz ho tam a tam nebo zpracuj nejak
# no, a programatori si napsali funkce, kterymi nahrazuji skupinu takovych prikazu
# a nazvali to datove typy. typ
# - pro ukladani cisla 1-32000, integer
# - pro ukladani 1 znaku a-z0-9 a jine ascii, char
# - pro ukladani skupiny znaku, string (pocet + seznam znaku)
# 'karel' = 5 znaku + seznam k a r e l
# - a treba jeste typ pole array nebo seznam list pro ukladani vice skupin cisel, znaku
# ['k', 'a', 'r', 'e', 'l']
# [0, 1, 2, 45, -11]
# ['karel', 'lojza']
#comb = combinations([1, 2, 3, 4, 5, 6, 7, 8], 4)
# z toho zapisu 'comb' je tebou zvoleny nazev promene pro tvuj program
# 'combinations' je ta funkce z importu
# v dokumentaci se doctes, ze vytvari kombinace ze seznamu cisel, znaku
# https://docs.python.org/…ertools.html
# Pozn: Lze ji nahradit cykly, kdyz bys ji nechtel.
# das seznam znaku, treba array = [1,2,3,4,5,6,7,8]
# napises, kolik znaku ma zkombinovat n=4
# a ona ti vyrobi asi pole (array) se ctvericemi znaku
# comb (array) = [ [1,2,3,4], [1,2,3,5], [1,2,3,6], ... [5,6,7,8] ]
# klidne si to predstav jako dvourozmernou tabulku, x,y
1|2|3|4
-+-+-+-
1|2|3|5
-+-+-+-
1|2|3|6
...
5|6|7|8
for i in list(comb):
# tohle je cyklus
# list(comb) konvertuje datovy typ 'array' na 'list' (nejspis je to tam proto,
# ze tento typ cyklu nepracuje s datovym typem 'array', ale jen s typem 'list')
# (jevi se mi to jako hloupost, rychlejsi zpracovani by melo byt primo s array)
# 'i' v kazdem kroku bude kopirovat celou ctverici znaku z pretypovaneho list comb,
# napr [1,2,3,4]
# krok 1, i (array) = [1,2,3,4]
# krok 2, i (array) = [1,2,3,5]
# ...
# krok n, i (array) = [5,6,7,8]
# po posledni hodnote v dalsim kroku cyklus ukonci
# ... ja vim, je to slozite na pochopeni
if sum(i) == 15: # co takhle?
# if sum([1,2,3,4]) == 15: # pro prvni krok
# tim padem, sumu chces delat s 'i' a nikoliv se nazvem funkce 'combinations'
# mozna si to myslel jinak, udelat pole comb, sum(comb)
# ale, to je preci taky blbost, proc delat sumu se vsemi cisly v comb?
# a navic, proc to davat dovnitr cyklu?
print (i)
# no, a to je jen vypis na obrazovku
------
# takze, jeste jednou, strucne, pouziji cyklus primo pro pole 'array'
comb = combinations([1, 2, 3, 4, 5, 6, 7, 8], 4)
# combinations vyrobi pole s kombinacemi cisel
# comb (array) = [ [1,2,3,4], [1,2,3,5], [1,2,3,6], ... [5,6,7,8] ]
#for i in list(comb): # to je trochu nestastne zvolene pojmenivani, to 'i'
# if sum(i) == 15:
#for item in list(comb): # to je lepsi nazev
# if sum(item) == 15:
# nicmene, mi jde o to nahradit to jinym kodem cyklu, takze...
i_end = Len(comb) # spocitej delku pole
for (i=0; i<i_end; i++) # cyklus, opakuj, dokud plati, ze i<i_end;
if sum(comb[i]) == 15:
# treba je to ted vic srozumitelnejsi
# s tim list(comb) usetris pismenka programu, ale, musis vedet, co to dela :)