Python πΊπ¦
βͺοΈΠΠΈΠ²ΡΠ°ΡΠΌΠΎ Python ΡΠ°Π·ΠΎΠΌ. βͺοΈΠΠΈΡΠΎΠΊΠΎΠΎΠΏΠ»Π°ΡΡΠ²Π°Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ βͺοΈΠΠΎΠΏΠΎΠΌΠ°Π³Π°ΡΠΌΠΎ Π· ΠΏΠΎΡΡΠΊΠΎΠΌ ΡΠΎΠ±ΠΎΡΠΈ ΠΠ²'ΡΠ·ΠΎΠΊ: @Ekater1na_admin
ΠΠΎΠ»ΡΡΠ΅π ΠΠ½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ Telegram-ΠΊΠ°Π½Π°Π»Π° Python πΊπ¦
ΠΠ°Π½Π°Π» Python πΊπ¦ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π£ΠΊΡΠ°ΠΈΠ½ΡΠΊΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠΌ. Π‘Π΅ΠΉΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ 20 332 ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΎΠ², Π·Π°Π½ΠΈΠΌΠ°Ρ 6 352 ΠΌΠ΅ΡΡΠΎ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ 2 992 ΠΌΠ΅ΡΡΠΎ Π² ΡΠ΅Π³ΠΈΠΎΠ½Π΅ Π£ΠΊΡΠ°ΠΈΠ½Π°.
π ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°
Π‘ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΡΡΠ΅ΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΎΡΡ, ΡΠΎΠ±ΡΠ°Π² Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ ΠΈΠ· 20 332 ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΎΠ².
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΎΡ 27 Π°Π²Π³ΡΡΡΠ°, 2026, ΠΊΠ°Π½Π°Π» ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 30 Π΄Π½Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ -195, Π° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 24 ΡΠ°ΡΠ° β -8, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±ΡΠΈΠΉ ΠΎΡ Π²Π°Ρ ΠΎΡΡΠ°ΡΡΡΡ Π²ΡΡΠΎΠΊΠΈΠΌ.
- Π‘ΡΠ°ΡΡΡ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ: ΠΠ΅ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½
- Π£ΡΠΎΠ²Π΅Π½Ρ Π²ΠΎΠ²Π»Π΅ΡΡΠ½Π½ΠΎΡΡΠΈ (ER): Π‘ΡΠ΅Π΄Π½ΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²ΠΎΠ²Π»Π΅ΡΡΠ½Π½ΠΎΡΡΠΈ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 10.51%. Π ΠΏΠ΅ΡΠ²ΡΠ΅ 24 ΡΠ°ΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Π±ΠΈΡΠ°Π΅Ρ 5.42% ΡΠ΅Π°ΠΊΡΠΈΠΉ ΠΎΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΈΡΠ»Π° ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΎΠ².
- ΠΡ Π²Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΉ: Π ΡΡΠ΅Π΄Π½Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ 2 137 ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠ². Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π°Π±ΠΈΡΠ°Π΅Ρ 1 102 ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠ².
- Π Π΅Π°ΠΊΡΠΈΠΈ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ: ΠΡΠ΄ΠΈΡΠΎΡΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ: ΡΡΠ΅Π΄Π½Π΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π°ΠΊΡΠΈΠΉ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡ β 14.
- Π’Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡ: ΠΠΎΠ½ΡΠ΅Π½Ρ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½ Π½Π° ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ΅ΠΌΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΠ°, mcp, user1, python'er, Π±ΡΠ±Π»ΡΠΎΡΠ΅ΠΊΠ°.
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ½Π°Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°
ΠΠ²ΡΠΎΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΡ Π΄Π»Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ½Π΅Π½ΠΈΡ:
ββͺοΈΠΠΈΠ²ΡΠ°ΡΠΌΠΎ Python ΡΠ°Π·ΠΎΠΌ.
βͺοΈΠΠΈΡΠΎΠΊΠΎΠΎΠΏΠ»Π°ΡΡΠ²Π°Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ
βͺοΈΠΠΎΠΏΠΎΠΌΠ°Π³Π°ΡΠΌΠΎ Π· ΠΏΠΎΡΡΠΊΠΎΠΌ ΡΠΎΠ±ΠΎΡΠΈ
ΠΠ²'ΡΠ·ΠΎΠΊ: @Ekater1na_adminβ
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠ°ΡΡΠΎΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ (ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ 28 Π°Π²Π³ΡΡΡΠ°, 2026) ΠΊΠ°Π½Π°Π» ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈ Π²ΡΡΠΎΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΡ Π²Π°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΉ. ΠΠ½Π°Π»ΠΈΡΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π²Π»ΠΈΡΠ½ΠΈΡ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
min() ΡΠ° max(), ΡΠΎΠ± Π·Π½Π°ΠΉΡΠΈ Π½Π°ΠΉΠΌΠ΅Π½ΡΠ΅ ΠΉ Π½Π°ΠΉΠ±ΡΠ»ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½Π½Ρ Π² Π±ΡΠ΄Ρ-ΡΠΊΡΠΉ ΠΏΠΎΡΠ»ΡΠ΄ΠΎΠ²Π½ΠΎΡΡΡ
Π ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π²Ρ ΡΡΠ½ΠΊΡΡΡ ΠΌΠ°ΡΡΡ Π·ΡΡΡΠ½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ default β Π²ΡΠ½ ΡΡΠ°Π½Π΅ Ρ ΠΏΡΠΈΠ³ΠΎΠ΄Ρ, ΡΠΊΡΠΎ ΡΠ°ΠΏΡΠΎΠΌ Π²Π°ΡΠ° ΠΊΠΎΠ»Π΅ΠΊΡΡΡ Π²ΠΈΡΠ²ΠΈΡΡΡΡ ΠΏΠΎΡΠΎΠΆΠ½ΡΠΎΡ. ΠΠ΅Π· Π·Π°ΠΉΠ²ΠΈΡ
ΠΏΠ΅ΡΠ΅Π²ΡΡΠΎΠΊ Ρ Π²ΠΈΠ½ΡΡΠΊΡΠ²
Python pip install pynguin
PythonΠΡΠ½ΠΎΠ²Π½Ρ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎΡΡΡ: β’ Π²ΠΈΠΊΠΎΠ½ΡΡ ΠΊΠΎΠ΄ Π·Π° ΠΎΠΏΠΈΡΠΎΠΌ: Π²ΠΈ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ½ΡΡΡΡΠΊΡΡΡ Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΎΡ ΠΌΠΎΠ²ΠΎΡ, Π° OpenInterpreter Π³Π΅Π½Π΅ΡΡΡ ΠΏΠΎΡΡΡΠ±Π½ΠΈΠΉ ΠΊΠΎΠ΄, Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΉΠΎΠ³ΠΎ ΠΏΡΡΠ»Ρ ΠΏΡΠ΄ΡΠ²Π΅ΡΠ΄ΠΆΠ΅Π½Π½Ρ ΡΠ° ΠΏΠΎΠΊΠ°Π·ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Ρ ΡΠ΅ΡΠΌΡΠ½Π°Π»Ρ β’ ΠΏΡΠ°ΡΡΡ Π· ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ° ΠΌΠ΅Π΄ΡΠ°: ΡΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΡΡ ΡΠΎΡΠΌΠ°ΡΠΈ, ΡΠ΅Π΄Π°Π³ΡΡ PDF Ρ ΠΌΠ°ΡΠΎΠ²ΠΎ ΠΎΠ±ΡΠΎΠ±Π»ΡΡ Π·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½Ρ ΠΎΠ΄Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΡ β’ Π°Π½Π°Π»ΡΠ·ΡΡ Π΄Π°Π½Ρ: Π±ΡΠ΄ΡΡ Π³ΡΠ°ΡΡΠΊΠΈ, ΠΎΡΠΈΡΠ°Ρ Π΄Π°ΡΠ°ΡΠ΅ΡΠΈ, ΡΡΠ°Π½ΡΡΠΎΡΠΌΡΡ ΡΡ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠΎΡΠΌΡΡ ΠΌΡΠ½Ρ-Π·Π²ΡΡΠΈ β’ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΡΡ ΡΠΎΠ±ΠΎΡΡ Π· Π²Π΅Π±ΠΎΠΌ: Π·Π±ΠΈΡΠ°Ρ Π΄Π°Π½Ρ Π·Ρ ΡΡΠΎΡΡΠ½ΠΎΠΊ, Π·Π°ΠΏΠΎΠ²Π½ΡΡ ΡΠΎΡΠΌΠΈ ΡΠ° ΡΠ΅ΡΡΡΡ ΡΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ Π±Π΅Π· ΡΡΡΠ½ΠΎΡ ΡΡΠ°ΡΡΡ β’ ΠΏΡΠ΄ΡΡΠΈΠΌΡΡ Π±Π΅Π·ΠΏΠ΅ΡΠ½ΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ: ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π±ΡΠ΄Ρ-ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Ρ ΠΏΡΠΎΡΠΈΡΡ ΠΏΡΠ΄ΡΠ²Π΅ΡΠ΄ΠΆΠ΅Π½Π½Ρ, Π°Π»Π΅ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΠΌΡ ΡΠ΅ΠΆΠΈΠΌΡPython
Π£ Π±ΡΠ»ΡΡΠΎΡΡΡ Π²ΠΈΠΏΠ°Π΄ΠΊΡΠ² ΡΠΊΡΡΠ½Ρ ΡΠ΅ΡΡΠΈ ΠΌΠ°ΡΡΡ ΠΎΡ ΠΎΠΏΠ»ΡΠ²Π°ΡΠΈ ΡΠ°ΠΊΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΡΡ: β’ ΠΎΡΠ½ΠΎΠ²Π½Ρ Β«happy pathΒ» ΡΡΠ΅Π½Π°ΡΡΡ, Π΄Π΅ Π²ΡΠ΅ ΠΏΡΠ°ΡΡΡ ΡΠΊ ΠΎΡΡΠΊΡΡΡΡΡΡ β’ ΠΊΡΠ°ΠΉΠΎΠ²Ρ ΡΠ° Π³ΡΠ°Π½ΠΈΡΠ½Ρ Π²ΠΈΠΏΠ°Π΄ΠΊΠΈ β’ Π½Π΅Π³Π°ΡΠΈΠ²Π½Ρ ΡΠ΅ΡΡΠΈ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡΡΡ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ β’ ΡΠΈΡΡΠ°ΡΡΡ Π· Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΈΠΌΠΈ Π°Π±ΠΎ Π½Π΅Π±Π΅Π·ΠΏΠ΅ΡΠ½ΠΈΠΌΠΈ Π²Π²ΠΎΠ΄Π°ΠΌΠΈ
import uuid
from dataclasses import dataclass
from typing import Optional
@dataclass
class User:
username: str
class InMemoryUserRepository:
def __init__(self):
self._users = []
def add(self, user: User) -> None:
self._users.append(user)
def search(self, query: Optional[str] = None) -> list[User]:
if query is None:
return self._users
else:
return [
user
for user in self._users
if query in user.username
]
# happy path
def test_search_users_without_query_lists_all_users():
user1 = User(username="john@doe.com")
user2 = User(username="marry@doe.com")
repository = InMemoryUserRepository()
repository.add(user1)
repository.add(user2)
assert repository.search() == [user1, user2]
# happy path
def test_search_users_with_email_part_lists_all_matching_users():
user1 = User(username="john@doe.com")
user2 = User(username="bob@example.com")
user3 = User(username="marry@doe.com")
repository = InMemoryUserRepository()
repository.add(user1)
repository.add(user2)
repository.add(user3)
assert repository.search("doe") == [user1, user3]
# edge test case
def test_search_users_with_empty_query_lists_all_users():
user1 = User(username="john@doe.com")
user2 = User(username="marry@doe.com")
repository = InMemoryUserRepository()
repository.add(user1)
repository.add(user2)
assert repository.search("") == [user1, user2]
# negative test case
def test_search_users_with_random_query_lists_zero_users():
user1 = User(username="john@doe.com")
repository = InMemoryUserRepository()
repository.add(user1)
assert repository.search(str(uuid.uuid4())) == []
# security test
def test_search_users_with_sql_injection_has_no_effect():
user1 = User(username="john@doe.com")
repository = InMemoryUserRepository()
repository.add(user1)
repository.search("DELETE FROM USERS;")
assert repository.search() == [user1]
Python