خروجی و ورودی
print برای نمایش و input برای دریافت متن از کاربر است؛ نتیجهٔ input همیشه رشته است.
name = input("نام شما: ")print(f"سلام، {name}!")print("Python", "را", "شروع میکنیم", sep=" · ")print("خط اول", end=" ")print("و ادامهٔ همان خط")
مرجع کاربردی ساختارهای داده، جریان کنترل، توابع و الگوهای روزمره Python. از چاپ خروجی و دریافت ورودی تا متغیرها، عملگرها و تبدیل نوع را با مثالهای کوتاه مرور کنید. رشته، عدد، بولی و مجموعههای پرکاربرد را بر اساس ترتیب، یکتایی و قابلیت تغییر انتخاب کنید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
print برای نمایش و input برای دریافت متن از کاربر است؛ نتیجهٔ input همیشه رشته است.
name = input("نام شما: ")print(f"سلام، {name}!")print("Python", "را", "شروع میکنیم", sep=" · ")print("خط اول", end=" ")print("و ادامهٔ همان خط")نام متغیر را معنادار انتخاب کنید؛ کامنت تکخطی با # آغاز میشود.
# تعداد تلاشهای باقیماندهremaining_attempts = 3course_name = "Python"is_published = Truetype نوع را نشان میدهد؛ برای شرطهای نوعی، isinstance معمولاً خواناتر و منعطفتر است.
count = 12price = 19.5title = "گزارش"tags = ["آموزش", "Python"]metadata = {"published": True}print(type(count).__name__)print(isinstance(price, (int, float)))تقسیم معمولی / نتیجهٔ اعشاری میدهد؛ // تقسیم کف و % باقیمانده را محاسبه میکند.
total = 17 + 5difference = 17 - 5product = 17 * 5quotient = 17 / 5whole_parts = 17 // 5remainder = 17 % 5power = 2**5score = 10score += 4score *= 2تبدیل رشته به عدد ممکن است ValueError بدهد؛ ورودی را متناسب با نیاز بررسی کنید.
quantity = int("8")ratio = float("2.5")label = str(42)enabled = bool(1)try: amount = float("۱۲")except ValueError: amount = 0.0str متن، int و float عدد، complex عدد مختلط و bool مقدار درست یا نادرست را نگه میدارند.
message = "درود"whole = 24decimal = 3.14complex_number = 2 + 3jis_ready = Trueis_empty = Falseلیست مرتب و تغییرپذیر است؛ برای افزودن، حذف، مرتبسازی و دسترسی از متدهای مناسب استفاده کنید.
tasks = ["طراحی", "پیادهسازی"]tasks.append("آزمون")tasks.extend(["بازبینی", "انتشار"])first_task = tasks[0]last_task = tasks[-1]tasks.remove("بازبینی")tasks.sort()print(tasks)برش بازهٔ پایان را شامل نمیکند؛ comprehension را کوتاه و خوانا نگه دارید.
values = [3, 8, 11, 14, 20]middle = values[1:4]every_other = values[::2]reversed_values = values[::-1]squares = [number**2 for number in values]large_squares = [number**2 for number in values if number >= 10]تاپل برای گروه مرتب و تغییرناپذیر مناسب است؛ set اعضای یکتا نگه میدارد و ترتیب قراردادی ندارد.
coordinate = (35.7, 51.4)latitude, longitude = coordinateunique_tags = {"python", "web", "python"}unique_tags.add("data")shared_tags = unique_tags & {"python", "design"}all_tags = unique_tags | {"design"}print(latitude, longitude)print(shared_tags)دیکشنری کلیدهای یکتا را به مقدار نگاشت میکند؛ از get برای مقدار پیشفرض و update برای ادغام استفاده کنید.
profile = {"name": "سارا", "level": 2}level = profile.get("level", 0)profile["active"] = Trueprofile.update({"level": 3})for key, value in profile.items(): print(key, value)del profile["active"]عبارت مولد یک iterable تنبل میسازد؛ آن را فقط هنگام نیاز به مصرف دوباره به list تبدیل کنید.
numbers = range(1, 8)even_squares = (number**2 for number in numbers if number % 2 == 0)for square in even_squares: print(square)اندیس از صفر شروع میشود؛ اندیس منفی از انتهای رشته میشمارد و کران پایان برش حذف میشود.
text = "Python"first = text[0]last = text[-1]middle = text[1:4]backwards = text[::-1]for character in text: print(character)متدهای رشته مقدار تازه میسازند و رشتهٔ اولیه را تغییر نمیدهند.
raw = " Python, web, data "clean = raw.strip()parts = clean.split(", ")joined = " | ".join(parts)has_prefix = clean.startswith("Python")has_suffix = clean.endswith("data")position = clean.find("web")print(joined, has_prefix, has_suffix, position)عبارتهای ساده را داخل آکولاد بنویسید؛ دقت اعشار، جداکنندهٔ هزارگان و درصد را با format specifier کنترل کنید.
name = "آوا"price = 1250000completion = 0.875print(f"سلام {name}")print(f"مبلغ: {price:,.0f}")print(f"پیشرفت: {completion:.1%}")print(f"محاسبه: {6 * 7 = }")در کدهای قدیمی ممکن است % یا str.format ببینید؛ برای کد تازه معمولاً f-string سادهتر است.
name = "آوا"count = 3legacy = "سلام %s، تعداد: %d" % (name, count)formatted = "سلام {}، تعداد: {}".format(name, count)named = "{user} ({role})".format(user=name, role="مدیر")print(legacy, formatted, named)شرطها بهترتیب بررسی میشوند؛ از مقایسهٔ زنجیرهای برای بازههای عددی استفاده کنید.
score = 82if score >= 90: grade = "عالی"elif 70 <= score < 90: grade = "خوب"else: grade = "نیازمند تمرین"print(grade)عبارت شرطی برای انتخاب ساده مناسب است؛ شرطهای چندمرحلهای را با if/else معمولی بنویسید.
age = 20access = "مجاز" if age >= 18 else "نیازمند اجازه"print(access)پیمایش مستقیم معمولاً از دسترسی با اندیس روشنتر است؛ enumerate شمارنده را همراه مقدار میدهد.
tasks = ["طراحی", "کدنویسی", "آزمون"]for task in tasks: print(task)for index, task in enumerate(tasks, start=1): print(index, task)for number in range(2, 10, 2): print(number)شرط حلقه را طوری تغییر دهید که پایان آن قطعی باشد؛ break حلقه را تمام و continue دور جاری را رد میکند.
attempts = 0while attempts < 5: attempts += 1 if attempts == 2: continue if attempts == 4: break print(attempts)zip بهطور پیشفرض تا کوتاهترین iterable پیش میرود؛ else حلقه فقط وقتی اجرا میشود که break رخ نداده باشد.
names = ["آوا", "پارسا"]scores = [18, 20]for name, score in zip(names, scores): print(name, score)for number in range(2, 10): if number % 7 == 0: print("پیدا شد:", number) breakelse: print("موردی پیدا نشد")مقدار پیشفرض mutable مانند list را مستقیماً در امضای تابع قرار ندهید.
def greet(name: str, greeting: str = "سلام") -> str: return f"{greeting}، {name}!"def add_tag(tag: str, tags: list[str] | None = None) -> list[str]: result = [] if tags is None else list(tags) result.append(tag) return resultprint(greet("آوا"))print(add_tag("python"))*args گردآوری آرگومانهای موقعیتی و **kwargs آرگومانهای کلیدی اضافی را ممکن میکند.
def summarize(title: str, *values: int, **labels: str) -> None: print(title, sum(values)) print(labels)summarize("امتیاز", 10, 20, 30, unit="نمره", source="آزمون")چند مقدار برگشتی در واقع یک tuple است و میتوان آن را همزمان unpack کرد.
def min_max(values: list[int]) -> tuple[int, int]: return min(values), max(values)lowest, highest = min_max([8, 3, 12, 5])print(lowest, highest)lambda را برای تابع کوتاه و بینام بهکار ببرید؛ منطق چندمرحلهای را به def منتقل کنید.
users = [ {"name": "رها", "age": 29}, {"name": "آوا", "age": 22},]by_age = sorted(users, key=lambda user: user["age"])print(by_age)فقط نامهای موردنیاز را وارد کنید و اجرای اصلی اسکریپت را پشت guard استاندارد قرار دهید.
from pathlib import Pathfrom math import ceil, sqrtimport json as json_moduledef main() -> None: print(sqrt(81), ceil(2.2)) print(Path.cwd())if __name__ == "__main__": main()with فایل را حتی هنگام بروز خطا میبندد؛ encoding را برای متن فارسی مشخص کنید.
from pathlib import Pathpath = Path("notes.txt")path.write_text("یادداشت نخست\n", encoding="utf-8")with path.open("r", encoding="utf-8") as file: for line_number, line in enumerate(file, start=1): print(line_number, line.rstrip())برای نگهداری JSON در فایل از json.load و json.dump با فایل استفاده کنید؛ دادهٔ ورودی همچنان باید اعتبارسنجی شود.
import jsonprofile = {"name": "آوا", "skills": ["Python", "SQL"]}with open("profile.json", "w", encoding="utf-8") as file: json.dump(profile, file, ensure_ascii=False, indent=2)with open("profile.json", "r", encoding="utf-8") as file: loaded_profile = json.load(file)print(loaded_profile["name"])فقط خطاهای موردانتظار را بگیرید؛ else پس از موفقیت و finally در هر دو حالت اجرا میشود.
raw_value = "42"try: value = int(raw_value)except ValueError as error: print(f"عدد معتبر نیست: {error}")else: print("مقدار:", value)finally: print("پایان بررسی")برای ورودی نامعتبر خطای مشخص ایجاد کنید و در except فقط زمانی دوباره خطا را مطرح کنید که بتوانید زمینهٔ بیشتری اضافه کنید.
class InvalidScoreError(ValueError): passdef validate_score(score: int) -> None: if not 0 <= score <= 100: raise InvalidScoreError("امتیاز باید بین ۰ تا ۱۰۰ باشد.")try: validate_score(120)except InvalidScoreError as error: print(error)مسیر را پیش از حذف بررسی کنید؛ rmdir فقط پوشهٔ خالی را حذف میکند و unlink برای فایل است.
from pathlib import Pathfile_path = Path("temporary.txt")if file_path.is_file(): file_path.unlink()folder_path = Path("empty-folder")if folder_path.is_dir(): folder_path.rmdir()__init__ وضعیت نمونه را میسازد و self به همان نمونه اشاره دارد.
class Animal: def __init__(self, name: str) -> None: self.name = name def speak(self) -> str: return "صدای نامشخص"animal = Animal("همراه")print(animal.name, animal.speak())ویژگی کلاس میان نمونهها مشترک است؛ برای دادهٔ مستقل هر شیء، ویژگی نمونه تعریف کنید.
class Course: platform = "Novin Skills" def __init__(self, title: str) -> None: self.title = titlefirst = Course("Python")second = Course("HTML")print(first.platform, first.title)print(second.platform, second.title)متد والد را با super فراخوانی کنید تا رفتار پایهٔ کلاس حفظ شود.
class Animal: def __init__(self, name: str) -> None: self.name = name def speak(self) -> str: return "..."class Dog(Animal): def speak(self) -> str: return f"{self.name} میگوید: واق!"pet = Dog("هاپو")print(pet.speak())__repr__ نمایش مناسب برای اشکالزدایی فراهم میکند؛ خروجی آن باید تا حد ممکن بازنمایی روشنی از شیء باشد.
class Product: def __init__(self, name: str, price: int) -> None: self.name = name self.price = price def __repr__(self) -> str: return f"Product(name={self.name!r}, price={self.price})"print(Product("دفتر", 85000))در وراثت چندگانه ترتیب حل متدها را با MRO در نظر بگیرید و برای همکاری کلاسها از super استفاده کنید.
class TimestampMixin: def describe(self) -> str: return "زمان ثبت شد"class Report(TimestampMixin): def describe(self) -> str: return f"{super().describe()}؛ گزارش آماده است"report = Report()print(report.describe())print(Report.mro())yield مقدار را یکییکی تولید میکند و وضعیت اجرای تابع را برای درخواست بعدی حفظ میکند.
def doubled(values: list[int]): for value in values: yield value * 2for result in doubled([2, 4, 6]): print(result)deque برای افزودن و حذف از هر دو سر صف مناسب است؛ هر دو عملیات انتهایی کارآمد هستند.
from collections import dequequeue = deque(["کار ۱", "کار ۲"])queue.append("کار ۳")queue.appendleft("کار فوری")first = queue.popleft()last = queue.pop()print(first, last, list(queue))heapq یک min-heap است؛ کوچکترین عنصر در دسترس است و برای max-heap میتوان کلید عددی را منفی کرد.
import heapqpriorities = [7, 2, 9, 4]heapq.heapify(priorities)heapq.heappush(priorities, 1)next_priority = heapq.heappop(priorities)print(next_priority)max_heap = [-value for value in [7, 2, 9, 4]]heapq.heapify(max_heap)largest = -heapq.heappop(max_heap)print(largest)متغیر و نوع را با name = "Sara" و type(name) بررسی کنید.
لیست تغییرپذیر است: items = [1, 2]؛ برش: items[0:2].
برای نگاشت کلید به مقدار از dict و برای یکتایی از set استفاده کنید.
تکرار: for item in items:؛ بازه عددی: range(start, stop, step).
تابع: def add(a, b): return a + b؛ نوعها را در رابطهای عمومی مشخص کنید.
Comprehension: [x * 2 for x in values if x > 0] را خوانا نگه دارید.
مدیریت خطا: try/except SpecificError; از گرفتن بیقید همه خطاها پرهیز کنید.
فایل متنی را با with open(path, encoding="utf-8") as file: مدیریت کنید.
محیط مجازی را با python -m venv .venv بسازید و وابستگیها را ثبت کنید.
کد را در if __name__ == "__main__": از اجرای هنگام import جدا کنید.
برای پیمایش تنبل داده از generator و yield استفاده کنید تا مجموعههای بزرگ بیدلیل در حافظه کپی نشوند.
مسیر فایل را با pathlib.Path بسازید و منطق اصلی را از ورودی/خروجی و تنظیمات محیط جدا کنید.