Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: shockwave 27. 12. 2019, 18:48:52
-
Ahoj, nevysvetlil by mi prosim nekdo, co znamena ten 4 radek , max index, proc tam davaji to -1. Dekuji moc
words = ["dog","cat","hint"]
counter = 0
max_index = len(words)-1 / proc -1, nikde v tutorial nereknou:(
while counter <= max_index:
word = words[counter]
print(word + "!")
counter = counter + 1
-
Protože pole se indexuje od nuly:
index prvního prvku je 0 -> index posledního prvku, nebo-li max_index, je délka pole - 1.
-
Funkce len() vrací počet prvků pole, ve vašem případě tedy 3. Prvky pole jsou indexované od nuly, tedy první prvek pole má index 0, tj. words[0] == "dog", words[1] == "cat", words[2] == "hint". Index posledního prvku v poli je tedy o jedničku menší, než počet prvků v poli.
Indexování prvků pole od nuly je zvyk z doby, kdy se přistupovalo přímo k paměti. Adresa prvku pole pak byla adresa pole + index * velikost prvku pole.
Ale zrovna v tom vašem případě by se stejného výsledku dalo dosáhnout i bez odečítání jedničky, stačilo by místo operátoru menší nebo rovno použít ostře menší:
words = ["dog","cat","hint"]
counter = 0
length = len(words)
while counter < length:
word = words[counter]
print(word + "!")
counter = counter + 1
-
Ale zrovna v tom vašem případě by se stejného výsledku dalo dosáhnout i bez odečítání jedničky, stačilo by místo operátoru menší nebo rovno použít ostře menší:
nebo
words = ["dog","cat","hint"]
for word in words:
print(word + "!")
-
Ale zrovna v tom vašem případě by se stejného výsledku dalo dosáhnout i bez odečítání jedničky, stačilo by místo operátoru menší nebo rovno použít ostře menší:
Tak ne, to by byl stejný antipattern, jako ten původní případ.Todle by se v pythonu mělo napsat buďto pomocí té Tvé druhé varianty for word in words:, nebo kdyby byl potřeba i index, takfor i,word in enumerate(words):Jakékoli while s counterem je špatně čitelné a tedy blbě (i když to třeba funguje).
-
Ale zrovna v tom vašem případě by se stejného výsledku dalo dosáhnout i bez odečítání jedničky, stačilo by místo operátoru menší nebo rovno použít ostře menší:
Tak ne, to by byl stejný antipattern, jako ten původní případ.Todle by se v pythonu mělo napsat buďto pomocí té Tvé druhé varianty for word in words:, nebo kdyby byl potřeba i index, takfor i,word in enumerate(words):Jakékoli while s counterem je špatně čitelné a tedy blbě (i když to třeba funguje).
Předpokládám, že shockwave čte nějakou příručku pro začátečníky, a že tohle byl příklad na přístup k poli přes index. I když pak je divné, že tam to indexování od nuly není vysvětlené. Jinak souhlasím s tím, že v normálním kódu je lepší použít konstrukce na vyšší úrovni abstrakce, když je jazyk má, takže v Pythonu použít uvedený for … in.
-
Teda jestli jsou takové příklady v příručce pro začátečníky, tak tím hůř...