Π Π°Π·Π½ΠΎΠ΅

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ | Python 3 для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΈ Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ПишСм 3 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Python Π·Π° ΠΏΠ°Ρ€Ρƒ ΠΌΠΈΠ½ΡƒΡ‚ / itProger

ΠŸΠΈΡ‚ΠΎΠ½ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык ΠΈ сСгодня ΠΌΡ‹ с Π²Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ сразу Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π΅Π³ΠΎ основС. КаТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ смоТСтС ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² дальнСйшСм.

#1 — ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ трансфСром для Ρ„Π°ΠΉΠ»ΠΎΠ². Π•Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для автоматичСской сортировки Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΈΡ‚ΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ‹ отслСТиваСтС Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π» Π² ΠΏΠ°ΠΏΠΊΡƒ Β«Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠΈΒ» ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° автоматичСски ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΌΡƒΠ·Ρ‹ΠΊΠ°, Ρ„ΠΎΡ‚ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° самого Ρ„Π°ΠΉΠ»Π°.

Для выполнСния Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ спСрва ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Β«watchdogΒ»:

pip install watchdog

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ вСсь ΠΊΠΎΠ΄, ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅ вмСстС с коммСнтариями:

# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ
from watchdog.observers import Observer
import os
import time
# FileSystemEventHandler - класс ΠΏΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
from watchdog.events import FileSystemEventHandler


# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ класс наслСдник, Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π² ΠΏΠ°ΠΏΠΊΠ°Ρ…
class Handler(FileSystemEventHandler):
	# ΠŸΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… измСнСниях Π² ΠΏΠ°ΠΏΠΊΠ΅, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π½Π΅ΠΉ
	def on_modified(self, event):
		# ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ folder_track
		for filename in os.listdir(folder_track):
			# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π΅ΠΈ Ρ„Π°ΠΉΠ»Π°
			extension = filename.split(".")
			# Если это Ρ„ΠΎΡ‚ΠΎ,
			if len(extension) > 1 and (extension[1].lower() == "jpg" or extension[1].lower() == "png" or extension[1].lower() == "svg"):
				# Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΡƒ с Ρ„ΠΎΡ‚ΠΎ
				file = folder_track + "/" + filename
				new_path = folder_dest + "/Photos/" + filename
				os.rename(file, new_path)
			# Если Ρ„Π°ΠΉΠ» Π²ΠΈΠ΄Π΅ΠΎ, Ρ‚ΠΎ Π² ΠΏΠ°ΠΏΠΊΡƒ с Π²ΠΈΠ΄Π΅ΠΎ
			# Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²
			elif len(extension) > 1 and extension[1].lower() == "mp4":
				file = folder_track + "/" + filename
				new_path = folder_dest + "/Videos/" + filename
				os.rename(file, new_path)


# Папка Ρ‡Ρ‚ΠΎ отслСТиваСтся
folder_track = '/ΠŸΠžΠ›ΠΠ«Π™_ПУВЬ_К_ВАШЕЙ_ΠŸΠΠŸΠšΠ•'
# Папка ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ
folder_dest = '/ΠŸΠžΠ›ΠΠ«Π™_ПУВЬ_К_ВАШЕЙ_ΠŸΠΠŸΠšΠ•'

# Запуск всСго Π½Π° отслСТиваниС
handle = Handler()
observer = Observer()
observer.schedule(handle, folder_track, recursive=True)
observer.start()

# ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 милисСкунд 
try:
	while(True):
		time.sleep(10)
except KeyboardInterrupt:
	observer.stop()

observer.join()
#2 — Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСрвСра

Наша вторая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ· сСбя ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ сСрвСр, созданный с использованиСм лишь Python, Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Django ΠΈΠ»ΠΈ Flask.

Π§Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎ, Ρ‚Π°ΠΊ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ сСрвСр ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лишь встроСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python. Для этого ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ· http.server Π΄Π²Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… классах. Π”Π°Π»Π΅Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Β«localhostΒ» ΠΈ ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΈ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° основС HTTPServer. ПослС этого запускаСм сСрвСр Π½Π° постоянноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

from http.server import HTTPServer, CGIHTTPRequestHandler
server_data = ("localhost", 8080)
server = HTTPServer(server_data, CGIHTTPRequestHandler)
server.serve_forever()

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Β«index.htmlΒ» ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΌ всю Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ. На страницС сСрвСра Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ содСрТимоС ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°.

#3 — Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ это ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Β«SeleniumΒ» Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»:Β 

pip install selenium

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅Π± Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчит Ρ€Π°Π±ΠΎΡ‚Ρƒ с вашим Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницС Selenium. Π’Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ всС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Π΄Π°Π»Π΅Π΅ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ послСднюю ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ скачиваСтС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ Π²Π°ΡˆΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ страницы:

from selenium import webdriver
browser = webdriver.Chrome('/ПУВЬ_К_ΠŸΠΠŸΠšΠ•_Π‘_Π”Π ΠΠ™Π’Π•Π ΠžΠœ/chromedriver')
browser.get("https://itproger.com")
Π’ΠΈΠ΄Π΅ΠΎ Π½Π° эту Ρ‚Π΅ΠΌΡƒ

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ всСх этих Ρ‚Ρ€Ρ‘Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ курс

На нашСм сайтС Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½Ρ‹ΠΉ курс ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ языка ΠŸΠΈΡ‚ΠΎΠ½. Π’ Ρ…ΠΎΠ΄Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ язык ΠŸΠΈΡ‚ΠΎΠ½, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π± сайты Π·Π° счёт Π²Π΅Π± Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π”ΠΆΠ°Π½Π³ΠΎ. Π—Π° курс Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ массу Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с языком ΠŸΠΈΡ‚ΠΎΠ½, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ПК прилоТСния Π½Π° основС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Kivy, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π± сайты Π½Π° основС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π”ΠΆΠ°Π½Π³ΠΎ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΌΠ΅Ρ‡Ρ‚Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΈΡ‚ΠΎΠ½ΠΎΠ²ΠΎΠ΄Π° / Π₯Π°Π±Ρ€

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ любой Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ программист Π½Π° Python патологичСски стараСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой Ρ‡Π°Ρ‚. А Ссли Π΅Ρ‰Π΅ ΠΈ с GUI, Ρ‚ΠΎ эта ΠΏΡ€ΠΎΡ€Π°ΠΌΠΌΠ° являСтся просто ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠΌ ΠΌΠ΅Ρ‡Ρ‚Π°Π½ΠΈΠΉ.

Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ввСдСния

Для Π½Π°Ρ‡Π°Π»Π° Π²Π²Π΅Π΄Π΅ΠΌ Π² Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ насколько условностСй β€” пишСм ΠΌΡ‹ Ρ‡Π°Ρ‚ для локальной сСти с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. Для простоты Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² качСствС GUI Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Tkinter(ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΈΠ²Π°Ρ… Linux ΠΎΠ½Π° ΠΈΠ΄Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сборкС Python ΠΏΠΎΠ΄ Windows ΠΎΠ½Π° являСтся стандартной).

Π—Π°ΠΏΠΈΡ‚ΠΎΠ½ΠΈΠΌ ΡΠ΅Ρ‚ΡŒ

Π Π°Π±ΠΎΡ‚Π° с сокСтами Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹(ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счСту Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄ PyS60 ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ сСтСвой ΠΊΠΎΠ΄, ΠΏΠΎ этому ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ).

Для нашСго Ρ‡Π°Ρ‚Π° ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈΡ… использования Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ использования сСрвСра. НСобходимо ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΡƒΡΠ»ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ β€” Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΈ ΠΏΡƒΡΡ‚ΡŒ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 11719, Π²ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это простоС число(Π° вСдь это ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅). А, Π²ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, этот ΠΏΠΎΡ€Ρ‚, ΠΏΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ IANA, Π½Π΅ занят.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΉ сокСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ консоль сообщСниями приходящими Π½Π° Π½Π΅Π³ΠΎ:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0',11719))
while 1:
	message = s.recv(128)
	print (message)

Π£ сокСта ΠΌΡ‹ выставили свойства SO_REUSEADDR(позволяСт нСскольким прилоТСниям Β«ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒΒ» сокСт) ΠΈ SO_BROADCAST(ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅) Π² Π·Π½Π°Ρ‡Π½ΠΈΠ΅ истины. На самом Π΄Π΅Π»Π΅ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π° скрипта ΠΈ Π±Π΅Π· этих строчСк, Π½ΠΎ всС ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ эти свойства.

На ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΊΡƒ ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ адрСсу ‘0.0.0.0’ β€” это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС интСрфСйсы. МоТно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΠΎΠ»Π΅ адрСса ΠΈ просто пустыС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π½ΠΎ всС ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ адрСс.

Π’Π°ΠΊ ΠΆΠ΅ создадим ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ «засиралку» сСти(для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹):

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while 1:
	sock.sendto('broadcast!',('255.255.255.255',11719))

Π’ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰Π΅ΠΉ части, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° лишь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опция SO_BROADCAST(Π·Π°Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…) ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sendto() ΠΌΡ‹ рассылаСм ΠΏΠΎ всСй сСти наши ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CTRL+C сСтСвой Ρ„Π»ΡƒΠ΄ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ описанию интСрфСйса.

Окна, окна, окна

Tkinter β€” Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΎΠ΄Π½Π° ΠΈΠ· самых простых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ интСрфСйса Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅(Π° Π΅Ρ‰Π΅ ΠΏΠΎ заявлСнию создатСля ΠΏΠΈΡ‚ΠΎΠ½Π° ΠΎΠ½Π° являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ…). Но для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΈΡ‚ΠΎΠ½ΠΎΠ²ΠΎΠ΄Π° Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ всС ΠΆΠ΅, Ρ‡Ρ‚ΠΎ эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° простая.

И для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ просто ΠΎΠΊΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΠΎΡ‚ нас трСбуСтся лишь нСсколько строчСк ΠΊΠΎΠ΄Π°:

from Tkinter import *

tk=Tk()
tk.title('MegaChat')
tk.geometry('400x300')
tk.mainloop()

ВсС Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π½ΠΎ ΠΌΡ‹ создаСм, Π½Π΅ Π³Π°Π»Π΅Ρ€Π΅ΡŽ ΠΎΠΊΠΎΠ½ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², Π° Ρ‡Π°Ρ‚. А Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π½Π° ΠΎΠΊΠ½Π΅ Π΅Ρ‰Π΅ ΠΈ элСмСнты β€” Π»ΠΎΠ³ Ρ‡Π°Ρ‚Π°, ΠΏΠΎΠ»Π΅, Π³Π΄Π΅ ΠΌΡ‹ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ свой Π½ΠΈΠΊ ΠΈ тСкст сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ. Π‘Π΅Π· ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, Ссли нашС ΠΏΠΎΠ»Π΅ для сообщСния Π±ΡƒΠ΄Π΅Ρ‚ само Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши Enter.

РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ каТСтся. Для Π»ΠΎΠ³Π° Ρ‡Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Text, Π° для Π΄Π²ΡƒΡ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Entry. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ элСмСнты Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ автоматичСский ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ pack, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ извСстным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅ΠΌΡƒ способом Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ элСмСнты, ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ явноуказанных ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ. Однако, Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сторону ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π»ΠΈ ΠΈΡ… ΠΈ Π² ΠΊΠ°ΠΊΡƒΡŽ сторону, ΠΈ Π΅Ρ‰Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.

from Tkinter import *

tk=Tk()
tk.title('MegaChat')
tk.geometry('400x300')
log = Text(tk)
nick = Entry(tk)
msg = Entry(tk)
msg.pack(side='bottom', fill='x', expand='true')
nick.pack(side='bottom', fill='x', expand='true')
log.pack(side='top', fill='both',expand='true')
tk.mainloop()

А Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄ΠΎ связи интСрфСйса с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹? Или ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ„ΠΎΠ½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ? Ну Entry ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с StingVar’Π°ΠΌΠΈ(ΡƒΠΊΠ°Π·Π°Π² Π² конструкторС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² свойство textvariable). Π° для запуска Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π΅ΡΡ‚ΡŒ Ρƒ Tkinter’Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ after(<врСмя Π² мс>,<функция>). Если Π² ΠΊΠΎΠ½Ρ†Π΅ исполнСния этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΅Π΅, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ постоянно, ΠΏΠΎΠΊΠ° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

НСсколько Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

from Tkinter import *

tk=Tk()

text=StringVar()
name=StringVar()
name.set('HabrUser')
text.set('')
tk.title('MegaChat')
tk.geometry('400x300')

log = Text(tk)
nick = Entry(tk, textvariable=name)
msg = Entry(tk, textvariable=text)
msg.pack(side='bottom', fill='x', expand='true')
nick.pack(side='bottom', fill='x', expand='true')
log.pack(side='top', fill='both',expand='true')

def loopproc():
	print ('Hello '+ name.get() + '!')
	tk.after(1000,loopproc)

tk.after(1000,loopproc)
tk.mainloop()

Π’ консоли Π·Π°Π±Π΅Π³Π°Π»ΠΎ привСтствиС. МСняя Π½ΠΈΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ убСдится, Ρ‡Ρ‚ΠΎ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»Π΅ΠΌ Entry ΠΈ нашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ идСально. Π‘Π°ΠΌΠΎΠ΅ врСмя Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ своСго сообщСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° Enter. РСализуСтся это Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° bind(<дСйствиС>, <функция>) Ρƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ЕдинствСнноС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ event. Π—Π° ΠΎΠ΄Π½ΠΎ пСрСнСсСм с консоли дСйствиС Π² ΠΏΠΎΠ»Π΅ Π»ΠΎΠ³Π°. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

from Tkinter import *

tk=Tk()

text=StringVar()
name=StringVar()
name.set('HabrUser')
text.set('')
tk.title('MegaChat')
tk.geometry('400x300')

log = Text(tk)
nick = Entry(tk, textvariable=name)
msg = Entry(tk, textvariable=text)
msg.pack(side='bottom', fill='x', expand='true')
nick.pack(side='bottom', fill='x', expand='true')
log.pack(side='top', fill='both',expand='true')

def loopproc():
	log.insert (END,'Hello '+ name.get() + '!\n')
	tk.after(1000,loopproc)

def sendproc(event):
	log.insert (END,name.get()+':'+text.get()+'\n')
	text.set('')

msg.bind('<Return>',sendproc)
tk.after(1000,loopproc)
tk.mainloop()
ΠŸΠΎΡ‡Ρ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎ…

И каТСтся, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ частСй ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‡Π°Ρ‚. Π§Ρ‚ΠΎ ΠΆ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ. Однако сразу скаТу, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ отправляСм Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ β€” Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΡ‹ ΠΈΡ… ΠΈ Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ.

import socket
from Tkinter import *

tk=Tk()

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0',11719))

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)

text=StringVar()
name=StringVar()
name.set('HabrUser')
text.set('')
tk.title('MegaChat')
tk.geometry('400x300')

log = Text(tk)
nick = Entry(tk, textvariable=name)
msg = Entry(tk, textvariable=text)
msg.pack(side='bottom', fill='x', expand='true')
nick.pack(side='bottom', fill='x', expand='true')
log.pack(side='top', fill='both',expand='true')

def loopproc():
	message = s.recv(128)
	log.insert(END,message)
	tk.after(1,loopproc)

def sendproc(event):
	sock.sendto (name.get()+':'+text.get(),('255.255.255.255',11719))
	text.set('')

msg.bind('<Return>',sendproc)
tk.after(1,loopproc)
tk.mainloop()

Однако, Ρ‡ΡƒΠ΄Π° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°ΠΌΠ΅Ρ€Ρ‚Π²ΠΎ встала Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ входящСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ оказался Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΡƒΠΆ ΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ ΠΈ для продолТСния выполнСния ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½ΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ это происходило ΡΠ»ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠΉ сокСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСвСсти Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ сообщСниС ΠΎΠ± ошибкС ΠΊΠΎΠ³Π΄Π° Π² сокСтС пусто ΠΎΠ³Ρ€Π°Π΄ΠΈΠΌ этот кусок ΠΊΠΎΠ΄Π° try’Π΅ΠΌ.

import socket
from Tkinter import *

tk=Tk()

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0',11719))

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)

text=StringVar()
name=StringVar()
name.set('HabrUser')
text.set('')
tk.title('MegaChat')
tk.geometry('400x300')

log = Text(tk)
nick = Entry(tk, textvariable=name)
msg = Entry(tk, textvariable=text)
msg.pack(side='bottom', fill='x', expand='true')
nick.pack(side='bottom', fill='x', expand='true')
log.pack(side='top', fill='both',expand='true')

def loopproc():
	s.setblocking(False)
	try:
		message = s.recv(128)
		log.insert(END,message+'\n')
	except:
		tk.after(1,loopproc)
		return
	tk.after(1,loopproc)
	return

def sendproc(event):
	sock.sendto (name.get()+':'+text.get(),('255.255.255.255',11719))
	text.set('')

msg.bind('<Return>',sendproc)
tk.after(1,loopproc)
tk.mainloop()
«А послС Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ напильником…Β»

Чисто тСорСтичСски ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ работоспособСн, Π½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ достаточно вСсомыми нСдостатками β€” ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° сообщСния сразу Π½Π΅ выбираСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΊΠΈΡ€ΠΈΠ»ΠΈΡ†Π΅ΠΉ ΠΈ Π»ΠΎΠ³ сам Π½Π΅ прокручиваСтся Π²Π½ΠΈΠ·. РСшСниС всСх этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ листинга(мСсто, Π³Π΄Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ вопрос ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠ», ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ надСюсь ΠΈ Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ):

# -*- coding: utf-8 -*- 

import socket
from Tkinter import *

#РСшаСм вопрос с ΠΊΠΈΡ€ΠΈΠ»ΠΈΡ†Π΅ΠΉ
reload(sys)
sys.setdefaultencoding('utf-8')
#-----------------------------

tk=Tk()

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0',11719))

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)

text=StringVar()
name=StringVar()
name.set('HabrUser')
text.set('')
tk.title('MegaChat')
tk.geometry('400x300')

log = Text(tk)
nick = Entry(tk, textvariable=name)
msg = Entry(tk, textvariable=text)
msg.pack(side='bottom', fill='x', expand='true')
nick.pack(side='bottom', fill='x', expand='true')
log.pack(side='top', fill='both',expand='true')

def loopproc():
	log.see(END)
	s.setblocking(False)
	try:
		message = s.recv(128)
		log.insert(END,message+'\n')
	except:
		tk.after(1,loopproc)
		return
	tk.after(1,loopproc)
	return

def sendproc(event):
	sock.sendto (name.get()+':'+text.get(),('255.255.255.255',11719))
	text.set('')

msg.bind('<Return>',sendproc)

msg.focus_set()

tk.after(1,loopproc)
tk.mainloop()

P.S. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ β€” Π΄Π»ΠΈΠ½Π° ΠΏΠΈΡ‚ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 9-10 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π½Π° Python

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ создадим Π½Π° основС языка программирования Python своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС с .exe Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GUI

GUI (Graphical user interface) — графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π‘ этого понятия ΠΌΡ‹ ΠΈ Π½Π°Ρ‡Π½Π΅ΠΌ. На самом Π΄Π΅Π»Π΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… скрытых смыслов здСсь Π½Π΅Ρ‚ ΠΈ GUI — это графичСскоС прСдставлСниС для всСх Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ самом Π²ΠΈΠ΄Π΅. Но Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΊΠΎΠ΄ взаимодСйствовал с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ интСрфСйс для взаимодСйствия.

Π’ «ΠΏΠΈΡ‚ΠΎΠ½Π΅» Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π° Π΅Π³ΠΎ основС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свой графичСский интСрфСйс. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Tkinter — встроСнный GUIΒ  для Python. Он устанавливаСтся вмСстС «ΠΏΠΈΡ‚ΠΎΠ½ΠΎΠΌ».

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ PyQT, Kivy (Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для кроссплатформСнности, ΠΏΡ€ΠΈ создании ПО ΠΏΠΎΠ΄ apk, exe ΠΈΠ»ΠΈ MAC). ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт — kivy.org.

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Tkinter. Удобная Π²Π΅Ρ‰ΡŒ Π² Python состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² свой Ρ„Π°ΠΉΠ». Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Tkinter, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ #include Π² C.

from Tkinter import *
import Tkinter
import tkMessageBox
top = Tk()
L1 = Label(top, text="HI")
L1.pack( side = LEFT)
E1 = Entry(top, bd =5)
E1.pack(side = RIGHT)
B=Button(top, text ="Hello",)
B.pack()

top.mainloop()

Π—Π΄Π΅ΡΡŒ Tk() относится ΠΊ классу Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Tkinter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ сохраняСм, инициализируя Π² top. Label — это ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ тСкста, Entry — для создания пустой записи, Button — для создания ΠΊΠ½ΠΎΠΏΠΊΠΈ.

pack — это ΠΊΠ»ΡŽΡ‡ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ всСго Π² ΠΌΠ°ΠΊΠ΅Ρ‚. mainloop сохраняСт всС Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ графичСский интСрфСйс.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ собствСнный ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ простой графичСский интСрфСйс с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΈ полями. ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ ΠΊ созданию простого ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Python.

Π‘Ρ€Π°Π·Ρƒ скаТу, Ρ‡Ρ‚ΠΎ ΡΡ‚ΠΈΠ»ΡŒ ΠΊΠΎΠ΄Π°, названия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ ΠΈ сущСствуСт n-способов создания ΠΊΠΎΠ΄Π°, Π½ΠΎ здСсь ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ создания ПО, Π° Π½Π΅ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ написания ΠΊΠΎΠ΄Π°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ GUI

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΊΠΎΠ΄Ρƒ, ΠΌΡ‹ создадим графичСский интСрфСйс для нашСго прилоТСния-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°. Для Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ понимания ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ 4 строчки для Π²Π²ΠΎΠ΄Π°.

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ написанным ΠΊΠΎΠ΄ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΈ возьмСм ΠΎΡ‚Ρ‚ΡƒΠ΄Π° label, entry ΠΈ button.

from Tkinter import *
import Tkinter
import tkMessageBox

top = Tkinter.Tk()
L1 = Label(top, text="My calculator",).grid(row=0,column=1)
L2 = Label(top, text="Number 1",).grid(row=1,column=0)
L3 = Label(top, text="Number 2",).grid(row=2,column=0)
L4 = Label(top, text="Operator",).grid(row=3,column=0)
L4 = Label(top, text="Answer",).grid(row=4,column=0)
E1 = Entry(top, bd =5)
E1.grid(row=1,column=1)
E2 = Entry(top, bd =5)
E2.grid(row=2,column=1)
E3 = Entry(top, bd =5)
E3.grid(row=3,column=1)
E4 = Entry(top, bd =5)
E4.grid(row=4,column=1)
B=Button(top, text ="Submit",).grid(row=5,column=1,)

top.mainloop()

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ нашСм случаС сразу послС Π²Π²ΠΎΠ΄Π° 2 чисСл ΠΈ указания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΡ‚Π²Π΅Ρ‚.

НачнСм с ΠΊΠ½ΠΎΠΏΠΊΠΈ Submit (см. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π²Ρ‹ΡˆΠ΅).

Нам Π½ΡƒΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠ½ΠΎΠΏΠΊΠ΅, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для этого.

B=Button(top, text ="Submit", command =processing).grid(row=5,column=1)

def process():
    number1=Entry.get(E1)
    number2=Entry.get(E2)
    operator=Entry.get(E3)

НазываСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ process, которая послС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ, простыми словами, обращаСтся Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊ нашим строкам Π²Π²ΠΎΠ΄Π°Β ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ значСния, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΡ‹ сохраняСм Π² number1, number2, operator.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ вычислСний

На этом этапС Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся строкой.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π² int.

number1 = int(number1)
number2 = int(number2)

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ значСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, + — * /) для Ρ€Π°Π±ΠΎΡ‚Ρ‹.

На самом Π΄Π΅Π»Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ довольно простоС — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ifΒ  ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ вычислСния Π²Π½ΡƒΡ‚Ρ€ΠΈ условий.

number1=int(number1)
number2=int(number2)
if operator == "+&quΡ„ot;:
    answer = number1 + number2
if operator == "-":
    answer = number1 - number2
if operator == "*":
    answer= number1 * number2
if operator == "/":
    answer = number1 / number2

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π² Python обозначаСтся ΠΊΠ°ΠΊ » « ΠΈΠ»ΠΈ ‘ ‘,Β  Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ здСсь Π² if ΠΌΡ‹ провСряСм строковый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ сохраняСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ answer.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄:

Entry.insert(E4,0,answer)

Код Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

from Tkinter import *
import Tkinter
import tkMessageBox
def process():
    number1=Entry.get(E1)
    number2=Entry.get(E2)
    operator=Entry.get(E3)
    number1=int(number1)
    number2=int(number2)
    if operator =="+":
        answer=number1+number2
    if operator =="-":
        answer=number1-number2
    if operator=="*":
        answer=number1*number2
    if operator=="/":
        answer=number1/number2
    Entry.insert(E4,0,answer)
    print(answer)

top = Tkinter.Tk()
L1 = Label(top, text="My calculator",).grid(row=0,column=1)
L2 = Label(top, text="Number 1",).grid(row=1,column=0)
L3 = Label(top, text="Number 2",).grid(row=2,column=0)
L4 = Label(top, text="Operator",).grid(row=3,column=0)
L4 = Label(top, text="Answer",).grid(row=4,column=0)
E1 = Entry(top, bd =5)
E1.grid(row=1,column=1)
E2 = Entry(top, bd =5)
E2.grid(row=2,column=1)
E3 = Entry(top, bd =5)
E3.grid(row=3,column=1)
E4 = Entry(top, bd =5)
E4.grid(row=4,column=1)
B=Button(top, text ="Submit",command = process).grid(row=5,column=1,)

top.mainloop()

Π’Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ написали ΠΊΠΎΠ΄ нашСго ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π·Π²ΡƒΡ‡ΠΈΡ‚ слишком тСхничСским? ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅Ρ‚, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅. ΠœΡ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ сдСлали этот ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³Ρƒ. Π”Ρ€ΡƒΠ³ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число Π²Π²ΠΎΠ΄ΠΈΡ‚ Π±ΡƒΠΊΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΌ Π³Π΄Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹. Python Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ сразу останавливаСтся.

Π—Π΄Π΅ΡΡŒ ΠΈΠ΄Π΅Ρ‚ процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Python, Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΈ Π½Π° Π²Π΅Π±-страницах выдаСтся ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ сообщСния.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ считаСтся простым процСссом. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

def proces():
    try:
        number1=Entry.get(E1)
        number2=Entry.get(E2)
        operator=Entry.get(E3)
        number1=int(number1)
        number2=int(number2)
        if operator =="+":
            answer=number1+number2
        if operator =="-":
            answer=number1-number2
        if operator=="*":
            answer=number1*number2
        if operator=="/":
            answer=number1/number2
        Entry.insert(E4,0,answer)
        print(answer)
    except ValueError:
        tkMessageBox.showwarning("Warning","Please enter the value in integer")

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ сдСлали простоС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ. tkMessageBox.showwarning — это настраиваСмоС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ для Tkinter, Π³Π΄Π΅ Π² скобках ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ сообщСниС.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ EXE

Π’Ρ‹ создали ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Python, которая ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ послС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ошибок. Но Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° — Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своим ΠΊΠΎΠ΄ΠΎΠΌ Python с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ? Π£ Π½ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Python, Π½ΠΎ часто это просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ дСлания Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ свой ΠΊΠΎΠ΄ ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ всСго ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ *.exe — Ρ„Π°ΠΉΠ».

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ *.exe Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ»ΠΈ Apk (для Android) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ «Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΡ‚ΡŒ» (freeze) ваш ΠΊΠΎΠ΄.

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ способов «Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΡ‚ΡŒ» ваш ΠΊΠΎΠ΄, Π½ΠΎ я Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Pyinstaller.

Π¨Π°Π³ 1

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт pyinstaller.org ΠΈ установитС Π΅Π³ΠΎ. МоТно это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· pip, Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Pyinstaller.

pip install pyinstaller

Π¨Π°Π³ 2

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится ΠΊΠΎΠ΄, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ SHIFT + ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΌΡ‹ΡˆΠΈ ΠΈ Π΄Π°Π»Π΅Π΅ «ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС». Π’.Π΅. Π»ΠΈΠ±ΠΎ «open in command prompt» ΠΈΠ»ΠΈ «power shell» Π² зависимости ΠΎΡ‚ вашСй вСрсии ОБ.

python pyinstaller.py --noconsole yourscript.py
pyinstaller.exe --onefile --windowed --name myapps --icon=yourico.ico yourscript.py

ДобавляСм свой Π·Π½Π°Ρ‡ΠΎΠΊ для EXE-Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ всё Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π˜ΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Python ΠΈ *.exe Ρ„Π°ΠΉΠ» Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½ΠΈΠΆΠ΅:

На этом ΠΌΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΡƒΡ€ΠΎΠΊ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ своСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π° Python.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Python. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° KivyMD / Π₯Π°Π±Ρ€

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ! БСгодня Ρ€Π΅Ρ‡ΡŒ снова ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ KivyMD β€” Π½Π°Π±ΠΎΡ€Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² для кроссплатформСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Python Π² стилС Material Design. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я сдСлаю Π½Π΅ ΠΎΠ±Π·ΠΎΡ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² KivyMD, ΠΊΠ°ΠΊ Π² Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π°, скорСС, это Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» большС ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Π§Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ Π½Π° Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Python для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² здСсь Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΠ»Ρ‹ΡˆΠΈΡ‚Π΅ ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Kivy, вряд Π»ΠΈ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ всС это интСрСсно. Ну, Π° ΠΌΡ‹ ΠΏΠΎΠ³Π½Π°Π»ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚!

На днях скачал ΠΈΠ· Google Play дСмонстрационноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Flutter UIKit:


И сСйчас ΠΌΡ‹ с Π²Π°ΠΌΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ экран ΠΈΠ· этого прилоТСния. Π”Π°Π²Π°ΠΉΡ‚Π΅ сразу посмотрим Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹: слСва β€” Flutter, справа β€” Kivy & KivyMD.

НСкоторыС элСмСнты UI ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Π½Π΅ Π² силу ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ тСхничСских особСнностСй, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нСльзя Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π° просто я посчитал, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ€Π³Π°Π½ΠΈΡ‡Π½Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Toolbar, ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, совсСм Π½Π΅ смотрится).

Π˜Ρ‚Π°ΠΊ! Π§Ρ‚ΠΎ бросаСтся Π² Π³Π»Π°Π·Π°, глядя Π½Π° экран, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ? ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ Ρ„ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ layout. Π’ Kivy Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСдоставляСт FloatLayout, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² сСбС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Ρ‹ ΠΎΠ΄ΠΈΠ½ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ наш экран Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:
Π Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° этого экрана довольно простая:
ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΎ FloatLayout, Ссли наш экран унаслСдован ΠΎΡ‚ Screen?

<ProductScreen@Screen>:

    ...

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Screen —> RelativeLayout —> FloatLayout.

ВсС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π²ΠΎ FloatLayout ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π° экранС ΠΈΠΌ автоматичСски присваиваСтся позиция (0, 0). Π’ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ Π½Π΅ слоТно ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ порядок добавлСния элСмСнтов Π½Π° экран свСрху Π²Π½ΠΈΠ·:

Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ:

MDToolbar:
    ...
    pos_hint: {"top": 1}

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ Π² Kivy ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (x, y) ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ подсказку ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ:

pos_hint: {"top": 1}  # вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° экрана
pos_hint: {"bottom": 1}  # ниТняя Π³Ρ€Π°Π½ΠΈΡ†Π° экрана
pos_hint: {"right": 1}  # правая Π³Ρ€Π°Π½ΠΈΡ†Π° экрана
pos_hint: {"center_y": .5}  # Ρ†Π΅Π½Ρ‚Ρ€ экрана ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ
pos_hint: {"center_x": .2}  # отступ Π² 20 % ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΎΡ‚ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана
...
...

Π’Π°ΠΊ Π²ΠΎΡ‚, Π½ΠΈΠΆΠ½Π΅Π΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ изобраТСниС…

    BoxLayout:
        size_hint_y: None
        height: root.height - toolbar.height

        FitImage:
            source: "smokestackheather.jpeg"

… благодаря Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ FitImage (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° KivyMD), автоматичСски растягиваСтся Π½Π° всС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π΅ΠΌΡƒ пространство с сохранСниСм ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ изобраТСния:

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ ΠΈ Π»Π°ΠΉΠΎΡƒΡ‚Ρƒ Π² Kivy прСдоставляСтся 100 % пространства, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎ ΠΈΠ½ΠΎΠ΅. НапримСр, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π° экран ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π²Ρ‹, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ сдСлаСтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

from kivy.app import App
from kivy.lang import Builder

KV = """
Button:
    text: "Button"
"""


class MyApp(App):
    def build(self):
        return Builder.load_string(KV)


MyApp().run()

И ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:
Кнопка заняла 100 % пространства. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ экрана, Π½ΡƒΠΆΠ½ΠΎ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π·Π°Π΄Π°Ρ‚ΡŒ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ находится:

from kivy.app import App
from kivy.lang import Builder

KV = """
Button:
    text: "Button"
    size_hint: None, None
    size: 100, 50
    pos_hint: {"center_y": .5, "center_x": .5}
"""


class MyApp(App):
    def build(self):
        return Builder.load_string(KV)


MyApp().run()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° измСнилась:
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свойство size_hint, ΠΎΡ‚ 0 Π΄ΠΎ 1, (эквивалСнт 0-100%), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, подсказка Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

from kivy.app import App
from kivy.lang import Builder

KV = """
BoxLayout:

    Button:
        text: "Button"
        size_hint_y: .2

    Button:
        text: "Button"
        size_hint_y: .1

    Button:
        text: "Button"
"""


class MyApp(App):
    def build(self):
        return Builder.load_string(KV)


MyApp().run()

Или Ρ‚ΠΎΠΆΠ΅ самоС, Π½ΠΎ подсказка ΡˆΠΈΡ€ΠΈΠ½Ρ‹ (size_hint_x):

from kivy.app import App
from kivy.lang import Builder

KV = """
BoxLayout:

    Button:
        text: "Button"
        size_hint_x: .2

    Button:
        text: "Button"
        size_hint_x: .1

    Button:
        text: "Button"
"""


class MyApp(App):
    def build(self):
        return Builder.load_string(KV)


MyApp().run()

MDToolbar ΠΈΠΌΠ΅Π΅Ρ‚ высоту Π² 56dp, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ всС пространство, ΠΈ Ссли Π΅ΠΌΡƒ Π½Π΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ мСсто свСрху, Ρ‚ΠΎ ΠΎΠ½ автоматичСски ΠΏΡ€ΠΈΠ»ΠΈΠΏΠ½Π΅Ρ‚ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΉ части экрана:
Бписок ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π΅ΠΊ β€” OrderProductLayout (ΠΎ Π½Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½ΠΈΠΆΠ΅) β€” это ScrollView с элСмСнтами MDCard ΠΈ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всю высоту экрана, Π½ΠΎ благодаря padding (значСния отступов Π² Π»Π°ΠΉΠΎΡƒΡ‚Π°Ρ…) каТСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ находится Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ Ρ†Π΅Π½Ρ‚Ρ€Π° экрана. Ну Π° MDBottomAppBar ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΈΠ΄Π°Π΅Ρ‚ ΡΠΊΠΎΡ€ΡŒ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ экрана. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ MDToolbar ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Π³Π΄Π΅ Π΅Π³ΠΎ мСсто.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ прСдставляСт ΠΈΠ· сСбя Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ OrderProductLayout:

Как Π²ΠΈΠ΄ΠΈΠΌ, это Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² ScrillView. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ экрана, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ унаслСдован ΠΎΡ‚ FloatLayout, здСсь всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ свСрху Π²Π½ΠΈΠ·.
Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прослСТиваСтся чСткая иСрархия Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², дрСвовидная структура ΠΈ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ взгляда понятно, ΠΊΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚/ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π» ΠΊΠ°ΠΊΠΎΠΌΡƒ Π»Π°ΠΉΠΎΡƒΡ‚Ρƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚. Π’ Kivy Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частым ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π»Π°ΠΉΠΎΡƒΡ‚ΠΎΠΌ являСтся BoxLayout β€” ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ°, которая позволяСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² сСбС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” послСднСС):
Π‘ΠΎΠ»Π΅Π΅ наглядно это Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмы, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ BoxLayout Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:
ΠœΡ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ BoxLayout ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 100% пространства β€” size_hint_y: None ΠΈ сказали β€” твоя высота Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ высота самого высокого элСмСнта, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² тСбя β€” height: self.minimum_height.

Бписок ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

Если Π±Ρ‹ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ списка, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ GridLayout ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    ScrollView:

        GridLayout:
            size_hint_y: None
            height: self.minimum_height
            cols: 1

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строки (rows) Π½Π° столбцы (cols) ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² minimum Π½Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ, Π° высоту:

from kivy.app import App
from kivy.lang import Builder
from kivy.metrics import dp
from kivy.uix.button import Button

KV = """
ScrollView:

    GridLayout:
        id: box
        size_hint_y: None
        height: self.minimum_height
        spacing: "5dp"
        cols: 1
"""


class MyApp(App):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        for i in range(20):
            self.root.ids.box.add_widget(
                Button(
                    text=f"Label {i}",
                    size_hint_y=None,
                    height=dp(40),
                )
            )


MyApp().run()

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ β€” Π²Ρ‹Π±ΠΎΡ€ Ρ†Π²Π΅Ρ‚Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΠΎΠ½ΠΈ практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹):

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ языка Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Kv Language являСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чСткая структура Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Π½ΠΎ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот язык ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности языка Python. А ΠΈΠΌΠ΅Π½Π½ΠΎ: Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², созданиС/ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, логичСскиС, I/O ΠΈ матСматичСскиС опСрации…
ВычислСниС значСния value, объявлСнного Π² Label…

        Label:
            value: 0
            text: str(self.value)

… происходит нСпосрСдствСнно Π² самой Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅:

        MDIconButton:
            on_release: label_value.value -= 1 if label_value.value > 0 else 0

И я Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚ это (ΠΊΠΎΠ΄ Flutter)…

… Π»ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅ ΠΊΠΎΠ΄Π° Kv Language:

Π’Ρ‡Π΅Ρ€Π° мСня ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π»ΠΈ, ΠΊΠ°ΠΊ Ρƒ Kivy обстоят Π΄Π΅Π»Π° со срСдой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚Ρ‹, Ρ…ΠΎΡ‚Ρ€Π΅Π»ΠΎΠ°Π΄ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ прСлСсти? Π‘ Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚Π°ΠΌΠΈ всС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ PyCharm:
НасчСт хотрСлоад… Python β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. Kivy ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Python. БоотвСтствСнно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π΅ Π½ΡƒΠΆΠ½Π° компиляция ΠΊΠΎΠ΄Π°, запустил β€” ΡƒΠ²ΠΈΠ΄Π΅Π»/протСстирвал. Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Kivy Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ API для Ρ€Π΅Π½Π΄Π΅Ρ€Π° UI, поэтому позволяСт ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ устройств ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля screen. Достаточно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΎΡΡŒ ΠΎΠΊΠ½ΠΎ тСстируСмого прилоТСния Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ устройствС. Π—Π²ΡƒΡ‡ΠΈΡ‚ странно, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Kivy абстрагируСтся ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π² отрисовкС UI, это позволяСт Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ тяТСлыС ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ эмуляторы для тСстов. Π­Ρ‚ΠΎ касаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ UI. НапримСр, тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, описываСмоС Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ -m screen:droid2, portrait, scale=.75.

Π‘Π»Π΅Π²Π° β€” Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π½Π° мобильном устройствС, справа β€” Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅:

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² модуля screen:

devices = {
    # device: (name, width, height, dpi, density)
    'onex': ('HTC One X', 1280, 720, 312, 2),
    'one': ('HTC One', 1920, 1080, 468, 3),
    'onesv': ('HTC One SV', 800, 480, 216, 1.5),
    's3': ('Galaxy SIII', 1280, 720, 306, 2),
    'note2': ('Galaxy Note II', 1280, 720, 267, 2),
    'droid2': ('Motorola Droid 2', 854, 480, 240, 1.5),
    'xoom': ('Motorola Xoom', 1280, 800, 149, 1),
    'ipad': ('iPad (1 and 2)', 1024, 768, 132, 1),
    'ipad3': ('iPad 3', 2048, 1536, 264, 2),
    'iphone4': ('iPhone 4', 960, 640, 326, 2),
    'iphone5': ('iPhone 5', 1136, 640, 326, 2),
    'xperiae': ('Xperia E', 480, 320, 166, 1),
    'nexus4': ('Nexus 4', 1280, 768, 320, 2),
    'nexus7': ('Nexus 7 (2012 version)', 1280, 800, 216, 1.325),
    'nexus7.2': ('Nexus 7 (2013 version)', 1920, 1200, 323, 2),

    # taken from design.google.com/devices
    # please consider using another data instead of
    # a dict for autocompletion to work
    # these are all in landscape
    'phone_android_one': ('Android One', 854, 480, 218, 1.5),
    'phone_htc_one_m8': ('HTC One M8', 1920, 1080, 432, 3.0),
    'phone_htc_one_m9': ('HTC One M9', 1920, 1080, 432, 3.0),
    'phone_iphone': ('iPhone', 480, 320, 168, 1.0),
    'phone_iphone_4': ('iPhone 4', 960, 640, 320, 2.0),
    'phone_iphone_5': ('iPhone 5', 1136, 640, 320, 2.0),
    'phone_iphone_6': ('iPhone 6', 1334, 750, 326, 2.0),
    'phone_iphone_6_plus': ('iPhone 6 Plus', 1920, 1080, 400, 3.0),
    'phone_lg_g2': ('LG G2', 1920, 1080, 432, 3.0),
    'phone_lg_g3': ('LG G3', 2560, 1440, 533, 3.0),
    'phone_moto_g': ('Moto G', 1280, 720, 327, 2.0),
    'phone_moto_x': ('Moto X', 1280, 720, 313, 2.0),
    'phone_moto_x_2nd_gen': ('Moto X 2nd Gen', 1920, 1080, 432, 3.0),
    'phone_nexus_4': ('Nexus 4', 1280, 768, 240, 2.0),
    'phone_nexus_5': ('Nexus 5', 1920, 1080, 450, 3.0),
    'phone_nexus_5x': ('Nexus 5X', 1920, 1080, 432, 2.6),
    'phone_nexus_6': ('Nexus 6', 2560, 1440, 496, 3.5),
    'phone_nexus_6p': ('Nexus 6P', 2560, 1440, 514, 3.5),
    'phone_samsung_galaxy_note_4': ('Samsung Galaxy Note 4',
                                    2560, 1440, 514, 3.0),
    'phone_samsung_galaxy_s5': ('Samsung Galaxy S5', 1920, 1080, 372, 3.0),
    'phone_samsung_galaxy_s6': ('Samsung Galaxy S6', 2560, 1440, 576, 4.0),
    'phone_sony_xperia_c4': ('Sony Xperia C4', 1920, 1080, 400, 2.0),
    'phone_sony_xperia_z_ultra': ('Sony Xperia Z Ultra', 1920, 1080, 348, 2.0),
    'phone_sony_xperia_z1_compact': ('Sony Xperia Z1 Compact',
                                     1280, 720, 342, 2.0),
    'phone_sony_xperia_z2z3': ('Sony Xperia Z2/Z3', 1920, 1080, 432, 3.0),
    'phone_sony_xperia_z3_compact': ('Sony Xperia Z3 Compact',
                                     1280, 720, 313, 2.0),
    'tablet_dell_venue_8': ('Dell Venue 8', 2560, 1600, 355, 2.0),
    'tablet_ipad': ('iPad', 1024, 768, 132, 1.0),
    'tablet_ipad_mini': ('iPad Mini', 1024, 768, 163, 1.0),
    'tablet_ipad_mini_retina': ('iPad Mini Retina', 2048, 1536, 326, 2.0),
    'tablet_ipad_pro': ('iPad Pro', 2732, 2048, 265, 2.0),
    'tablet_ipad_retina': ('iPad Retina', 2048, 1536, 264, 2.0),
    'tablet_nexus_10': ('Nexus 10', 2560, 1600, 297, 2.0),
    'tablet_nexus_7_12': ('Nexus 7 12', 1280, 800, 216, 1.3),
    'tablet_nexus_7_13': ('Nexus 7 13', 1920, 1200, 324, 2.0),
    'tablet_nexus_9': ('Nexus 9', 2048, 1536, 288, 2.0),
    'tablet_samsung_galaxy_tab_10': ('Samsung Galaxy Tab 10',
                                     1280, 800, 148, 1.0),
    'tablet_sony_xperia_z3_tablet': ('Sony Xperia Z3 Tablet',
                                     1920, 1200, 282, 2.0),
    'tablet_sony_xperia_z4_tablet': ('Sony Xperia Z4 Tablet',
                                     2560, 1600, 297, 2.0)TodoList()
        app.run()

}

Ну, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” запуск Π½Π° мобильном устройствС…

ЕдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΎΠ³ΠΎΡ€Ρ‡Π°Π΅Ρ‚, это ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запуска. Π£ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Flutter ΠΎΠ½Π° просто Ρ„Π΅Π½ΠΎΠΌΠ΅Π½Π°Π»ΡŒΠ½Π°Ρ!

НадСюсь, Π±Ρ‹Π» ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π΄ΠΎ Π½ΠΎΠ²Ρ‹Ρ… встрСч!

CGI: пишСм простой сайт Π½Π° Python. Π§Π°ΡΡ‚ΡŒ 3: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния

ΠœΡ‹ ΡƒΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ cookies. БСгодня ΠΆΠ΅ ΠΌΡ‹ посмотрим, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ· этого ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½ΡƒΠΆΠ½ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ эти Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ. Π‘Π°ΠΌΡ‹ΠΉ простой (Π½ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ самый изящный ΠΈ бСзопасный) — Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π°Ρ…. Π‘ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ способ — Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ остановимся Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ способС, ΠΊΠ°ΠΊ Π½Π° самом простом.

БобствСнно, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ здСсь ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚Π΅.

БСгодня ΠΌΡ‹ напишСм ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ прилоТСния Ρ‚ΠΈΠΏΠ° «Ρ‚Π²ΠΈΡ‚Ρ‚Π΅Ρ€». Π”Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² json.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ 2 Ρ„Π°ΠΉΠ»Π°: ΠΎΠ΄ΠΈΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ — Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ упростит ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

cgi-bin/wall.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import cgi
import html
import http.cookies
import os

from _wall import Wall
wall = Wall()

cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
session = cookie.get("session")
if session is not None:
    session = session.value
user = wall.find_cookie(session)  # Π˜Ρ‰Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡƒΠΊΠ΅

form = cgi.FieldStorage()
action = form.getfirst("action", "")

if action == "publish":
    text = form.getfirst("text", "")
    text = html.escape(text)
    if text and user is not None:
        wall.publish(user, text)
elif action == "login":
    login = form.getfirst("login", "")
    login = html.escape(login)
    password = form.getfirst("password", "")
    password = html.escape(password)
    if wall.find(login, password):
        cookie = wall.set_cookie(login)
        print('Set-cookie: session={}'.format(cookie))
    elif wall.find(login):
        pass  # А Π½Π°Π΄ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹Π΄Π°Ρ‚ΡŒ
    else:
        wall.register(login, password)
        cookie = wall.set_cookie(login)
        print('Set-cookie: session={}'.format(cookie))

pattern = '''
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Π‘Ρ‚Π΅Π½Π°</title>
</head>
<body>
    Π€ΠΎΡ€ΠΌΠ° Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ рСгистрации. ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ зарСгистрируСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.
    <form action="/cgi-bin/wall.py">
        Π›ΠΎΠ³ΠΈΠ½: <input type="text" name="login">
        ΠŸΠ°Ρ€ΠΎΠ»ΡŒ: <input type="password" name="password">
        <input type="hidden" name="action" value="login">
        <input type="submit">
    </form>

    {posts}

    {publish}
</body>
</html>
'''

if user is not None:
    pub = '''
    <form action="/cgi-bin/wall.py">
        <textarea name="text"></textarea>
        <input type="hidden" name="action" value="publish">
        <input type="submit">
    </form>
    '''
else:
    pub = ''

print('Content-type: text/html\n')

print(pattern.format(posts=wall.html_list(), publish=pub))

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк для формирования страницы (кстати, это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ созданию собствСнного ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°).

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π΄Π°Ρ‚ΡŒ этому Ρ„Π°ΠΉΠ»Ρƒ ΠΏΡ€Π°Π²Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ эти ΠΏΡ€Π°Π²Π° Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹).

cgi-bin/_wall.py (здСсь ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ publish, login ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import random
import time


class Wall:
    USERS = 'cgi-bin/users.json'
    WALL = 'cgi-bin/wall.json'
    COOKIES = 'cgi-bin/cookies.json'

    def __init__(self):
        """Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ссли ΠΎΠ½ΠΈ Π½Π΅ созданы"""
        try:
            with open(self.USERS, 'r', encoding='utf-8'):
                pass
        except FileNotFoundError:
            with open(self.USERS, 'w', encoding='utf-8') as f:
                json.dump({}, f)

        try:
            with open(self.WALL, 'r', encoding='utf-8'):
                pass
        except FileNotFoundError:
            with open(self.WALL, 'w', encoding='utf-8') as f:
                json.dump({"posts": []}, f)

        try:
            with open(self.COOKIES, 'r', encoding='utf-8'):
                pass
        except FileNotFoundError:
            with open(self.COOKIES, 'w', encoding='utf-8') as f:
                json.dump({}, f)

    def register(self, user, password):
        """РСгистриуСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ рСгистрации"""
        if self.find(user):
            return False  # Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сущСствуСт
        with open(self.USERS, 'r', encoding='utf-8') as f:
            users = json.load(f)
        users[user] = password
        with open(self.USERS, 'w', encoding='utf-8') as f:
            json.dump(users, f)
        return True

    def set_cookie(self, user):
        """ЗаписываСт ΠΊΡƒΠΊΡƒ Π² Ρ„Π°ΠΉΠ». Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΊΡƒΠΊΡƒ."""
        with open(self.COOKIES, 'r', encoding='utf-8') as f:
            cookies = json.load(f)
        cookie = str(time.time()) + str(random.randrange(10**14))  # Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΡƒΠΊΡƒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
        cookies[cookie] = user
        with open(self.COOKIES, 'w', encoding='utf-8') as f:
            json.dump(cookies, f)
        return cookie

    def find_cookie(self, cookie):
        """По ΠΊΡƒΠΊΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ"""
        with open(self.COOKIES, 'r', encoding='utf-8') as f:
            cookies = json.load(f)
        return cookies.get(cookie)

    def find(self, user, password=None):
        """Π˜Ρ‰Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ"""
        with open(self.USERS, 'r', encoding='utf-8') as f:
            users = json.load(f)
        if user in users and (password is None or password == users[user]):
            return True
        return False

    def publish(self, user, text):
        """ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ тСкст"""
        with open(self.WALL, 'r', encoding='utf-8') as f:
            wall = json.load(f)
        wall['posts'].append({'user': user, 'text': text})
        with open(self.WALL, 'w', encoding='utf-8') as f:
            json.dump(wall, f)

    def html_list(self):
        """Бписок постов для отобраТСния Π½Π° страницС"""
        with open(self.WALL, 'r', encoding='utf-8') as f:
            wall = json.load(f)
        posts = []
        for post in wall['posts']:
            content = post['user'] + ' : ' + post['text']
            posts.append(content)
        return '<br>'.join(posts)

РазумССтся, Π² нашСм простом «Ρ‚Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅» ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ нСдостатков: Π½Π΅ выводятся прСдупрСТдСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, рСгистрация ΠΏΡ€ΠΈ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΠ°Ρ€ΠΎΠ»ΠΈ хранятся Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΡƒΠΊΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ΠšΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

Но Π΅ΡΡ‚ΡŒ ΠΈ прСимущСство: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ 2 Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ нСзависимых), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ систСму хранСния Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… вмСсто Ρ„Π°ΠΉΠ»ΠΎΠ²), Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ затрагивая wall.py.

НапослСдок ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

Π‘Π½Π°Ρ‡Π°Π»Π° Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Ρ‘ Ρ€Π°Π· ввСсти Π»ΠΎΠ³ΠΈΠ½-ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠΉΡ‚ΠΈ.

МоТно ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ послСднСй) части я ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ это всё ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² сСти ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

Python | ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Python

ПослСднСС обновлСниС: 24.01.2019

ПослС установки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ описано Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния Π½Π° Python. Π˜Ρ‚Π°ΠΊ, создадим ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Как Π±Ρ‹Π»ΠΎ сказано Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Ссли ΠΏΡ€ΠΈ установкС Π½Π΅ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ адрСс, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
устанавливаСтся Π½Π° Linux ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ usr/local/bin/python37, Π° Π½Π° Windows ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ
C:\Users\[имя_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ]\AppData\Local\Programs\Python\Python37\ ΠΈ прСдставляСт Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ python.exe.

Запустим ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:


print("hello world")

И консоль Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ строку «hello world»:

Для этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ использовалась функция print(), которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ строку Π½Π° консоль.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…-скриптах ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ создадим Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
Для этого Π½Π° дискС C ΠΈΠ»ΠΈ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ для скриптов ΠΏΠ°ΠΏΠΊΡƒ python. А Π² этой ΠΏΠ°ΠΏΠΊΠ΅ создадим Π½ΠΎΠ²Ρ‹ΠΉ тСкстовый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
Π½Π°Π·ΠΎΠ²Π΅ΠΌ hello.py. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° языкС Python, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ py.

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ этот Ρ„Π°ΠΉΠ» Π² любом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:


name = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя: ")
print("ΠŸΡ€ΠΈΠ²Π΅Ρ‚,", name)

Π‘ΠΊΡ€ΠΈΠΏΡ‚ состоит ΠΈΠ· Π΄Π²ΡƒΡ… строк. ΠŸΠ΅Ρ€Π²Π°Ρ строка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ input() ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ своСго ΠΈΠΌΠ΅Π½ΠΈ. Π’Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅
имя Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ name.

Вторая строка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print() Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ привСтствиС вмСстС с Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запустим ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку/Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cd ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ hello.py (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΌΠΎΠ΅ΠΌ случаС это ΠΏΠ°ΠΏΠΊΠ° C:\python).
Π”Π°Π»Π΅Π΅ Π²Π½Π°Ρ‡Π°Π»Π΅ Π²Π²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ скрипта:

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² ΠΌΠΎΠ΅ΠΌ случаС Π² консоль Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ вСсти:


C:\Users\Eugene\AppData\Local\Programs\Python\Python37\python.exe hello.py

Но Ссли ΠΏΡ€ΠΈ установкС Π±Ρ‹Π»Π° ΡƒΠΊΠ°Π·Π°Π½Π° опция «Add Python 3.7 to PATH», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды, Ρ‚ΠΎ вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ python:

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ с ΠΎΠ±ΠΎΠΈΠΌΠΈ способами запуска:

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π²Π²ΠΎΠ΄Ρƒ ΠΈΠΌΠ΅Π½ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ привСтствиС.

ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΊΡ€ΡƒΡ‚Ρ‹Ρ… Python Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ / ПишСм 7 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python / itProger

Π‘Ρ€Π΅Π΄ΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Π΅, Ρ‡Π΅ΠΉ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π²Π΅Π»ΠΈΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ созданы, ΠΏΠΎ большСй части, Ρ€Π°Π΄ΠΈ Π·Π°Π±Π°Π²Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ совсСм нСбольшой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π».

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим 7 Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ создадим Π½Π° ΠΈΡ… основС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΈΠ½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Β 

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ссылок

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Ρ…ΠΎΡ‚ΡŒ Ρ€Π°Π·, Π½ΠΎ Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с сСрвисами ΠΏΠΎ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ ссылок. Π”Π°ΠΆΠ΅, Ссли Π²Ρ‹ сами Π½Π΅ создавали ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ ссылку, Ρ‚ΠΎ хотя Π±Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ Π² описаниях ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€ΠΎΠ»ΠΈΠΊΠ°ΠΌ ΠΈΠ»ΠΈ Π½Π° сайтах.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ссылку ΠΌΠΎΠΆΠ½ΠΎ всСго Π·Π° Ρ‚Ρ€ΠΈ строчки ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ PyShorteners. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Π΅Ρ‘ основС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°:

import pyshorteners

s = pyshorteners.Shortener()
print("БокращСнная ссылка - ", s.tinyurl.short('https://itproger.com/courses/'))
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ соСдинСния

НуТно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°? НС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Pyspeedtest, которая позволяСт быстро Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ скорости вашСго WiFi.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°:

import pyspeedtest

st = pyspeedtest.SpeedTest()

st.download()
st.upload()
st.ping()
Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π²ΠΈΠ΄Π΅ΠΎ

ВсС Π΅Ρ‰Π΅ Π² поискС ΠΊΡ€ΡƒΡ‚ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°? Π—Π°Ρ‡Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Python ΠΈ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° MoviePy πŸ™‚

Π—Π° счСт Β MoviePy Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π΅Π·Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ количСство FPS ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… дСйствий.

ΠœΡ‹ создадим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π·Π²ΡƒΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² качСствС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ потрСбуСтся лишь ΠΏΠ°Ρ€Ρƒ строк ΠΊΠΎΠ΄Π°:

import moviepy.editor

video = moviepy.editor.VideoFileClip("some.mov")
audio = video.audio

audio.write_audiofile("new_audio.mp3")
ВикипСдия

А ΠΊΠ°ΠΊ часто Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠ΅ΠΉ? Если часто, Ρ‚ΠΎ процСсс поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ. Π—Π° счёт ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΈ называСтся Wikipedia, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ быстро Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словам.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

import wikipedia
wikipedia.set_lang("ru")
print(wikipedia.summary("New York City"))
ΠšΡ€Π°ΡΠΈΠ²Π°Ρ консоль

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ вся информация Π² консоли — это скучный Π±Π΅Π»Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ тСкст. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ интСрСсно. Π‘Π»Π°Π³ΠΎ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° TermColor.

Π—Π° счСт этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΡ‹ быстро ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ стили Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊ тСксту Π² консоли:

from termcolor2 import c

print(c("Some text").blue.on_white.underline)
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†

Π‘ΡƒΠΏΠ΅Ρ€ классной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ являСтся PrettyTable. Она позволяСт ΠΌΠ΅Π³Π° быстро ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΡ€Π°ΡΠΈΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для Π²Ρ‹Π²ΠΎΠ΄Π° Π² консоль. Если Π²Ρ‹ Π³Π΄Π΅-Ρ‚ΠΎ ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ ΠΆΠ΅ часто Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΉ просто. НуТно лишь ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° основС PrettyTable ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ рядов ΠΈ сами ряды.

Π’Π°Π±Π»ΠΈΡ†Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡ‚ΡŒ Β ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сортировку ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ полю.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

from prettytable import PrettyTable

table = PrettyTable()
table.field_names = ['Names', 'Age', 'City']
table.add_row(["АлСкс", 20, "Москва"])
table.add_row(["Π‘ΠΎΠ±", 25, "Москва"])
table.add_row(["Баша", 30, "Минск"])
table.add_row(["ΠŸΠ΅Ρ‚Ρ", 23, "КиСв"])
table.add_row(["Вася", 67, "Москва"])

table.align = 'r'
table.sortby = "Age"
print(table)
Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

Если Π½Π°Π΄ΠΎΠ΅Π»ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ способом, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½. ΠŸΡ€ΠΈ Ρ‡Ρ‘ΠΌ для Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π°ΠΌ потрСбуСтся лишь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ os.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

import os
os.system("shutdown -s")
Π’ΠΈΠ΄Π΅ΠΎ Π½Π° эту Ρ‚Π΅ΠΌΡƒ

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ курс

На нашСм сайтС Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½Ρ‹ΠΉ курс ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ языка ΠŸΠΈΡ‚ΠΎΠ½. Π’ Ρ…ΠΎΠ΄Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ язык ΠŸΠΈΡ‚ΠΎΠ½, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π± сайты Π·Π° счёт Π²Π΅Π± Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π”ΠΆΠ°Π½Π³ΠΎ. Π—Π° курс Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ массу Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с языком ΠŸΠΈΡ‚ΠΎΠ½, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ПК прилоТСния Π½Π° основС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Kivy, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π± сайты Π½Π° основС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π”ΠΆΠ°Π½Π³ΠΎ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Python — это язык программирования с нСсколькими ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌΠΈ. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

Один ΠΈΠ· популярных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ программирования — созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ извСстно ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП).

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ характСристики:

Π”Π°Π²Π°ΠΉΡ‚Π΅ возьмСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:

  • имя, возраст, Ρ†Π²Π΅Ρ‚ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
  • ΠΏΠ΅Π½ΠΈΠ΅, Ρ‚Π°Π½Π΅Ρ† ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ООП Π² Python Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° ​​на созданиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.Π­Ρ‚Π° концСпция Ρ‚Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ Π‘Π£Π₯ΠžΠ™ (НС повторяйся).

Π’ Python концСпция ООП слСдуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ основным ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ:


Класс

Класс — это ΠΏΠ»Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ классС ΠΊΠ°ΠΊ ΠΎΠ± эскизС попугая с ярлыками. Он содСрТит всС подробности ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Ρ†Π²Π΅Ρ‚Π΅, Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ Ρ‚. Π”. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° этих описаниях, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ попугая. Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΏΡƒΠ³Π°ΠΉ — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ класса попугая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

класс ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ:
    ΠΏΡ€ΠΎΠΉΡ‚ΠΈ 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово class для опрСдСлСния пустого класса Parrot .Из класса ΠΌΡ‹ создаСм экзСмпляры. ЭкзСмпляр — это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса.


ΠžΠ±ΡŠΠ΅ΠΊΡ‚

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ (экзСмпляр) — это рСализация класса. Когда класс ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, опрСдСляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΏΠΎΠΏΡƒΠ³Π°ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

obj = ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ () 

Π—Π΄Π΅ΡΡŒ obj — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Parrot .

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ попугаях.Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ собираСмся ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ класс ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠΏΡƒΠ³Π°Π΅Π².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Python

  класс ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ:

    # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ класса
    разновидности = "ΠΏΡ‚ΠΈΡ†Π°"

    # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ экзСмпляра
    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст

# ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса Parrot
blu = ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ("Π“ΠΎΠ»ΡƒΠ±ΠΎΠΉ", 10)
woo = ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ("Π’Ρƒ", 15)

# доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ класса
print ("Blu is a {}". format (blu .__ class __. разновидности))
print ("Π’Ρƒ Ρ‚ΠΎΠΆΠ΅ {}".Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π²Ρƒ .__ класс __. Π²ΠΈΠ΄Ρ‹))

# доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ экзСмпляра
print ("{} исполнилось {} Π»Π΅Ρ‚" .format (blu.name, blu.age))
print ("{} {} Π»Π΅Ρ‚" .format (woo.name, woo.age))  

Π’Ρ‹Ρ…ΠΎΠ΄

  Blu - ΠΏΡ‚ΠΈΡ†Π°
Π’Ρƒ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ‚ΠΈΡ†Π°
Π‘Π»Ρƒ 10 Π»Π΅Ρ‚
Π’Ρƒ 15 Π»Π΅Ρ‚  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ создали класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Parrot . Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Атрибуты — это характСристика ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π­Ρ‚ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __init__ класса.Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм экзСмпляры класса Parrot . Π—Π΄Π΅ΡΡŒ blu ΠΈ woo — это ссылки (значСния) Π½Π° наши Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ класса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ __class __. Views . Атрибуты класса ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ для всСх экзСмпляров класса. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ экзСмпляра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ blu.name ΠΈ blu.age . Однако Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ экзСмпляра Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра класса.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ классах ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π» ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Python


ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ — это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° класса. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния повСдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Python

  класс ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ:
    
    # Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² экзСмпляра
    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст
    
    # ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра
    def Sing (я, пСсня):
        Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ "{} sings {}".Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (собствСнноС имя, пСсня)

    def dance (сам):
        return "{} сСйчас Ρ‚Π°Π½Ρ†ΡƒΠ΅Ρ‚" .format (self.name)

# ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
blu = ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ("Π“ΠΎΠ»ΡƒΠ±ΠΎΠΉ", 10)

# Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ наши ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра
print (blu.sing ("Бчастливый"))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (blu.dance ())  

Π’Ρ‹Ρ…ΠΎΠ΄

  Blu ΠΏΠΎΠ΅Ρ‚ 'Happy'
Blu сСйчас Ρ‚Π°Π½Ρ†ΡƒΠ΅Ρ‚  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ опрСдСляСм Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: sing () ΠΈ dance () . Они Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ экзСмпляра, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° экзСмпляра i.e blu .


НаслСдованиС

НаслСдованиС — это способ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ класса для использования Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса Π±Π΅Π· Π΅Π³ΠΎ измСнСния. Π’Π½ΠΎΠ²ΡŒ сформированный класс являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом (ΠΈΠ»ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классом). Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом (ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классом).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: ИспользованиС наслСдования Π² Python

  # Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс
класс Bird:
    
    def __init __ (сам):
        print (Β«ΠŸΡ‚ΠΈΡ†Π° Π³ΠΎΡ‚ΠΎΠ²Π°Β»)

    def whoisThis (я):
        print ("ΠŸΡ‚ΠΈΡ†Π°")

    def ΠΏΠ»Π°Π²Π°Ρ‚ΡŒ (сам):
        print (Β«ΠŸΠ»Ρ‹Π²ΠΈ быстрСС»)

# Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс
класс Пингвин (ΠŸΡ‚ΠΈΡ†Π°):

    def __init __ (сам):
        # Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ super ()
        супСр().__Π² этом__()
        print («Пингвин Π³ΠΎΡ‚ΠΎΠ²Β»)

    def whoisThis (я):
        print («Пингвин»)

    def run (self):
        print ("Π‘Π΅Π³ΠΈ быстрСС")

пСгги = Пингвин ()
peggy.whoisThis ()
peggy.swim ()
peggy.run ()  

Π’Ρ‹Ρ…ΠΎΠ΄

  ΠŸΡ‚ΠΈΡ†Π° Π³ΠΎΡ‚ΠΎΠ²Π°
Пингвин Π³ΠΎΡ‚ΠΎΠ²
Пингвин
ΠŸΠ»Π°Π²Π°Ρ‚ΡŒ быстрСС
Π‘Π΅Π³ΠΈ быстрСС  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ создали Π΄Π²Π° класса: Bird (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс) ΠΈ Penguin (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс). Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс наслСдуСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса.ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° swim () .

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ это ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° whoisThis () . ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, создавая Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ run () .

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ super () Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __init __ () . Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __init __ () Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса.


Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ООП Π² Python, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, которая называСтся инкапсуляциСй. Π’ Python ΠΌΡ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌ частныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ подчСркивания Π² качСствС прСфикса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ _ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ __ .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4: Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² Python

  класс ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€:

    def __init __ (сам):
        self .__ maxprice = 900

    def sell (self):
        print ("Π¦Π΅Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ: {}".Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (self .__ maxprice))

    def setMaxPrice (self, price):
        self .__ maxprice = Ρ†Π΅Π½Π°

c = ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ()
c.sell ()

# ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρƒ
c .__ maxprice = 1000
c.sell ()

# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ установки
c.setMaxPrice (1000)
c.sell ()  

Π’Ρ‹Ρ…ΠΎΠ΄

  Π¦Π΅Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ: 900
Π¦Π΅Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ: 900
Π¦Π΅Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ: 1000  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ класс Computer .

ΠœΡ‹ использовали ΠΌΠ΅Ρ‚ΠΎΠ΄ __init __ () для хранСния максимальной ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ½ΠΎΠΉ Ρ†Π΅Π½Ρ‹ Computer .ΠœΡ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρƒ. Однако ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Python ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ __maxprice ΠΊΠ°ΠΊ частныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ установки, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ setMaxPrice () , которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ†Π΅Π½Ρƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.


ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ — это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (Π² ООП) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΠΎΡ€ΠΌ (Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…).

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹ (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, ΠΊΡ€ΡƒΠ³).Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π­Ρ‚Π° концСпция называСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5: ИспользованиС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² Python

  класс ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ:

    def fly (self):
        print (Β«ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒΒ»)
    
    def ΠΏΠ»Π°Π²Π°Ρ‚ΡŒ (сам):
        print (Β«ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠ»Π°Π²Π°Ρ‚ΡŒΒ»)

класс Пингвин:

    def fly (self):
        print («Пингвин Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒΒ»)
    
    def ΠΏΠ»Π°Π²Π°Ρ‚ΡŒ (сам):
        print («Пингвин ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠ»Π°Π²Π°Ρ‚ΡŒΒ»)

# ΠžΠ±Ρ‰ΠΈΠΉ интСрфСйс
def flying_test (ΠΏΡ‚ΠΈΡ†Π°):
    bird.fly ()

#instantiate objects
blu = ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ()
пСгги = Пингвин ()

# ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ_тСст (blu)
fly_test (peggy)  

Π’Ρ‹Ρ…ΠΎΠ΄

  ΠŸΠΎΠΏΡƒΠ³Π°ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ
Пингвин Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π²Π° класса: Parrot ΠΈ Penguin .Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ fly () . Однако ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, ΠΌΡ‹ создали ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ flying_test () , которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° fly () . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ blu ΠΈ peggy Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ flying_test () , ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° эффСктивно.


ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ:

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ простой ΠΈ эффСктивной для понимания.
  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс являСтся общСдоступным, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.
  • Π”Π°Π½Π½Ρ‹Π΅ бСзопасны ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ благодаря абстракции Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², поэтому программисты ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ эффСктивный ΠΊΠΎΠ΄.

.

ПолноС руководство ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ программирования Π½Π° Python

Π­Ρ‚ΠΎ руководство ΠΏΠΎ Python прСдставляСт собой ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ для всСх Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Python ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ Π·Π° простыС ΠΈ Π»Π΅Π³ΠΊΠΈΠ΅ шаги.

Python ΠΎΡ‡Π΅Π½ΡŒ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятСн ΠΈ прост Π² освоСнии. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… языков программирования для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² областях Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ машинного обучСния.

ИндСкс

TIOBE Ρ‚Π°ΠΊΠΆΠ΅ поставил Π΅Π³ΠΎ Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ мСсто срСди самых популярных языков программирования Π² 2019 Π³ΠΎΠ΄Ρƒ.А Π΅Π³ΠΎ использованиС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π° 2% ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΌ Π³ΠΎΠ΄ΠΎΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹ приняли ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Python.

Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Python, ΠΌΡ‹ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ этот ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° Python [Go] .

Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Python Π»Π΅Π³ΠΎΠΊ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ, ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈ прост Π² использовании. Он ΠΈΠΌΠ΅Π΅Ρ‚ чистый ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° английский синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС ΠΊΠΎΠ΄Π° ΠΈ позволяСт программисту ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅, Π° Π½Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΉΡˆΠΈΡ… дСталях языка.

ΠœΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ этот курс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ. Π”Π°ΠΆΠ΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Python с наимСньшими усилиями, Π½Π΅ затрачивая ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ руководство ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти знания Π² Π²Π°ΡˆΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… рассказываСтся история Python, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄ΠΎΠΌΠ΅Π½Ρ‹, Π·Π°Ρ‡Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Python, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python Π½Π° Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΊΠ°ΠΊ Windows, Linux ΠΈ Mac OS X.

НавСрх

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Python

Π­Ρ‚ΠΎ Π±Ρ‹Π» голландский программист, Π“Π²ΠΈΠ΄ΠΎ Π’Π°Π½ Россум , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написал Python ΠΊΠ°ΠΊ Ρ…ΠΎΠ±Π±ΠΈ-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ программирования Π΅Ρ‰Π΅ Π² ΠΊΠΎΠ½Ρ†Π΅ 1980-Ρ….Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΎΠ½ прСвратился Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… языков ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°.

Π§Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π“Π²ΠΈΠ΄ΠΎ ΠΊ созданию Python?

По Π΅Π³ΠΎ собствСнным словам, Π“Π²ΠΈΠ΄ΠΎ раскрыл сСкрСт создания Python. Он Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌ ΠΊΠ°ΠΊ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свободноС врСмя Π½Π° РоТдСство Π² Π΄Π΅ΠΊΠ°Π±Ρ€Π΅ 1989 Π³ΠΎΠ΄Π°. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ Ρ…ΠΎΡ‚Π΅Π» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ языка программирования ABC, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π±Ρ‹Π». И всС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π» Π½Π΅ ΠΊΡ‚ΠΎ ΠΈΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ постСпСнно прСвратился Π² ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ язык программирования.

Как появилось названиС Python?

Π“ΡƒΠΈΠ΄ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ считал Ρ…Π°ΠΊΠ΅Ρ€ΠΎΠ² Unix / C Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. И Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ½ любил ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹ΠΉ сСриал [Π›Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΡ€ΠΊ ΠœΠΎΠ½Ρ‚ΠΈ ΠŸΠ°ΠΉΡ‚ΠΎΠ½Π°]. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, имя Python ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π΅ΠΌΡƒ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅ΠΌΡƒ ΠΏΠΎ вкусу, Π½ΠΎ ΠΈ Π΅Π³ΠΎ Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ.

Бписок извСстных выпусков Python

ВСрсия Python

Π”Π°Ρ‚Π° выпуска

Python v0.1.0 (ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅)

1990

Python v0.9.5 (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Macintosh)

2 января 1992 Π³.

Python v1.0.0

26 января 1994 Π³.

Python v1.1.0

26 января 1994 Π³.

Python v1.5.0

3 января 1998 Π³.

Python v1.6.0 (послСдняя обновлСнная вСрсия)

5 сСнтября 2000 Π³.

Python v2.0.0 (добавлСно пониманиС списка)

16 октября 2000 Π³.

Python v2.7.0 (послСдняя обновлСнная вСрсия)

3 июля 2010 г.

Python v3.0,0

3 дСкабря 2008 Π³.

Python v3.7.0 (послСдняя обновлСнная вСрсия)

июнь 2018 Π³. ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Python tutorial , Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ здСсь .

НавСрх

Π’ΠΈΡ…ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

β˜› Код ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ

Код

Python Π»Π΅Π³ΠΊΠΎ читаСтся, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΈ сопровоТдСния. Он ΠΈΠΌΠ΅Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ (OO) ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

β˜› ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Python ΠΈΠΌΠ΅Π΅Ρ‚ чистый ΠΈ элСгантный ΡΡ‚ΠΈΠ»ΡŒ программирования. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ английский синтаксис ΠΈ динамичСски типизируСтся. Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ присвоСниС связываСт имя с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ любого Ρ‚ΠΈΠΏΠ°. Код Python Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС, Ρ‡Π΅ΠΌ эквивалСнтный ΠΊΠΎΠ΄ C ++ / Java. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ мСньшС Π½ΡƒΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ ΠΈ мСньшС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ скомпилированных языков, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Python Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² компиляции ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ большС ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

β˜› Код пСрСносимости

Π’Π°ΠΊ ΠΊΠ°ΠΊ Python являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ пСрСносимости. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python достаточно ΡƒΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ строчку Π² ΠΊΠΎΠ΄Π΅.

β˜› ВстроСнныС ΠΈ внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

ΠŸΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Python большой Π½Π΅Ρ‚. Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ пСрСносимого Π½Π°Π±ΠΎΡ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ машинного обучСния

β˜› Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

НСкоторыС прилоТСния Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ взаимодСйствия Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сквозных Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов. Один Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скриптом Python, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, написанной Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Java / C ++ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

Python ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько способов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями. Он позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ C ΠΈ C ++ ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, интСграция с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Java ΠΈ DotNET, связь с использованиСм COM / Silverlight ΠΈ взаимодСйствиС с USB-устройствами Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹.Он Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ сСти с использованиСм Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΊΠ°ΠΊ SOAP, XML-RPC ΠΈ CORBA.

β˜› БСсплатноС использованиС, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ распространСниС

Python — это OSS. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² исходный ΠΊΠΎΠ΄ ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π΄Π°ΠΆΠ΅ Π² коммСрчСских цСлях. ИмСнно ΠΈΠ·-Π·Π° Ρ‚Π°ΠΊΠΎΠΉ открытости Python собрал ΠΎΠ±ΡˆΠΈΡ€Π½ΡƒΡŽ Π±Π°Π·Ρƒ сообщСства, которая постоянно растСт ΠΈ добавляСт Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

β˜› ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚ Core

Python Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ слСдуСт Π·Π° конструкциСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП).ООП обСспСчиваСт ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный способ структурирования ΠΊΠΎΠ΄Π°, Π° Ρ‚Π²Π΅Ρ€Π΄ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² Π΅Π³ΠΎ основС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π²Π°ΠΌ максимально ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ своС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ООП Π»Π΅Π³ΠΊΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, опрСдСляя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ соотносятся. А Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Python tutorial , Π½Π°ΠΆΠΌΠΈΡ‚Π΅ здСсь .

НавСрх

ΠžΠ±Π»Π°ΡΡ‚ΠΈ программирования Python

β˜› Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Python ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΡŒΠ²ΠΈΠ½ΡƒΡŽ долю Π² области Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.МногиС Ρ€Π°Π±ΠΎΡ‚ΠΎΠ΄Π°Ρ‚Π΅Π»ΠΈ ΠΈΡ‰ΡƒΡ‚ программистов ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π·Π½Π°ΡŽΡ‰ΠΈΡ… Python. И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½ΠΈΡ…, ΠΈΠ·ΡƒΡ‡ΠΈΠ² Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ (WAF), Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Django, Flask, CherryPy ΠΈ Bottle, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡˆΠΈΡ€Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ВсС ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹

.

ΠΠ°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ встроСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Python?

ΠœΠΎΠ΄ΡƒΠ»ΠΈ

относятся ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, содСрТащСму ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ опрСдСлСния Python.

Π€Π°ΠΉΠ», содСрТащий ΠΊΠΎΠ΄ Python, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: example.py , называСтся ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ, ΠΈ Π΅Π³ΠΎ имя модуля Π±ΡƒΠ΄Π΅Ρ‚ example .

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ большиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° нСбольшиС управляСмыС ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ наши Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… опрСдСлСния Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈ сохранитС Π΅Π³ΠΎ ΠΊΠ°ΠΊ example.py .

  # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ модуля Python

def add (a, b):
   "" "Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° добавляСт Π΄Π²Π°
   числа ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ "" "

   Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = a + b
   Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add () Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля с ΠΈΠΌΠ΅Π½Π΅ΠΌ example .Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… сумму.


Как ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Python?

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ опрСдСлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² Python.

Для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово import . Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ , ΠΏΡ€ΠΈΠΌΠ΅Ρ€ , ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Python.

  >>> ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°  

ΠŸΡ€ΠΈ этом ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ , Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСпосрСдствСнно Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов.Он Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΡƒΠ΄Π° имя модуля , ΠΏΡ€ΠΈΠΌΠ΅Ρ€ .

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ имя модуля, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‡ΠΊΡƒ . ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. НапримСр:

  >>> example.add (4,5.5)
9,5  

Python ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ списком стандартных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Python ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈΡ… использования. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ находятся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Lib Π²Π½ΡƒΡ‚Ρ€ΠΈ мСста, Π³Π΄Π΅ Π²Ρ‹ установили Python.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ наши ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π•ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ способы ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Они пСрСчислСны Π½ΠΈΠΆΠ΅ ..


ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Python

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° import ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ опрСдСлСниям Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

  # ΠΏΡ€ΠΈΠΌΠ΅Ρ€ инструкции ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
# для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ стандартного модуля

ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ
print (Β«Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа ΠΏΠΈΒ», math.pi)  

Когда Π²Ρ‹ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚:

  Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Пи Ρ€Π°Π²Π½ΠΎ 3.141592653589793  

Π˜ΠΌΠΏΠΎΡ€Ρ‚ с ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π² Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  # ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π² Π΅Π³ΠΎ

ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ ΠΊΠ°ΠΊ m
print (Β«Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа ΠΏΠΈΒ», m.pi)  

ΠœΡ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ math Π² m . Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π°ΠΌ врСмя Π½Π° Π½Π°Π±ΠΎΡ€ тСкста.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ имя math Π½Π΅ распознаСтся Π² нашСй области. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, math.pi нСдСйствитСлСн, Π° m.pi — ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация.


Python ΠΈΠ· … ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· модуля Π±Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° модуля Π² Ρ†Π΅Π»ΠΎΠΌ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

  # ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΈ ΠΈΠ· матСматичСского модуля

ΠΈΠ· матСматичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠΈ
print (Β«Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа ΠΏΠΈΒ», ΠΏΠΈ)  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ pi ΠΈΠ· модуля math .

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΎΡ‡ΠΊΠΈ. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  >>> ΠΈΠ· матСматичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° pi, e
>>> ΠΏΠΈ
3.141592653589793
>>> Π΅
2,718281828459045  

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΈΠΌΠ΅Π½Π°

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΈΠΌΠ΅Π½Π° (опрСдСлСния) ΠΈΠ· модуля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

  # ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΈΠΌΠ΅Π½Π° ΠΈΠ· стандартного модуля math

ΠΈΠ· матСматичСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° *
print (Β«Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа ΠΏΠΈΒ», ΠΏΠΈ)  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ всС опрСдСлСния ΠΈΠ· матСматичСского модуля. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΈΠΌΠ΅Π½Π°, Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ Π² нашСй области видимости, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с подчСркивания (частныС опрСдСлСния).

Π˜ΠΌΠΏΠΎΡ€Ρ‚ всСго, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΎΠΉ (*), Π½Π΅ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ программирования. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ затрудняСт Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ нашСго ΠΊΠΎΠ΄Π°.


ΠŸΡƒΡ‚ΡŒ поиска модуля Python

ΠŸΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ модуля Python просматриваСт нСсколько мСст. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ сначала ΠΈΡ‰Π΅Ρ‚ встроСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π—Π°Ρ‚Π΅ΠΌ (Ссли встроСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½) Python просматриваСт список ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² sys.path . Поиск вСдСтся Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС.

  • Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.
  • PYTHONPATH (пСрСмСнная срСды со списком ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²).
  • Зависящий ΠΎΡ‚ установки ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
>>> import sys
>>> sys.path
['',
'C: \ Python33 \ Lib \ idlelib',
'C: \ Windows \ system32 \ python33.zip',
'C: \ Python33 \ DLLs',
'C: \ Python33 \ lib',
'C: \\ Python33',
'C: \ Python33 \ lib \ site-packages'] 

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ этот список, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ наш собствСнный ΠΏΡƒΡ‚ΡŒ.


ΠŸΠ΅Ρ€Π΅Π·Π°Ρ€ΡΠ΄ΠΊΠ° модуля

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° сСанс. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Π΅Ρ‰ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивными. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ my_module .

  # Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ эффСкт
# ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

print (Β«Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Β»)  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ эффСкт ΠΎΡ‚ мноТСствСнного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

  >>> ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ my_module
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½
>>> ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ my_module
>>> import my_module  

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наш ΠΊΠΎΠ΄ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±Ρ‹Π» ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ измСнился Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ. Один ΠΈΠ· способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это — ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Но это ΠΌΠ°Π»ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚.

Python прСдоставляСт Π±ΠΎΠ»Π΅Π΅ эффСктивный способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ reload () Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля imp , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами:

  >>> ΠΈΠΌΠΏΠΎΡ€Ρ‚Π½Ρ‹ΠΉ ΠΈΠΌΠΏ
>>> ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ my_module
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½
>>> ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ my_module
>>> ΠΈΠΌΠΏ.ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ (my_module)
Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½
<ΠΌΠΎΠ΄ΡƒΠ»ΡŒ 'my_module' ΠΈΠ· '. \\ my_module.py'>  

ВстроСнная функция dir ()

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dir () , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля.

НапримСр, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add () Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ example , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ нас Π±Ρ‹Π» Π² Π½Π°Ρ‡Π°Π»Π΅.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ dir Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ , ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  >>> dir (ΠΏΡ€ΠΈΠΌΠ΅Ρ€)
['__builtins__',
'__cached__',
'__doc__',
'__Ρ„Π°ΠΉΠ»__',
'__initializing__',
'__loader__',
'__имя__',
'__package__',
'Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ']  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ отсортированный список ΠΈΠΌΠ΅Π½ (вмСстС с добавляСм ).ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с подчСркивания, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, связанными с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ (Π½Π΅ опрСдСляСмыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ).

НапримСр, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __name__ содСрТит имя модуля.

  >>> ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
>>> ΠΏΡ€ΠΈΠΌΠ΅Ρ€ .__ имя__
'ΠΏΡ€ΠΈΠΌΠ΅Ρ€'  

ВсС ΠΈΠΌΠ΅Π½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² нашСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ пространствС ΠΈΠΌΠ΅Π½, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dir () Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

  >>> Π° = 1
>>> b = "ΠΏΡ€ΠΈΠ²Π΅Ρ‚"
>>> ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ
>>> dir ()
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']  

.ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Python

для поиска HCF или GCD

ΠΠ°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ (H.C.F) ΠΈΠ»ΠΈ наибольший ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ (G.C.D) Π΄Π²ΡƒΡ… чисСл — это наибольшСС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ идСально Π΄Π΅Π»ΠΈΡ‚ Π΄Π²Π° Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… числа. НапримСр, H.C.F для 12 ΠΈ 14 равняСтся 2.

.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: ИспользованиС Ρ†ΠΈΠΊΠ»ΠΎΠ²

  # ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Python для поиска H.C.F Π΄Π²ΡƒΡ… чисСл

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
def compute_hcf (x, y):

# Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ мСньшСС число
    Ссли x> y:
        мСньшС = Ρƒ
    Π΅Ρ‰Π΅:
        мСньшС = Ρ…
    для i в диапазонС (1, мСньшС + 1):
        Ссли ((x% i == 0) и (y% i == 0)):
            hcf = я
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ hcf

число1 = 54
число2 = 24

print ("H.К.Π€. Ρ€Π°Π²Π½ΠΎ ", compute_hcf (num1, num2))
  

Π’Ρ‹Ρ…ΠΎΠ΄

  H.C.F. это 6 
 

Π—Π΄Π΅ΡΡŒ Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа, хранящиСся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… num1 ΠΈ num2 , ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ compute_hcf () . Ѐункция вычисляСт H.C.F. эти Π΄Π²Π° числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ.

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ сначала опрСдСляСм мСньшСС ΠΈΠ· Π΄Π²ΡƒΡ… чисСл, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ H.C.F ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ числу. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» для , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΎΡ‚ 1 ΠΊ этому числу.

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ провСряСм, идСально Π»ΠΈ нашС число Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ±Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… числа. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ сохраняСм Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ H.C.F. По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ наибольшСС число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ идСально Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ±Π° числа.

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ прост для понимания ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ нСэффСктивСн. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивный ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска H.C.F. — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°.

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ основан Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ H.C.F. Π΄Π²ΡƒΡ… чисСл Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅Π»ΠΈΡ‚ ΠΈΡ… Ρ€Π°Π·Π½ΠΈΡ†Ρƒ.

Π’ этом Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΌΡ‹ Π΄Π΅Π»ΠΈΠΌ большСС Π½Π° мСньшСС ΠΈ Π±Π΅Ρ€Π΅ΠΌ остаток. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ мСньшСС Π½Π° этот остаток. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠΉΡ‚Π΅, ΠΏΠΎΠΊΠ° остаток Π½Π΅ станСт 0.

НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΉΡ‚ΠΈ H.C.F. Из 54 ΠΈ 24 ΠΌΡ‹ Π΄Π΅Π»ΠΈΠΌ 54 Π½Π° 24. ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ Ρ€Π°Π²Π΅Π½ 6. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π΄Π΅Π»ΠΈΠΌ 24 Π½Π° 6, Π° остаток Ρ€Π°Π²Π΅Π½ 0. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, 6 являСтся Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌ H.C.F.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: использованиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π•Π²ΠΊΠ»ΠΈΠ΄Π°

  # Ѐункция для поиска HCF с использованиСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π•Π²ΠΊΠ»ΠΈΠ΄Π°
def compute_hcf (x, y):
   while (y):
       Ρ…, Ρƒ = Ρƒ, Ρ…% Ρƒ
   Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ…

hcf = compute_hcf (300, 400)
print ("Π₯КЀ Π΅ΡΡ‚ΡŒ", hcf)  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ зацикливаСмся, ΠΏΠΎΠΊΠ° y Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ.ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ x, y = y, x% y выполняСт Π·Π°ΠΌΠ΅Π½Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Python. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ здСсь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Python.

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ y Π² x , Π° остаток (x% y) Π² y ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Когда y становится Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ H.C.F. Π² x .

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *