π₯ ΠΠ°ΠΊ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΈΡΡ Π½Π° Python: ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΈ ΡΠΎΠ²Π΅ΡΡ
Π§ΡΠΎΠ±Ρ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΈΡΡ Π½Π° Python, ΡΠ»Π΅Π΄ΡΠΉΡΠ΅ ΡΡΠΈΠΌ ΡΠ°Π³Π°ΠΌ:
- ΠΡΠ²ΠΎΠΉΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ·ΡΠΊΠ° Python, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠΈΠΊΠ»Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΠ·ΡΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ°ΠΌΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ctypes.
- ΠΠ·ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ³ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΈΡΡ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΌΡΡΡ ΠΈΠ³ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½ΡΠΆΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΈΠ³ΡΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π½Π° Python, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π½Π°ΡΠ°ΡΡ:
import ctypes
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ³ΡΡ
process_id = ...
# ΠΡΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ³ΡΡ
process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, process_id)
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
variable_address = ...
# Π§ΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ
value = ctypes.c_int()
ctypes.windll.kernel32.ReadProcessMemory(process_handle, variable_address, ctypes.byref(value), ctypes.sizeof(value), None)
# ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
new_value = ...
ctypes.windll.kernel32.WriteProcessMemory(process_handle, variable_address, ctypes.byref(new_value), ctypes.sizeof(new_value), None)
# ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ³ΡΡ
ctypes.windll.kernel32.CloseHandle(process_handle)
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΈΡΡ Π½Π° Python
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΠΈΡΠ°ΡΡ "ΡΠΈΡΡ" Π½Π° ΡΠ·ΡΠΊΠ΅ Python. "Π§ΠΈΡΡ" - ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΈΠ³Ρ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π² ΠΈΠ³ΡΠ΅ ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ.
1. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ² Python
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΠΏΠΈΡΠ°ΡΡ "ΡΠΈΡΡ", Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ·ΡΠΊΠ° Python. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠΈΠΊΠ»Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅ΡΡΡΡΡ, ΡΡΠ΅Π±Π½ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΊΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ.
# ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
player_health = 100
player_damage = 20
enemy_health = 50
# Π£ΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
if player_health > enemy_health:
print("ΠΠ³ΡΠΎΠΊ ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»!")
else:
print("ΠΠ³ΡΠΎΠΊ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»!")
# Π¦ΠΈΠΊΠ»
for i in range(5):
print(i)
# Π€ΡΠ½ΠΊΡΠΈΡ
def add_numbers(a, b):
return a + b
2. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ "ΡΠΈΡΠΎΠ²" Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ "ΡΠΈΡΡ" ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ³ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ctypes, Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ctypes Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ³ΡΡ:
import ctypes
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΠΌΡΡΠΈ
address = 0x12345678
# ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
new_value = 999
ctypes.cast(address, ctypes.POINTER(ctypes.c_int)).contents.value = new_value
3. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΊΠΎΠ² ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ "ΡΠΈΡΠΎΠ²" Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Ρ ΡΠΊΠ°ΠΌΠΈ ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π₯ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΈΠ³ΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ pywin32 Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ³ΡΡ:
import win32api
import win32process
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ
ΡΠ½Π΄Π»Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ³ΡΡ
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, process_id)
# ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΡΠ΅ΡΡ
code = b"print('ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!')"
win32process.WriteProcessMemory(handle, address, code, len(code))
4. Π Π°Π±ΠΎΡΠ° Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈ API
ΠΠ½ΠΎΠ³Π΄Π° "ΡΠΈΡΡ" ΠΌΠΎΠ³ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ API. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ requests Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ HTTP-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ³ΡΡ ΠΈΠ»ΠΈ pyautogui Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΡΡΡΡ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ requests Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ GET-Π·Π°ΠΏΡΠΎΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ³ΡΡ:
import requests
# ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ GET-Π·Π°ΠΏΡΠΎΡΠ°
response = requests.get("https://api.example.com/game")
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΠΎΡΠ²Π΅ΡΠ°
data = response.json()
# ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
# ...
5. Π’Π΅Ρ Π½ΠΈΠΊΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ "ΡΠΈΡΠΎΠ²" ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ pdb, Π΄Π»Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ pdb Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π°:
import pdb
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°
pdb.set_trace()
# ΠΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
# ...
6. ΠΡΠΈΠΊΠ° ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ "ΡΠΈΡΠΎΠ²" Π² ΠΈΠ³ΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ Π±ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅ Π²Π°ΡΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌ. ΠΡΠ΄ΡΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ ΠΈ Π½Π΅ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»ΡΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ "ΡΠΈΡΠΎΠ²".
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ°Π³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΠΈΡΠ°ΡΡ "ΡΠΈΡΡ" Π½Π° ΡΠ·ΡΠΊΠ΅ Python. ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ "ΡΠΈΡΠΎΠ²" ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΡΡΠΈΡΠ½ΡΠΌ Π² ΡΠ²ΠΎΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ . ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ Π½Π°ΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ "ΡΠΈΡΠΎΠ²" Π½Π° Python!