2️⃣ حلقه while: تکرار تا وقتی شرط درسته
💥 کاربرد: وقتی نمیدونی چندبار باید تکرار کنی و فقط یه شرط داری.
📝 سینتکس:
while condition:
# Kode inja tekrar mishe
✨ مثال ساده:
count = 1
while count <= 5:
print(f"Shomar: {count}")
count += 1
# Khoroji:
# Shomar: 1
# Shomar: 2
# Shomar: 3
# Shomar: 4
# Shomar: 5
✨ مثال با شرط پیچیده:
password = ""
while password != "1234":
password = input("Ramz ro vared kon: ")
if password == "1234":
print("Khosh omadi! ✅")
else:
print("Ramz ghalat! 🚫")
💡 نکات ریز برای while:
- همیشه یه راه خروج از حلقه بذار (مثل افزایش متغیر یا شرط break)، وگرنه حلقه بیپایان میشه:
while True: # Bad idea! Halghe bi-payan
print("Inja gir mikoni!")
- برای جلوگیری از حلقه بیپایان، از یه شرط منطقی یا محدودیت (مثل حداکثر تعداد تکرار) استفاده کن:
tries = 0
while tries < 3:
print("Try kardan...")
tries += 1
💯 @PythonForYou 🧑💻👩💻
3️⃣ کنترل جریان در حلقهها
💥 برای مدیریت بهتر حلقهها، از دستورات زیر استفاده کن:
🔸 break: حلقه رو کامل متوقف میکنه
for num in range(10):
if num == 5:
break
print(num)
# Khoroji: 0, 1, 2, 3, 4
🔸 continue: تکرار فعلی رو رد میکنه و میره به تکرار بعدی.
for num in range(5):
if num % 2 == 0:
continue
print(f"Fard: {num}")
# Khoroji: Fard: 1, Fard: 3
🔸نکته else با حلقهها: اگه حلقه بدون break تموم بشه، بلوک else اجرا میشه.
numbers = [1, 3, 5]
for num in numbers:
if num == 2:
print("Adad 2 peyda shod!")
break
else:
print("Adad 2 nabood! 🚫")
# Khoroji: Adad 2 nabood!
💡 نکته ریز:
- دقت کن else تو حلقهها وقتی مفیده که میخوای مطمئن بشی حلقه کامل اجرا شده.
- از break و continue با احتیاط استفاده کن تا کد خوانا بمونه.
💯 @PythonForYou 🧑💻👩💻
4️⃣ پیشگیری از خطاهای تورفتگی
💥 تورفتگی تو پایتون حیاتیه و اشتباه توش باعث ارور یا رفتار غلط میشه.
🔸 تورفتگی فراموششده:
for num in range(3):
print(num) # IndentationError
- درست:
for num in range(3):
print(num)
🔸 تورفتگی خطوط اضافی فراموششده:
for num in range(3):
print(num)
print("Payan") # Bayad kharej az halghe bashe
🔸 تورفتگی غیرضروری:
print("Salam") # IndentationError
🔸 تورفتگی غیرضروری پس از حلقه:
for num in range(3):
print(num)
print("Ghalat!") # In to halghe-st
🔸 فراموشی دو نقطه (:):
for num in range(3) # SyntaxError
print(num)
💡 ترفند حرفهای:
- همیشه از 4 فاصله (space) به جای تب استفاده کن.
- تو ویرایشگر (مثل VS Code)، تنظیم کن که تب به 4 فاصله تبدیل بشه.
- از ابزارهای linting مثل flake8 برای پیدا کردن خطاهای تورفتگی استفاده کن.
💯 @PythonForYou 🧑💻👩💻
5️⃣ تکنیکهای پیشرفته با حلقهها
⭐️ 1. حلقههای تودرتو (Nested Loops)
💥 برای کار با دادههای پیچیده (مثل ماتریس) از حلقههای تودرتو استفاده کن.
- مثال: چاپ ماتریس:
matrix = [[1, 2, 3], [4, 5, 6]]
for row in matrix:
for num in row:
print(num, end=" ")
print() # Line jadid
# Khoroji:
# 1 2 3
# 4 5 6
💡 نکته ریز:
- حلقههای تودرتو برای دادههای بزرگ میتونن کند باشن. از List Comprehension به جاش استفاده کن:
flat = [num for row in matrix for num in row]
print(flat) # Khoroji: [1, 2, 3, 4, 5, 6]
—-—-—-—-—-—-—-—-—-—-—
⭐️ 2. استفاده از range() در حلقهها
💥 استفاده از range(start, stop, step) برای ساخت دنبالههای عددی عالیه.
- مثال:
for num in range(0, 10, 2):
print(f"Zoj: {num}")
# Khoroji: Zoj: 0, Zoj: 2, Zoj: 4, Zoj: 6, Zoj: 8
💡 نکته ریز:
- برای فهرستهای بزرگ، مستقیم از range() تو حلقه استفاده کن تا حافظه کمتری مصرف بشه:
for i in range(1000000):
if i == 5:
break
—-—-—-—-—-—-—-—-—-—-—
⭐️ 3. حلقهها و List Comprehension
💥 برای کارهای ساده، List Comprehension جایگزین حلقههای for میشه.
- مثال حلقه معمولی:
numbers = [1, 2, 3, 4]
squares = []
for num in numbers:
squares.append(num**2)
print(squares) # Khoroji: [1, 4, 9, 16]
- با List Comprehension:
squares = [num**2 for num in numbers]
print(squares) # Khoroji: [1, 4, 9, 16]
💡 نکته ریز:
- استفاده از List Comprehension سریعتر و خواناتر از حلقه معمولیه.
- برای شرطهای پیچیده هم کار میکنه:
evens = [num for num in numbers if num % 2 == 0]
print(evens) # Khoroji: [2, 4]
—-—-—-—-—-—-—-—-—-—-—
⭐️ 4. حلقهها و ژنراتورها
💥 برای صرفهجویی در حافظه، از ژنراتورها به جای فهرست استفاده کن.
- مثال:
for num in (x**2 for x in range(1000)): # Generator
if num > 100:
break
print(num)
💡 نکته ریز:
- ژنراتورها فقط مقادیر رو موقع نیاز تولید میکنن، پس برای دادههای بزرگ عالیان.
💯 @PythonForYou 🧑💻👩💻
6️⃣ مدیریت خطاها در حلقهها
💥 حلقهها ممکنه باعث خطاهایی مثل IndexError یا حلقه بیپایان بشن.
✨ مثال مدیریت خطا:
fruits = ["sib", "moz"]
try:
for i in range(5):
print(fruits[i])
except IndexError:
print("Indeks na-mojood! 🚫")
✨ مثال جلوگیری از حلقه بیپایان:
count = 0
while count < 5:
print(f"Shomar: {count}")
count += 1 # Faramoosh in, halghe bi-payan mishe!
—-—-—-—-—-—-—-—-—-—-—
7️⃣ مثالهای کاربردی
✨ محاسبه فاکتوریل با while:
n = 5
factorial = 1
while n > 0:
factorial *= n
n -= 1
print(f"Factorial: {factorial}") # Khoroji: Factorial: 120
✨ جستجوی خطی با for:
numbers = [3, 7, 2, 9]
target = 7
for i, num in enumerate(numbers):
if num == target:
print(f"Target {target} dar index {i} peyda shod!")
break
else:
print("Target nabood! 🚫")
✨ تولید فهرست فیبوناچی:
n = 6
fib = [1, 1]
for i in range(2, n):
fib.append(fib[i-1] + fib[i-2])
print(fib) # Khoroji: [1, 1, 2, 3, 5, 8]
✨ چاپ الگوی ستاره با حلقه تودرتو:
for i in range(5):
for j in range(i + 1):
print("*", end="")
print()
# Khoroji:
# *
# **
# ***
# ****
# *****
—-—-—-—-—-—-—-—-—-—-—
8️⃣ نکات حرفهای
🔸 بهینهسازی حافظه:
برای دادههای بزرگ، از ژنراتورها یا ()range مستقیم استفاده کن:
for i in range(1000000):
if i == 5:
break
🔸 خوانایی کد:
- اسمهای معنیدار برای متغیرها انتخاب کن (مثل fruit به جای x).
- از ()enumerate به جای range(len()) استفاده کن.
🔸 جلوگیری از حلقههای بیپایان:
- همیشه یه شرط خروج (مثل break یا افزایش متغیر) تو while بذار.
- برای تست، یه محدودیت حداکثر تکرار اضافه کن:
tries = 0
while tries < 1000:
tries += 1
if some_condition:
break
🔸 ترکیب با توابع داخلی:
- برای جمع، از sum() به جای حلقه استفاده کن:
numbers = [1, 2, 3, 4]
total = sum(numbers) # Tondtar az halghe
💯 @PythonForYou 🧑💻👩💻
📢 تسلط بر تابع ()range 🐍
در ادامه قراره یه ابزار کلیدی تو پایتون به اسم ()range رو از صفر تا صد بررسی کنیم! 😎
این تابع برای ساخت دنبالههای عددی، پیمایش تو حلقهها، و حتی کارهای پیچیدهتر عالیه. از مفاهیم پایه تا ترفندهای حرفهای، همهچیز اینجاست! 🚀
بریم شروع کنیم!
تابع ()range چیه؟ 🤔
تابع ()range یه تابع داخلی (built-in) تو پایتونه که یه دنباله عددی تولید میکنه. این دنباله معمولاً تو حلقهها، ساخت فهرستها، یا مدیریت ایندکسها استفاده میشه. نکته مهم اینه که ()range یه شیء از نوع range میسازه که خیلی بهینهست، چون اعداد رو بهصورت تنبل (lazy) و فقط موقع نیاز تولید میکنه، نه اینکه کل فهرست رو تو حافظه نگه داره.
—-—-—-—-—-—-—-—-—-—-—
📝 سینتکس:
range(start, stop, step)
🔸 start: عدد شروع (اختیاری، پیشفرض 0).
🔸 stop: عدد پایان (اجباری، خودش شامل نمیشه).
🔸 step: فاصله بین اعداد (اختیاری، پیشفرض 1).
📌 نکته: خروجی ()range یه شیء rangeه، نه فهرست. برای تبدیل به فهرست، از ()list استفاده کن:
numbers = list(range(5))
print(numbers) # Khoroji: [0, 1, 2, 3, 4]
—-—-—-—-—-—-—-—-—-—-—
💠 کاربردهای اصلی ()range
1️⃣ پیمایش تو حلقههای for
تابع ()range برای تکرار یه تعداد مشخص تو حلقههای for خیلی پرکاربرده.
✨ مثال ساده (از 0 تا stop-1):
for num in range(5):
print(f"Adad: {num}")
# Khoroji:
# Adad: 0
# Adad: 1
# Adad: 2
# Adad: 3
# Adad: 4
✨ مثال با start و stop:
for num in range(2, 7):
print(f"Adad: {num}")
# Khoroji:
# Adad: 2
# Adad: 3
# Adad: 4
# Adad: 5
# Adad: 6
✨ مثال با step:
for num in range(0, 10, 2):
print(f"Zoj: {num}")
# Khoroji:
# Zoj: 0
# Zoj: 2
# Zoj: 4
# Zoj: 6
# Zoj: 8
—-—-—-—-—-—-—-—-—-—-—
2️⃣ ساخت فهرستهای عددی
با تبدیل ()range به فهرست، میتونی دنبالههای عددی بسازی.
✨ مثال:
numbers = list(range(1, 6))
print(numbers) # Khoroji: [1, 2, 3, 4, 5]
✨ مثال با step منفی (معکوس):
reverse_numbers = list(range(10, 0, -1))
print(reverse_numbers) # Khoroji: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
—-—-—-—-—-—-—-—-—-—-—
3️⃣ پیمایش با ایندکس تو فهرستها
تابع ()range با ()len برای دسترسی به ایندکسهای فهرست استفاده میشه.
✨ مثال:
fruits = ["sib", "moz", "portoghal"]
for i in range(len(fruits)):
print(f"Index {i}: {fruits[i]}")
# Khoroji:
# Index 0: sib
# Index 1: moz
# Index 2: portoghal
💡 ترفند بهتر: به جای range(len())، از ()enumerate استفاده کن که خواناتر و بهینهتره:
for i, fruit in enumerate(fruits):
print(f"Index {i}: {fruit}")
💯 @PythonForYou 🧑💻👩💻
⭐️ نکات ریز و ترفندهای حرفهای
1️⃣ بهینه بودن ()range:
تابع ()range یه شیء تنبل تولید میکنه که حافظه کمی مصرف میکنه، چون اعداد رو یکییکی میسازه.
import sys
print(sys.getsizeof(range(1000000))) # ~48 bytes
print(sys.getsizeof(list(range(1000000)))) # ~9000000 bytes
2️⃣ استفاده از step منفی برای دنبالههای نزولی:
برای ساخت دنباله معکوس، step باید منفی باشه و start از stop بزرگتر:
for num in range(5, 0, -1):
print(num)
# Khoroji: 5, 4, 3, 2, 1
3️⃣ ترکیب با List Comprehension:
برای ساخت فهرستهای پیچیدهتر:
squares = [x**2 for x in range(1, 6)]
print(squares) # Khoroji: [1, 4, 9, 16, 25]
4️⃣ مدیریت خطاها:
اگه step صفر باشه یا بازه نامعتبر باشه، ارور میگیره:
try:
list(range(1, 5, 0))
except ValueError:
print("Step ghalat! 🚫")
# Khoroji: Step ghalat!
5️⃣ استفاده تو حلقههای while:
هرچند کمتر رایجه، ولی میتونی ()range رو تو while استفاده کنی:
i = 0
r = range(5)
while i < len(r):
print(r[i])
i += 1
# Khoroji: 0, 1, 2, 3, 4
6️⃣ ترکیب با توابع داخلی:
دقت کن ()range با sum، min، max و غیره برای محاسبات سریع عالیه:
numbers = range(1, 6)
print(sum(numbers)) # Khoroji: 15
print(max(numbers)) # Khoroji: 5
print(min(numbers)) # Khoroji: 1
7️⃣ پیمایش معکوس با ()reversed:
به جای step منفی، میتونی از reversed(range()) استفاده کنی:
for num in reversed(range(1, 6)):
print(num)
# Khoroji: 5, 4, 3, 2, 1
8️⃣ دسترسی به ایندکسها:
تابع ()range میتونه برای دسترسی به ایندکسهای خاص تو فهرستها استفاده بشه:
numbers = ["a", "b", "c", "d"]
for i in range(1, len(numbers), 2):
print(numbers[i])
# Khoroji: b, d
💯 @PythonForYou 🧑💻👩💻
🟢 مثالهای کاربردی
1️⃣ چاپ اعداد فرد:
for num in range(1, 10, 2):
print(f"Fard: {num}")
# Khoroji: Fard: 1, Fard: 3, Fard: 5, Fard: 7, Fard: 9
2️⃣ ساخت جدول ضرب:
for i in range(1, 6):
for j in range(1, 6):
print(f"{i} * {j} = {i * j}", end="\t")
print()
# Khoroji:
# 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
# 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
# ...
3️⃣ محاسبه مجموع اعداد:
total = sum(range(1, 101))
print(f"Jame 1 ta 100: {total}")
# Khoroji: Jame 1 ta 100: 5050
4️⃣ چرخش ایندکسها در فهرست:
numbers = ["a", "b", "c", "d"]
k = 2
rotated = [numbers[i % len(numbers)] for i in range(k, k + len(numbers))]
print(rotated) # Khoroji: ["c", "d", "a", "b"]
5️⃣ الگوی ستاره با ()range:
for i in range(5):
print("*" * (i + 1))
# Khoroji:
# *
# **
# ***
# ****
# *****
🔴 نکات حرفهای
🔸 صرفهجویی در حافظه:
برای دادههای بزرگ، مستقیم از ()range تو حلقه استفاده کن، نه list(range()):
for i in range(1000000):
if i == 5:
break
print(i)
🔸 خوانایی کد: از step واضح استفاده کن (مثل range(0, 10, 2) برای اعداد زوج).
🔸 به جای (()range(len، ترجیحاً از ()enumerate استفاده کن.
🔸 ترکیب با ژنراتورها: برای بهینهتر شدن، range() رو با ژنراتورها ترکیب کن:
evens_gen = (x for x in range(0, 10, 2))
print(list(evens_gen)) # Khoroji: [0, 2, 4, 6, 8]
🔸 مدیریت بازههای بزرگ
برای بازههای خیلی بزرگ، از step بزرگتر استفاده کن تا سرعت بیشتر بشه:
for i in range(0, 1000000, 1000):
print(i)
🔸 استفاده با itertools:
برای کارهای پیچیدهتر، از ماژول itertools استفاده کن:
from itertools import islice
numbers = range(100)
print(list(islice(numbers, 5))) # Khoroji: [0, 1, 2, 3, 4]
💯 @PythonForYou 🧑💻👩💻
✅ 1️⃣ شمارش تعداد اعداد مثبت و منفی
سؤال:
الگوریتمی بنویسید که ابتدا عدد n را از ورودی دریافت کند. سپس n عدد دیگر را نیز از ورودی خوانده، تعداد اعداد مثبت و تعداد اعداد منفی را در بین آنها مشخص کرده و در خروجی نمایش دهد.
# دریافت تعداد اعدادی که کاربر وارد میکند
n = int(input("تعداد اعداد را وارد کن: "))
# تعریف شمارنده برای اعداد مثبت
positive_count = 0
# تعریف شمارنده برای اعداد منفی
negative_count = 0
# حلقه برای گرفتن n عدد و بررسی مثبت یا منفی بودن آنها
for i in range(n):
# دریافت عدد از کاربر
num = int(input("عدد را وارد کن: "))
# اگر عدد مثبت بود، شمارنده مثبتها افزایش یابد
if num > 0:
positive_count += 1
# اگر عدد منفی بود، شمارنده منفیها افزایش یابد
elif num < 0:
negative_count += 1
# نمایش تعداد اعداد مثبت
print("تعداد اعداد مثبت:", positive_count)
# نمایش تعداد اعداد منفی
print("تعداد اعداد منفی:", negative_count)
⬟〰️⬟〰️⬟〰️⬟〰️⬟
✅ 2️⃣ بیشترین و کمترین نمره
سؤال:
الگوریتمی بنویسید که ابتدا تعداد دانشجویان را از ورودی دریافت کند. سپس نمرات آنها را گرفته، بیشترین و کمترین نمره را پیدا کرده و در خروجی نمایش دهد.
# دریافت تعداد دانشجویان
n = int(input("تعداد دانشجویان: "))
# دریافت اولین نمره
first_score = int(input("نمره 1 را وارد کن: "))
# فرض میکنیم اولین نمره، بیشترین و کمترین نمره است
max_score = first_score
min_score = first_score
# شروع حلقه برای دریافت نمرات باقیمانده
for i in range(n - 1):
# دریافت نمره جدید
score = int(input("نمره بعدی را وارد کن: "))
# اگر نمره جدید بیشتر بود، بهروزرسانی max
if score > max_score:
max_score = score
# اگر نمره جدید کمتر بود، بهروزرسانی min
if score < min_score:
min_score = score
# نمایش بیشترین نمره
print("بیشترین نمره:", max_score)
# نمایش کمترین نمره
print("کمترین نمره:", min_score)
⬟〰️⬟〰️⬟〰️⬟〰️⬟
✅ 3️⃣ شمارش تکرار یک عدد خاص
سؤال:
الگوریتمی بنویسید که ابتدا دو عدد x و n را دریافت کند. سپس n عدد دیگر را نیز گرفته، تعداد دفعات تکرار عدد x در بین آنها را در خروجی نمایش دهد.
# دریافت عدد خاص x
x = int(input("عدد موردنظر x را وارد کن: "))
# دریافت تعداد اعدادی که وارد میشوند
n = int(input("تعداد اعداد را وارد کن: "))
# شمارنده برای تعداد تکرار x
count = 0
# حلقه برای دریافت و بررسی اعداد
for i in range(n):
# دریافت عدد
num = int(input("عدد را وارد کن: "))
# اگر برابر x بود، شمارنده را زیاد کن
if num == x:
count += 1
# نمایش تعداد تکرار x
print("تعداد تکرار عدد", x, "برابر است با:", count)
⬟〰️⬟〰️⬟〰️⬟〰️⬟
✅ 4️⃣ نمایش مقسومعلیههای یک عدد
سؤال:
الگوریتمی بنویسید که عددی صحیح و مثبت را از ورودی گرفته، سپس تمام مقسومعلیههای آن عدد را نمایش دهد.
# دریافت عدد مثبت از کاربر
n = int(input("عدد مثبت را وارد کن: "))
# بررسی همه عددها از 1 تا n
for i in range(1, n + 1):
# اگر n بر i بخشپذیر بود، یعنی i مقسومعلیه n است
if n % i == 0:
# نمایش مقسومعلیه
print(i)
💯 @PythonForYou 🧑💻👩💻
✅ 5️⃣ نمایش الگوی عددی
سؤال:
الگوریتمی بنویسید که خروجی زیر را نمایش دهد:
1
22
333
4444
55555
# حلقه برای عددهای 1 تا 5
for i in range(1, 6):
# تعریف رشته خالی برای ساخت خط مورد نظر
line = ""
# تکرار عدد i به تعداد i بار
for j in range(i):
line += str(i)
# نمایش خط ساختهشده
print(line)
⬟〰️⬟〰️⬟〰️⬟〰️⬟
✅ 6️⃣ تشخیص اول بودن عدد
سؤال:
الگوریتمی بنویسید که یک عدد صحیح و مثبت را از ورودی گرفته، سپس بررسی کند آیا آن عدد اول است یا خیر.
(✅ عددی اول است که فقط دو مقسومعلیه داشته باشد: ۱ و خودش.)
# دریافت عدد مثبت
n = int(input("عدد مثبت را وارد کن: "))
# شمارنده مقسومعلیهها
divisor_count = 0
# بررسی تمام عددها از 1 تا n
for i in range(1, n + 1):
# اگر n بر i بخشپذیر بود، شمارنده را زیاد کن
if n % i == 0:
divisor_count += 1
# اگر دقیقاً دو مقسومعلیه داشت (1 و خودش)، عدد اول است
if divisor_count == 2:
print("عدد اول است")
# در غیر این صورت عدد اول نیست
else:
print("عدد اول نیست")
⬟〰️⬟〰️⬟〰️⬟〰️⬟
✅ 7️⃣ نمایش تمام اعداد اول کوچکتر از n
سؤال:
الگوریتمی بنویسید که یک عدد صحیح و مثبت n را گرفته، سپس تمام اعداد اول کوچکتر از آن را در خروجی چاپ کند.
# دریافت عدد مثبت n
n = int(input("عدد مثبت را وارد کن: "))
# بررسی عددهای 2 تا n-1
for num in range(2, n):
# شمارنده مقسومعلیههای عدد جاری
count = 0
# بررسی مقسومعلیههای عدد جاری
for i in range(1, num + 1):
if num % i == 0:
count += 1
# اگر فقط 2 مقسومعلیه داشت، عدد اول است
if count == 2:
print(num)
💯 @PythonForYou 🧑💻👩💻
📝 حقوق متخصصان هوش مصنوعی چقدر است؟
چطور ممکن است یک شغل آیندهدار، زندگی مالی افراد را زیرورو کند؟ دنیای تازهای در انتظار کسانی است که به دنیای هوش مصنوعی قدم میگذارند.
صدای کوبیدن سرها بر روی میزها را میشنوید؟ این صدای کارمندانی است که به انتخاب رشتهی خود در دانشگاه افسوس میخورند زیرا بهجای علوم کامپیوتر، سراغ رشتههایی مثل زبان انگلیسی یا روانشناسی رفتهاند. درحالی که رقابت استخدام در صنعت فناوری بالا گرفته است و مهندسان هوش مصنوعی خودشان شرایط کاری و حقوقشان را تعیین میکنند.
حقوق در حوزهی فناوری از عددهای چشمگیر تا گاهی غیرقابلباور متغیر است. طبق دادههای پروندههای فدرال، کارکنان فنی در OpenAI میتوانند تا سالانه ۵۳۰٬۰۰۰ دلار دریافت کنند. در آنتروپیک نیز مهندسان تحقیقاتی تا ۶۹۰٬۰۰۰ دلار دستمزد میگیرند. حتی مهندسان نرمافزار در شرکتهای یونیکورن عادی (شرکتهای استارتاپی با ارزش حداقل یک میلیارد دلار) بهطور معمول سالانه ۲۵۰٬۰۰۰ دلار درآمد دارند.
💯 @PythonForYou 🧑💻👩💻
✨ نمونه سوالات جالب با پایتون
1️⃣ چاپ چارچوب مستطیل ستارهای (مستطیل توخالی)
width = 10
height = 4
row = 1
while row <= height:
if row == 1 or row == height:
print("* " * width)
else:
print("* " + " " * (width+2) + "*")
row += 1
🔸 خروجی:
* * * * * * * * * *
* *
* *
* * * * * * * * * *
💯 @PythonForYou 🧑💻👩💻