۵۰ تمرین پایتون با جواب؛ از مقدماتی تا متوسط (با خروجی اجرا)

🗓 آخرین بهروزرسانی:
بهترین راه یادگیری برنامهنویسی، نوشتن کد است؛ نه فقط خواندن و دیدن. در این صفحه ۵۰ تمرین پایتون را از ساده تا پیشرفته با جواب کامل و خروجی واقعی جمع کردهایم. تمرینها در چهار سطح دستهبندی شدهاند: مقدماتی (ورودی، شرط و حلقه)، لیست و رشته و دیکشنری، الگوریتمها، و سطح متوسط (کلاس، فایل، دکوراتور و ژنراتور). هر تمرین یک صورت مسئله، یک راهحل و خروجی اجرای آن را دارد.
چطور از این تمرینها بیشترین استفاده را ببرید؟
- صورت مسئله را بخوانید و پیش از دیدن جواب، حداقل ۱۰ تا ۱۵ دقیقه خودتان تلاش کنید.
- اگر گیر کردید، فقط خط اول جواب را ببینید و دوباره ادامه دهید.
- بعد از حل، کد خودتان را با جواب مقایسه کنید. راهحل شما لازم نیست یکسان باشد؛ همین که خروجی درست باشد و کد خوانا، کافی است.
- هر تمرین را کمی تغییر دهید: ورودی دیگری بدهید، حالت خطا را مدیریت کنید یا آن را به تابع تبدیل کنید.
- هر چند روز تمرینهای قبلی را دوباره، بدون نگاه کردن، بنویسید. تکرار با فاصله، دانستهها را ماندگار میکند.
همه جوابها با پایتون 3.13.5 اجرا شدهاند و خروجی زیر هر کد، خروجی واقعی همان اجراست. در تمرینهایی که ورودی میگیرند، ورودی نمونه در خروجی دیده میشود. اگر هنگام حل با خطا روبهرو شدید، راهنمای رفع خطاهای رایج پایتون را ببینید.
سطح ۱: تمرینهای مقدماتی (۱ تا ۱۵)
در این بخش با input، شرط و حلقههای for و while کار میکنید. اگر هر کدام از این مفاهیم برایتان تازه است، پیش از شروع آموزش آن را مرور کنید.
تمرین 1: سلام با نام
برنامهای بنویسید که نام کاربر را بگیرد و به او سلام کند.
name = input("Name: ")
print(f"Hello, {name}!")خروجی:
Name: Ali
Hello, Ali!تمرین 2: جمع دو عدد
دو عدد صحیح از کاربر بگیرید و جمع آنها را چاپ کنید.
a = int(input("a: "))
b = int(input("b: "))
print("sum =", a + b)خروجی:
a: 7
b: 5
sum = 12تمرین 3: مساحت و محیط مستطیل
طول و عرض را بگیرید و مساحت و محیط را چاپ کنید.
w = float(input("width: "))
h = float(input("height: "))
print("area =", w * h, "perimeter =", 2 * (w + h))خروجی:
width: 4
height: 2.5
area = 10.0 perimeter = 13.0تمرین 4: تبدیل سلسیوس به فارنهایت
دما را به سلسیوس بگیرید و به فارنهایت تبدیل کنید (F = C × 9/5 + 32).
c = float(input("C: "))
print(f"{c} C = {c * 9 / 5 + 32:.1f} F")خروجی:
C: 37
37.0 C = 98.6 Fتمرین 5: زوج یا فرد
عددی بگیرید و بگویید زوج است یا فرد.
n = int(input("n: "))
print("even" if n % 2 == 0 else "odd")خروجی:
n: 13
oddتمرین 6: بزرگترین از سه عدد
سه عدد بگیرید و بزرگترین را بدون تابع max پیدا کنید.
a, b, c = 8, 21, 14
big = a
if b > big:
big = b
if c > big:
big = c
print("max:", big)خروجی:
max: 21تمرین 7: سال کبیسه میلادی
بررسی کنید سال دادهشده کبیسه است یا نه.
for y in (1900, 2000, 2024, 2026):
leap = y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)
print(y, leap)خروجی:
1900 False
2000 True
2024 True
2026 Falseتمرین 8: نمره به حرف
نمره ۰ تا ۲۰ را به A، B، C یا F تبدیل کنید.
def grade(s):
if s >= 17: return "A"
if s >= 14: return "B"
if s >= 10: return "C"
return "F"
print([grade(s) for s in (19, 15.5, 10, 7)])خروجی:
['A', 'B', 'C', 'F']تمرین 9: جدول ضرب
جدول ضرب عدد ۷ را تا ۱۰ چاپ کنید.
for i in range(1, 11):
print(f"7 x {i:2} = {7 * i}")خروجی:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70تمرین 10: جمع ۱ تا n
مجموع اعداد ۱ تا n را با حلقه و با فرمول حساب کنید.
n = 100
total = 0
for i in range(1, n + 1):
total += i
print(total, n * (n + 1) // 2)خروجی:
5050 5050تمرین 11: فاکتوریل
فاکتوریل عدد را با حلقه حساب کنید.
n = 6
f = 1
for i in range(2, n + 1):
f *= i
print(f"{n}! = {f}")خروجی:
6! = 720تمرین 12: شمارش ارقام
تعداد ارقام یک عدد صحیح مثبت را بدون تبدیل به رشته بشمارید.
n = 907321
count = 0
while n > 0:
n //= 10
count += 1
print("digits:", count)خروجی:
digits: 6تمرین 13: مقلوب عدد
ارقام یک عدد را برعکس کنید.
n = 12345
rev = 0
while n:
rev = rev * 10 + n % 10
n //= 10
print(rev)خروجی:
54321تمرین 14: مثلث ستاره
یک مثلث ستارهای با ۵ ردیف چاپ کنید.
for i in range(1, 6):
print(" " * (5 - i) + "*" * (2 * i - 1))خروجی:
*
***
*****
*******
*********تمرین 15: میانگین تا صفر
تا وقتی کاربر صفر وارد نکرده عدد بگیرید و میانگین را چاپ کنید.
nums = []
while True:
x = float(input("number (0 to stop): "))
if x == 0:
break
nums.append(x)
print("average:", sum(nums) / len(nums))خروجی:
number (0 to stop): 10
number (0 to stop): 20
number (0 to stop): 45
number (0 to stop): 0
average: 25.0سطح ۲: لیست، رشته و دیکشنری (۱۶ تا ۳۰)
این تمرینها مهارت کار با ساختارهای داده را میسازند؛ مهارتی که تقریباً در هر برنامه واقعی به آن نیاز دارید. آموزشهای لیست، رشته، دیکشنری، مجموعه و list comprehension پشتیبان این بخشاند.
تمرین 16: بزرگترین و کوچکترین عضو لیست
بدون max و min، بزرگترین و کوچکترین عضو لیست را پیدا کنید.
nums = [34, 7, 89, 12, 56]
lo = hi = nums[0]
for n in nums[1:]:
if n < lo: lo = n
if n > hi: hi = n
print(lo, hi)خروجی:
7 89تمرین 17: حذف تکراریها با حفظ ترتیب
عضوهای تکراری لیست را حذف کنید اما ترتیب حفظ شود.
items = [3, 1, 3, 2, 1, 5]
seen, out = set(), []
for x in items:
if x not in seen:
seen.add(x)
out.append(x)
print(out)خروجی:
[3, 1, 2, 5]تمرین 18: شمارش کلمات
تعداد تکرار هر کلمه در یک جمله را بشمارید.
text = "the cat and the dog and the bird"
counts = {}
for w in text.split():
counts[w] = counts.get(w, 0) + 1
print(counts)خروجی:
{'the': 3, 'cat': 1, 'and': 2, 'dog': 1, 'bird': 1}تمرین 19: پالیندروم
بررسی کنید رشته از دو طرف یکسان خوانده میشود یا نه (فاصله و حروف بزرگ را نادیده بگیرید).
def is_pal(s):
s = "".join(s.lower().split())
return s == s[::-1]
print(is_pal("Never odd or even"), is_pal("python"))خروجی:
True Falseتمرین 20: شمارش حروف صدادار
تعداد حروف صدادار انگلیسی در رشته را بشمارید.
s = "Programming in Python"
print(sum(1 for ch in s.lower() if ch in "aeiou"))خروجی:
5تمرین 21: معکوس کردن کلمات
ترتیب کلمات جمله را برعکس کنید.
s = "learn python step by step"
print(" ".join(reversed(s.split())))خروجی:
step by step python learnتمرین 22: مربع اعداد زوج
با list comprehension مربع اعداد زوج ۱ تا ۲۰ را بسازید.
print([n * n for n in range(1, 21) if n % 2 == 0])خروجی:
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400]تمرین 23: ادغام دو دیکشنری
دو دیکشنری قیمت را ادغام کنید؛ اگر کلید مشترک بود، مقدار دوم بماند.
a = {"pen": 10, "book": 120}
b = {"book": 100, "bag": 450}
print(a | b)خروجی:
{'pen': 10, 'book': 100, 'bag': 450}تمرین 24: معکوس کردن دیکشنری
جای کلید و مقدار دیکشنری را عوض کنید.
codes = {"IR": "Iran", "TR": "Turkey", "DE": "Germany"}
print({v: k for k, v in codes.items()})خروجی:
{'Iran': 'IR', 'Turkey': 'TR', 'Germany': 'DE'}تمرین 25: اشتراک و اختلاف لیستها
عضوهای مشترک و عضوهای فقط در لیست اول را پیدا کنید.
a = [1, 2, 3, 4, 5]
b = [4, 5, 6, 7]
print(sorted(set(a) & set(b)), sorted(set(a) - set(b)))خروجی:
[4, 5] [1, 2, 3]تمرین 26: دومین عدد بزرگ
دومین عدد بزرگ لیست را پیدا کنید (تکراریها یکی حساب شوند).
nums = [10, 40, 40, 25, 30]
print(sorted(set(nums))[-2])خروجی:
30تمرین 27: چرخش لیست
لیست را k خانه به راست بچرخانید.
def rotate(lst, k):
k %= len(lst)
return lst[-k:] + lst[:-k]
print(rotate([1, 2, 3, 4, 5], 2))خروجی:
[4, 5, 1, 2, 3]تمرین 28: صاف کردن لیست تودرتو
لیست دوسطحی را به یک لیست ساده تبدیل کنید.
matrix = [[1, 2], [3, 4, 5], [6]]
print([x for row in matrix for x in row])خروجی:
[1, 2, 3, 4, 5, 6]تمرین 29: گروهبندی بر اساس طول
کلمات را بر اساس تعداد حروف گروهبندی کنید.
words = ["hi", "cat", "dog", "tree", "go", "python"]
groups = {}
for w in words:
groups.setdefault(len(w), []).append(w)
print(groups)خروجی:
{2: ['hi', 'go'], 3: ['cat', 'dog'], 4: ['tree'], 6: ['python']}تمرین 30: مرتبسازی دانشجوها
لیست دانشجوها را بر اساس نمره از زیاد به کم مرتب کنید.
students = [("Sara", 18.5), ("Reza", 15), ("Nima", 19.25)]
for name, score in sorted(students, key=lambda s: s[1], reverse=True):
print(f"{name:5} {score}")خروجی:
Nima 19.25
Sara 18.5
Reza 15سطح ۳: الگوریتمها و حل مسئله (۳۱ تا ۴۵)
در این بخش منطق الگوریتمی تمرین میشود؛ همان نوع سؤالهایی که در امتحانهای دانشگاه و مصاحبههای برنامهنویسی میبینید. برای تمرین ۳۱ توضیح کاملتر را در تشخیص عدد اول در پایتون نوشتهایم. آشنایی با تابع برای این بخش لازم است.
تمرین 31: اعداد اول تا n
تابعی بنویسید که همه اعداد اول تا n را برگرداند.
from math import isqrt
def primes(n):
return [k for k in range(2, n + 1) if all(k % d for d in range(2, isqrt(k) + 1))]
print(primes(50))خروجی:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]تمرین 32: دنباله فیبوناچی
n جمله اول فیبوناچی را تولید کنید.
def fib(n):
a, b, out = 0, 1, []
for _ in range(n):
out.append(a)
a, b = b, a + b
return out
print(fib(12))خروجی:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]تمرین 33: ب.م.م و ک.م.م
بزرگترین مقسومعلیه مشترک را با الگوریتم اقلیدس و کوچکترین مضرب مشترک را حساب کنید.
def gcd(a, b):
while b:
a, b = b, a % b
return a
a, b = 84, 120
print("gcd:", gcd(a, b), "lcm:", a * b // gcd(a, b))خروجی:
gcd: 12 lcm: 840تمرین 34: تبدیل دهدهی به دودویی
عدد را بدون bin به مبنای دو تبدیل کنید.
def to_bin(n):
bits = ""
while n > 0:
bits = str(n % 2) + bits
n //= 2
return bits or "0"
print(to_bin(37), bin(37)[2:])خروجی:
100101 100101تمرین 35: عدد آرمسترانگ
اعداد سهرقمی که برابر مجموع مکعب ارقامشان هستند را پیدا کنید.
print([n for n in range(100, 1000) if n == sum(int(d) ** 3 for d in str(n))])خروجی:
[153, 370, 371, 407]تمرین 36: عدد کامل
اعدادی زیر ۱۰۰۰۰ که برابر مجموع مقسومعلیههای کوچکترشان هستند را پیدا کنید.
def is_perfect(n):
s = 1
d = 2
while d * d <= n:
if n % d == 0:
s += d + (n // d if d != n // d else 0)
d += 1
return n > 1 and s == n
print([n for n in range(2, 10000) if is_perfect(n)])خروجی:
[6, 28, 496, 8128]تمرین 37: جستجوی دودویی
در لیست مرتب، جای یک عدد را با جستجوی دودویی پیدا کنید.
def bsearch(arr, x):
lo, hi = 0, len(arr) - 1
while lo <= hi:
mid = (lo + hi) // 2
if arr[mid] == x: return mid
if arr[mid] < x: lo = mid + 1
else: hi = mid - 1
return -1
data = [3, 8, 15, 23, 42, 57, 91]
print(bsearch(data, 42), bsearch(data, 5))خروجی:
4 -1تمرین 38: مرتبسازی حبابی
لیست را با الگوریتم حبابی مرتب کنید.
def bubble(a):
a = a[:]
for i in range(len(a)):
for j in range(len(a) - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
return a
print(bubble([5, 2, 9, 1, 7]))خروجی:
[1, 2, 5, 7, 9]تمرین 39: آناگرام
بررسی کنید دو کلمه آناگرام هم هستند (حروف یکسان با ترتیب متفاوت).
from collections import Counter
print(Counter("listen") == Counter("silent"), Counter("apple") == Counter("pale"))خروجی:
True Falseتمرین 40: فشردهسازی رشته
حروف تکراری پشتسرهم را به شکل حرف و تعداد فشرده کنید.
def compress(s):
out, i = "", 0
while i < len(s):
j = i
while j < len(s) and s[j] == s[i]:
j += 1
out += s[i] + str(j - i)
i = j
return out
print(compress("aaabccdddd"))خروجی:
a3b1c2d4تمرین 41: ترانهاده ماتریس
سطر و ستون ماتریس را جابهجا کنید.
m = [[1, 2, 3], [4, 5, 6]]
print([list(row) for row in zip(*m)])خروجی:
[[1, 4], [2, 5], [3, 6]]تمرین 42: مجموع ارقام بازگشتی
مجموع ارقام عدد را با تابع بازگشتی حساب کنید. اگر با بازگشت آشنا نیستید، ابتدا آموزش تابع بازگشتی در پایتون را ببینید.
def digit_sum(n):
return n if n < 10 else n % 10 + digit_sum(n // 10)
print(digit_sum(98765))خروجی:
35تمرین 43: تولید رمز تصادفی
رمز ۱۲ کاراکتری امن با حروف، عدد و نماد بسازید (برای رمز واقعی از secrets استفاده کنید).
import secrets, string
chars = string.ascii_letters + string.digits + "!@#$%"
pwd = "".join(secrets.choice(chars) for _ in range(12))
print(len(pwd), all(c in chars for c in pwd))خروجی:
12 Trueتمرین 44: اعتبارسنجی کد ملی
الگوریتم رقم کنترل کد ملی دهرقمی را پیاده کنید.
def valid_national_id(code):
if len(code) != 10 or not code.isdigit() or len(set(code)) == 1:
return False
s = sum(int(code[i]) * (10 - i) for i in range(9)) % 11
check = int(code[9])
return check == s if s < 2 else check == 11 - s
print(valid_national_id("0000000019"), valid_national_id("1234567890"))خروجی:
True Falseتمرین 45: تعداد روز تا تاریخ
تعداد روزهای بین دو تاریخ میلادی را حساب کنید.
from datetime import date
d1, d2 = date(2026, 10, 15), date(2027, 3, 21)
print((d2 - d1).days, "days")خروجی:
157 daysسطح ۴: تمرینهای سطح متوسط (۴۶ تا ۵۰)
این پنج تمرین شما را به مفاهیم سطح متوسط میبرد: کلاس و شیء، فایل JSON، فایل متنی و ابزارهای پیشرفتهتر تابع. ادامه این مسیر در دوره پایتون سطح متوسط است.
تمرین 46: کلاس حساب بانکی
کلاسی با واریز، برداشت و جلوگیری از برداشت بیش از موجودی بسازید.
class Account:
def __init__(self, owner, balance=0):
self.owner, self.balance = owner, balance
def deposit(self, amount):
self.balance += amount
def withdraw(self, amount):
if amount > self.balance:
raise ValueError("insufficient funds")
self.balance -= amount
acc = Account("Sara", 100)
acc.deposit(50)
acc.withdraw(30)
try:
acc.withdraw(500)
except ValueError as e:
print("error:", e)
print(acc.owner, acc.balance)خروجی:
error: insufficient funds
Sara 120تمرین 47: ذخیره و خواندن JSON
دیکشنری مخاطبان را در فایل JSON ذخیره و دوباره بخوانید.
import json
contacts = {"Ali": "0912-000-0000", "Mina": "0935-000-0000"}
with open("contacts.json", "w", encoding="utf-8") as f:
json.dump(contacts, f, ensure_ascii=False)
with open("contacts.json", encoding="utf-8") as f:
print(json.load(f))خروجی:
{'Ali': '0912-000-0000', 'Mina': '0935-000-0000'}تمرین 48: شمارش خطوط و کلمات فایل
تعداد خط، کلمه و کاراکتر یک فایل متنی را بشمارید.
from pathlib import Path
p = Path("note.txt")
p.write_text("first line\nsecond line here\nend\n", encoding="utf-8")
text = p.read_text(encoding="utf-8")
print(len(text.splitlines()), len(text.split()), len(text))خروجی:
3 6 32تمرین 49: دکوراتور زمانسنج
دکوراتوری بنویسید که زمان اجرای تابع را چاپ کند.
import time
from functools import wraps
def timer(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
t = time.perf_counter()
result = fn(*args, **kwargs)
print(f"{fn.__name__} took {(time.perf_counter() - t) * 1000:.1f} ms")
return result
return wrapper
@timer
def total(n):
return sum(range(n))
print(total(1_000_000))خروجی:
total took 8.0 ms
499999500000اگر سینتکس @timer برایتان تازه است، آموزش دکوراتور در پایتون به زبان ساده را بخوانید تا بفهمید wrapper و functools.wraps دقیقاً چه کاری میکنند.
تمرین 50: ژنراتور اعداد زوج
ژنراتوری بنویسید که اعداد زوج را یکییکی تولید کند.
def evens(limit):
n = 0
while n <= limit:
yield n
n += 2
g = evens(10)
print(next(g), next(g), list(g))خروجی:
0 2 [4, 6, 8, 10]بعد از این ۵۰ تمرین چه کنیم؟
وقتی این تمرینها را حل کردید، وقت ساختن پروژههای کوچک است؛ جایی که چند مفهوم را کنار هم به کار میبرید. پیشنهادهای ما: بازی حدس عدد، ماشینحساب، لیست کارها، مدیریت مخاطبین و مدیریت نمرات دانشجویان. برای کدهای کوتاه و کاربردی هم به کدهای آماده پایتون سر بزنید.
📌 همچنین بخوانید: بازار کار پایتون در ایران، ساخت بازی با پایتون و Pygame و ساخت ربات با پایتون
وقتی با این تمرینها راحت شدید، وقت ساختن پروژه است. فهرست ۳۲ پروژه پایتون از مبتدی تا پیشرفته پروژهها را از مبتدی تا پیشرفته مرتب کرده و برای هر کدام آموزش کامل دارد.
سوالات متداول
بهترین راه تمرین پایتون برای مبتدیها چیست؟
هر روز چند تمرین کوتاه را بدون نگاه به جواب حل کنید، سپس با جواب مقایسه کنید و تمرین را کمی تغییر دهید. بعد از تسلط بر مبانی، پروژههای کوچک بسازید.
اگر جواب من با جواب این صفحه فرق داشت چه کنم؟
اشکالی ندارد. برای بیشتر مسئلهها چند راهحل درست وجود دارد. مهم این است که خروجی برای ورودیهای مختلف درست باشد و کد خوانا باشد.
این تمرینها برای کدام نسخه پایتون هستند؟
همه با پایتون 3.13.5 اجرا شدهاند و روی نسخههای جدید پایتون ۳ هم کار میکنند. عملگر | برای ادغام دیکشنری از پایتون ۳.۹ به بعد در دسترس است.
بعد از تمرینهای مقدماتی چه چیزی یاد بگیرم؟
شیءگرایی، کار با فایل، مدیریت خطا و کتابخانهها. مسیر کامل را در دوره پایتون سطح متوسط و صفحه مسیرهای یادگیری ببینید.
آموزشهای مرتبط
- آموزش جامع پایتون
- دوره پایتون مقدماتی
- دوره پایتون سطح متوسط
- آزمون آنلاین پایتون
- کدهای آماده پایتون
- مسیرهای یادگیری
برای ذخیره پیشرفت در همه دستگاهها و دریافت گواهی پایان مسیر، رایگان ثبتنام کن یا وارد شو.