ΡΠ°Ρ ΠΌΠ°ΡΡ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅ ΠΊΠΎΠ΄
Π¨Π°Ρ ΠΌΠ°ΡΠ½Π°Ρ ΠΈΠ³ΡΠ° Π² Python
Π― Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π» Π½Π° 2 ΠΌΠ΅ΡΡΡΠ°, ΠΈ Ρ Π½Π°ΡΠ°Π» ΠΏΠΈΡΠ°ΡΡ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΡ ΠΈΠ³ΡΡ. Π― Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π² Python, ΠΏΠΎΡΡΠΎΠΌΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΌΠΎΠΉ ΠΊΠΎΠ΄.
4 ΠΎΡΠ²Π΅ΡΠ°
ΠΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΡ, ΠΈ Ρ ΠΌΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Π», ΡΡΠΎ Π·Π°Π±ΡΠΎΡΡ ΡΠ²ΠΎΠΈ Π΄Π²Π° ΡΠ΅Π½ΡΠ°. Π― Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ /Π²ΡΡΠ°Π²ΠΊΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π΅ΡΡ Π²Π°Ρ ΠΊΠΎΠ΄ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° class ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΡΡΡΠΏΠΎΠΌ Π΅ΡΠ΅ 4 ΠΏΡΠΎΠ±Π΅Π»Π°. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΡΡΠ΅ΡΠ° ΡΡΠΎΠ³ΠΎ.
ΠΡΠ°ΠΊ, Π²ΠΎΡ ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄Π»Ρ Π²Π°Ρ:
Π₯ΠΎΡΠΎΡΠΈΠΉ
ΠΠ»ΠΎΡ ΠΎΠΉ
ΠΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ, ΡΡΠΎ Π²ΡΠ΅ Π²Π΅ΡΠΈ pep8, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅Π³ΠΎ Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ». ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΠ΄ΡΠΈ Π½Π° ΡΡΠΈΠ»Ρ & ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π·Π±ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΡΠ΅Π½ΠΈΡ ΠΈ Π΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°ΠΉΠ», Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅, Π² ΠΊΡΠ°ΡΠΊΠΎΠΉ ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ΅.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ²ΡΡΠ΅ΠΊ, Π² ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΏΠΎΠΏΠ°Π»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π°ΡΠ° Π±Π΅Π»Π°Ρ Π»Π°Π΄ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. Π§ΡΠΎ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ Π΄Π΅Π»Π°ΡΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ Π»Π°Π΄ΡΠΈ?
ΠΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΠ΅ ΡΠ΅Π±Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ²Π΅Ρ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ°ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ 4 ΡΡΡΠ°ΡΡ (Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ) ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»Π°ΡΡ.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΡ ΠΏΡΡΡΡΡ ΠΏΠ»Π°ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· 8 ‘.’ s Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ.
Π Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΈΠΌΠ΅ΡΡ 2 ΠΎΡΠΈ Ρ Π²Π΅ΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Ρ ΡΠΈΠΊΠ»ΠΎΠΌ for.:
Π’Π°ΠΊΠΆΠ΅ ΡΠΌΡΡΠ½ΠΎ Π²Ρ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈ Π΄ΠΎΡΠΊΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ Π½Π΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π»ΡΠ΄Π΅ΠΉ Π΄ΠΎΠ³Π°Π΄ΡΠ²Π°ΡΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΠ΅Π»ΡΠΉ ΠΠΎΡΠΎΠ»Ρ. Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΌΠ΅ΡΠ½ΠΎ, Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ Π΄ΠΎΡΠΊΠΈ. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π― ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΡ Π΄ΠΎΡΠΊΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ ΠΏΡΠ΅ΡΡ. ΠΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΠΎΡΠΎΠ»Ρ Π² Π΄ΠΎΡΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ Π΅Π³ΠΎ Π½Π° Π΄ΠΎΡΠΊΠ΅. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΡ Π΄ΠΎΡΠΊΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π½ΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΡΠ°ΠΊ ΡΡΠΎ ΠΊΠΎΡΠΎΠ»Ρ ΡΠ²ΡΠ·Π°Π½ Ρ Π΄ΠΎΡΠΊΠΎΠΉ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΊ Π½ΠΈΠΌ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠΌΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Π΄ΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·ΡΠΌΠ΅Ρ ΠΊΡΡΠΎΠΊ ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Π§ΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ»Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Ρ ΠΊΡΠ°Ρ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΡΠ°ΡΡΡ Π²Π·ΡΡΡ ΠΊΠΎΡΠΎΠ»Ρ (Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΠ°ΠΌ ΠΊΡΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ³ΡΠΎΠΊΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (Ρ.Π΅. ΠΏΡΡΠ°ΡΡΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΡΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠ²Π°Π΄ΡΠ°Ρ Π·Π° ΡΠ°Π·).
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΡΠΈ ΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ. ΠΠΎΡΠ΅ΠΌΡ ΠΊΠΎΡΠΎΠ»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π»ΠΈ Π΅ΠΌΡ ΠΈΠ΄ΡΠΈ Π½Π° ΠΊΠ²Π°Π΄ΡΠ°Ρ 8, 4. ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΡΠΎΠ²Π΅ΡΠ°!
, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠ»ΠΈ ΠΈΠΌΡ == » main «: ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΉΠ».
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΠΉ ΠΠ: 5 ΠΏΡΠΎΡΡΡΡ ΡΡΠ°ΠΏΠΎΠ²
ΠΠ΅ΡΠ΅Π²Π΅Π»ΠΈ Π΄Π»Ρ Π²Π°Ρ ΡΡΠ°ΡΡΡ ΠΠΎΡΠΈ Π₯Π°ΡΡΠΈΠΊΠΊΠ° (Lauri Hartikka) ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π³ΠΎ ΠΠ Π΄Π»Ρ ΡΠ°Ρ ΠΌΠ°Ρ. ΠΠ½Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π΅ΡΠ΅ Π² 2017 Π³ΠΎΠ΄Ρ, Π½ΠΎ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΡΠ°Π»ΠΈΡΡ ΡΠ΅ΠΌΠΈ ΠΆΠ΅. ΠΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΠΎΡΠΈ, ΡΠΎΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΡΠΎΡΡΠΎΠΉ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΠΈΠ³ΡΠ°ΡΡ Π² ΡΠ°Ρ ΠΌΠ°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π° Π±Π°Π·Π΅ ΡΠ΅ΡΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ:
ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ: Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Β«Π₯Π°Π±ΡΠ°Β» β ΡΠΊΠΈΠ΄ΠΊΠ° 10 000 ΡΡΠ±Π»Π΅ΠΉ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΊΡΡΡ Skillbox ΠΏΠΎ ΠΏΡΠΎΠΌΠΎΠΊΠΎΠ΄Ρ Β«Π₯Π°Π±ΡΒ».
ΠΠΎΡΠΎΠ²ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° GitHub.
I’m having trouble beating a chess program I wrote.
Not sure if I’m a bad player or the algorithm is decent.
ΠΡΠ°ΠΏ 1. ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈ Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ Ρ ΠΎΠ΄ΠΎΠ²
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ chess.js Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Ρ ΠΎΠ΄ΠΎΠ² ΠΈ chessboard.js Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΠΊΠΈ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Ρ ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΈΠ³ΡΡ.
ΠΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΎΠ½Π° ΠΎΡΠΊΡΠΎΠ΅ΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ.
Π Π°Π±ΠΎΡΠ° Ρ ΡΡΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ β ΠΏΠΎΠΈΡΠΊΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Ρ ΠΎΠ΄. Π Π°Π±ΠΎΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ Ρ ΠΎΠ΄ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ .
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΠΈΠ³ΡΠΎΠΊΠΎΠΌ Π² ΡΠ°Ρ ΠΌΠ°ΡΡ, Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ.
Π§Π΅ΡΠ½ΡΠ΅ Ρ
ΠΎΠ΄ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. (ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³ΡΠ° ΠΎΠ½Π»Π°ΠΉΠ½)
ΠΡΠ°ΠΏ 2. ΠΡΠ΅Π½ΠΊΠ° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, Ρ ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΡΡ β ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠ»Ρ ΡΠΈΠ³ΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ΅Π½ΠΊΠΈ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Ρ ΠΎΠ΄ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ.
Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΉ, Π½ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π·ΡΡΡ ΡΡΠΆΡΡ ΡΠΈΠ³ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΅ΡΡΡ.
Π§Π΅ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΠ°ΡΡ Π±Π΅Π»ΡΠ΅ ΡΠΈΠ³ΡΡΡ. (ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³ΡΠ° Π·Π΄Π΅ΡΡ).
ΠΡΠ°ΠΏ 3. ΠΠ΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡ
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ Π»ΡΡΡΠΈΠΉ Ρ ΠΎΠ΄. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡ-Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
ΠΠ΄Π΅ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Ρ ΠΎΠ΄ΠΎΠ² Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π³Π»ΡΠ±ΠΈΠ½Ρ. ΠΠΎΠ·ΠΈΡΠΈΡ ΠΆΠ΅ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ Π»ΠΈΡΡΡΡΠΌ Π½Π°ΡΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π°.
ΠΠ°Π»Π΅Π΅ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ·Π΅Π». ΠΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Ρ ΠΎΠ΄ ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΎΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠΎΠ²Π½Π΅ΠΉ.
Π‘ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡ-Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ Π½Π°Ρ ΠΠ ΡΠΆΠ΅ ΡΡΠ°Π» ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ°ΠΊΡΠΈΠΊΡ ΡΠ°Ρ ΠΌΠ°Ρ.
ΠΠΈΠ½ΠΈΠΌΠ°ΠΊΡ Ρ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ 2 (ΠΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³ΡΠ° Π·Π΄Π΅ΡΡ)
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡ-Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Ρ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ° ΡΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°ΠΏ.
ΠΡΠ°ΠΏ 4. ΠΠ»ΡΡΠ°-Π±Π΅ΡΠ°-ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡ-Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, Π΄Π°ΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΠ²ΠΈ Π² Π΄Π΅ΡΠ΅Π²Π΅ ΠΏΠΎΠΈΡΠΊΠ°. Π ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΠΏΠΎΠΈΡΠΊΠ°, Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Ρ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΠ»ΡΡΠ°-Π±Π΅ΡΠ°-ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠ΅Π½ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΠ²ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ Ρ ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Ρ ΡΠ΄ΡΠ΅ΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΡΠ΅ΠΌ ΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ.
ΠΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ, Π½ΠΎ Π²ΡΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅.
ΠΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΡΠΈ, Π²Π΅Π΄ΡΡΠΈΠ΅ ΠΊ Ρ ΠΎΡΠΎΡΠΈΠΌ Ρ ΠΎΠ΄Π°ΠΌ.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Ρ
ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΠΌΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π»ΡΡΠ°-Π±Π΅ΡΠ°-ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Ρ Π°Π»ΡΡΠ°-Π±Π΅ΡΠ°-ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°ΠΊΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ, ΠΈ Π²Π΅ΡΡΠΌΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½ΠΈΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠΈΡΠΊΠ° Ρ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ 4 ΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° Π²ΡΡΠ΅. (ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ Π·Π΄Π΅ΡΡ)
ΠΡΠ°ΠΏ 5. Π£Π»ΡΡΡΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ΅Π½ΠΊΠΈ
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ΅Π½ΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΡΡΠΈΡΠ°Π΅Ρ ΠΎΡΠΊΠΈ ΡΠΈΠ³ΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅. ΠΠ»Ρ Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠ³ΡΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠΎΠ½Ρ Π² ΡΠ΅Π½ΡΡΠ΅ Π΄ΠΎΡΠΊΠΈ, ΡΠΎ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΠΎΠΆΠ΅ β ΡΠΏΠ΅ΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Ρ ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠΈΠ³ΡΡΡ ΡΠ°ΡΡΠΈΡΠΈΡΡΡ.
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡ, ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π² Π²ΠΈΠΊΠΈ Chess Programming.
Π ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΈΠ³ΡΠ°Π΅Ρ ΡΠΆΠ΅ Π²Π΅ΡΡΠΌΠ° Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΡΠ΅Π΄Π½ΠΈΠΌ ΠΈΠ³ΡΠΎΠΊΠΎΠΌ.
ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ Π·Π΄Π΅ΡΡ
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΆ Π³Π»ΡΠΏΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π·Π΄Π΅ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π²ΡΠ΅Π³ΠΎ Π² 200 ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΡΠ°ΠΊ ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΡ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ github.com/lhartikk/simple-chess-ai’>Π²ΠΈΠ΄Π΅ΡΡ Π½Π° GitHub.
Π Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ:
ΠΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π½Π° Chess Programming Wiki.
Π¨Π°Ρ ΠΌΠ°ΡΡ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅ ΠΊΠΎΠ΄
Python Easy Chess GUI
A Chess GUI based from Python using PySimpleGUI and Python-Chess modules. Users can also load a chess engine and play with it. This program is based on a demo chess against ai from PySimpleGUI.
If you want to run from the python source the following are required or see the installation section below.
Or you can just download the executable file along with other files such as book and images.
1. Save games to repertoire pgn files
2. Install uci engine of your choice
2.1 It is recommended to configure the engine setting after installation
Configure engine via Engine->Manage->Edit, select engine and press modify.
3. Need book assistance? Right-click on BOOK 2 and press show
4. Need what engine adviser will think about the position? Right-click on Adviser and press start
To set opponent engine book options
To Hide/Unhide engine search info
To Hide/Unhide Book info
To request Adviser search info
To select opponent engine
To set time control of engine
To set time control of user
To delete engine from config file
About
A Chess GUI based from Python using PySimpleGUI and Python-Chess.
Making Chess in Python
I will first describe whatβs happening and then show the code afterward.
This is a large project that me and a friend in school conducted. This is pretty funny because we had plans on doing this over several months and 7 days later we have the entire thing completed. I must say, this would not have been possible if it werenβt for the help of my friend Edwin. Firstly we abstracted the entire game since this is a very complex game to code and we decided that I would be responsible for the interface(what the user can see) while Edwin was responsible for the actual behaviour of each piece. They both have their own forms of difficulties to make and we did have to co-ordinate a lot so it wasnβt like we didnβt help each other make each otherβs parts eg. i did teach him a bit of list comprehension to speed up his code while he exposed my pretty stupid mistake of doing column row instead of row column.
This code is everything that I wrote alongside some of the dictionary and methods above it. First we create the window object which is the window that comes up when we run the chess game on. We set the dimensions to 800×800 which is the tuple argument which we passed into it. We specifically chose 800 x 800 because the images for the chess pieces that we hard were all 100×100 which meant it would fit perfectly if the board was 800×800.
The main thing that makes my program work are these node objects and they are just the containers which hold the chess pieces(they are simulated as the tiles of the chess board in this case. They have their attributes which are their row, column,x,y co-ordinates. We need these separately because all these nodes are going to be stored in a 8×8 2d list so if we call it we would need to call it using its row and col numbers while if we were drawing it onto the screen we need its x,y pixel values(we could just do row*100 but that would risk us forgetting to add that 1 time in the entire code and watching the entire thing break).
The draw function is used to used to draw the tile onto the screen(so the black and white pattern) while the setup method is used to draw any images onto the screen if we had a piece on the screen at that position. You draw onto the screen using blit.
Draw grid draws the boundaries to the grid(so the black horizontal and vertical lines that separate the tiles) and draw grid and make grid is creating the 2d list which are going to use to access all the nodes later. Update display is used to update the screen every-time the tick. I think to avoid the CPU being overloaded, we chose to run the program at 20fps which is ofc completely unreasonable for chess but we didnβt want too much delay.
When the user clicks on the screen, we need to figure out what tile they have clicked on which is what find_node does. Display_potential_moves is a function edwin made but it just takes a list of potential moves and for those moves, changes the colour of the tile so that it stands out.
Do_move is used to acc make the swap on the screen but swapping the values on my dictionary, when the screen updates, this change will be visible on the screen.
remove_highlight is used because it is hard to remove the highlights for specific tiles so we decided to just to redraw the black colours for all the tiles instead.
The main function then contains a lot fo standard logic which I would hope you would have a grasp on if you know pygame. I will attach a video here too just incase you donβt
If I were to explain the entirety of the code, this would take hours on hours to write so I am going to explain the functions and any complex concepts which may be in them and leave you to solve out the rest.
We used pygame to write this program since it can easily give us the interface and I have experience from my A* algorithm on how to make a grid so most of the grid is just recycled code from that.
Except from the starting order dict, all of this was edwins code and all of it used for the move calculations. Theoretically you could have done this with only one of either a dictionary or a 2d list like he has done but since we both needed access to an array for our parts while we were coding and we couldnβt share a python script, we made our own versions. Edwin makes a class for the pieces since it is easier to manage and at the bottom he is setting up his 2d list so all the pieces are in their starting positions. In my dictionary, I hard wrote all the positions automatically since I needed to put the name of each of the individual image files into the load. pygame.image.load() is going to load an image onto the python file and then we only need to draw the image onto the screen. It is better this way than loading the image and then drawing because it means we only need to load the image once for the entire program and then just translate this image onto new positions on the screen.
The rest of edwins code is pretty self-explanatory and is just choosing the correct positions that each piece can move to and then putting those βlegalβ tiles on the chessboard for us to use on the interface as a way of highlighting the board.
rsheldiii / chess.py
This comment has been minimized.
Copy link Quote reply
d3mon1231 commented Nov 24, 2017
pawn can moves two forward from their starting place. I dont think yours can
This comment has been minimized.
Copy link Quote reply
MichaelGitHubHype commented Dec 7, 2017
Seems to always return error with input for me
You should probably make clearer instructions
This comment has been minimized.
Copy link Quote reply
Kwame0 commented May 3, 2018
why dont u guys just code it urselves if ur having problems lmao
This comment has been minimized.
Copy link Quote reply
Menocha commented Aug 12, 2018
hey! I’m gonna try it. Any recommendations?
This comment has been minimized.
Copy link Quote reply
ChessMast commented Dec 6, 2018
The following are the issues that I found:
Boards sideways instead of up and down
Black and white are on the wrong side of the board
The white king and queen are in the wrong positions
It doesn’t recognize checkmate
It lets you take into check
Pawns only move one square
No en passant
No castling
Crashes when you capture king
Not proper notation
This comment has been minimized.
Copy link Quote reply
Shadowking1235 commented Mar 8, 2019
Very educative, Thanks for the upload.
This comment has been minimized.
Copy link Quote reply
JayTesla commented Mar 8, 2019
This program run which complier
This comment has been minimized.
Copy link Quote reply
Julius2005 commented Mar 26, 2019
hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?
This comment has been minimized.
Copy link Quote reply
TheRealKinglogic commented Mar 31, 2019
hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?
This comment has been minimized.
Copy link Quote reply
inigmati commented Apr 5, 2019
Start as a white player i.e. e7 e6
This comment has been minimized.
Copy link Quote reply
mikelittle88 commented May 16, 2019
also its not put for first moving pawns to go 2 spaces
This comment has been minimized.
Copy link Quote reply
martin5852 commented Aug 6, 2019
This comment has been minimized.
Copy link Quote reply
mcwaffles2003 commented Nov 1, 2019
«why dont u guys just code it urselves if ur having problems lmao»
I came ere to learn how to but how can I dissect code if I cant even interact with it to see how its working (if it even does)
This comment has been minimized.
Copy link Quote reply
Ogrone commented Nov 28, 2019
hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?
i have the same problem
This comment has been minimized.
Copy link Quote reply
rishisankhla commented Feb 22, 2020
hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?
This comment has been minimized.
Copy link Quote reply
ManzhouYang commented Jun 23, 2020
I can’t promote my pawn to a queen
This comment has been minimized.
Copy link Quote reply
NicholasSager55 commented Jul 6, 2020 β’
If you are having difficulties with the other code, I improved it with some minor fixes. If you want to know how to move your pieces, type a2-a4 as an example. Make sure to copy all of the code after this text:
«»»CONVENTIONS:
positions are done row-column from the bottom left and are both numbers.
This corresponds to the alpha-number system in traditional chess while being computationally useful.
They are specified as tuples
«»»
import itertools
import copy
import inspect
WHITE = «white»
BLACK = «black»
gameboard = None
def canSeeKing(kingpos,piecelist, overridegameboard = None):
global gameboard
overridegameboard = overridegameboard or gameboard
for piece,position in piecelist:
if piece.isValid(position,kingpos,piece.Color,overridegameboard):
return True
def isCheck(overridegameboard = None):
global gameboard
#ascertain where the kings are, check all pieces of opposing color against those kings,
# then if either get hit, check if its checkmate
overridegameboard = overridegameboard or gameboard
king = King
kingDict = <>
pieceDict =
for position,piece in overridegameboard.items():
if type(piece) == king:
kingDict[piece.Color] = position
print(piece)
pieceDict[piece.Color].append((piece,position))
#white
if canSeeKing(kingDict[WHITE],pieceDict[BLACK], overridegameboard):
return WHITE
if canSeeKing(kingDict[BLACK],pieceDict[WHITE], overridegameboard):
return BLACK
return False
class Game:
def init(self):
global gameboard
self.playersturn = WHITE
self.message = «Input Your Move»
gameboard = self.gameboard = <>
self.placePieces()
print(«Chess program. Enter moves in algebraic notation separated by space. Example: a2-a4»)
self.main()
chessCardinals = [(1,0),(0,1),(-1,0),(0,-1)]
chessDiagonals = [(1,1),(-1,1),(1,-1),(-1,-1)]
def knightList(x,y,int1,int2):
«»»Sepcifically for the rook, permutes the values needed around a position for noConflict tests»»»
return [(x+int1,y+int2),(x-int1,y+int2),(x+int1,y-int2),(x-int1,y-int2),(x+int2,y+int1),(x-int2,y+int1),(x+int2,y-int1),(x-int2,y-int1)]
def kingList(x,y):
return [(x+1,y),(x+1,y+1),(x+1,y-1),(x,y+1),(x,y-1),(x-1,y),(x-1,y+1),(x-1,y-1)]
class Knight(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return [(xx,yy) for xx,yy in knightList(x,y,2,1) if self.noConflict(gameboard, Color, xx, yy)]
class Bishop(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return self.AdNauseum(x, y, gameboard, Color, chessDiagonals)
class Queen(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return self.AdNauseum(x, y, gameboard, Color, chessCardinals+chessDiagonals)
class King(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return [(xx,yy) for xx,yy in kingList(x,y) if self.noConflict(gameboard, Color, xx, yy)]
class Pawn(Piece):
def init(self,color,name,direction):
self.name = name
self.Color = color
self.direction = direction
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
answers = []
if (x+1,y+self.direction) in gameboard and self.noConflict(gameboard, Color, x+1, y+self.direction) : answers.append((x+1,y+self.direction))
if (x-1,y+self.direction) in gameboard and self.noConflict(gameboard, Color, x-1, y+self.direction) : answers.append((x-1,y+self.direction))
if (x,y+self.direction) not in gameboard and Color == self.Color and self.noConflict(gameboard, Color, x, y+self.direction) : answers.append((x,y+self.direction))# the condition after the and is to make sure the non-0capturing movement is not used in the calculation of checkmate
if (x,y+self.direction2) not in gameboard and Color == self.Color and self.noConflict(gameboard, Color, x, y+self.direction2) : answers.append((x,y+self.direction*2))# the condition after the and is to make sure the non-0capturing movement is not used in the calculation of checkmate
return answers
if (name == «main«):
input(«Press the Enter Key to Exit»)