چنل پایتون | جنگو | برنامه نویسی وب سایت
421 subscribers
292 photos
141 videos
40 files
208 links
ارتباط با مدیر:

@Amir_123_ka
Download Telegram
# player y shift
if playery + playerHeight < BASEY - 1:
playery += min(playerVelY, BASEY - playery - playerHeight)

# player velocity change
if playerVelY < 15:
playerVelY += playerAccY

# rotate only when it's a pipe crash
if not crashInfo['groundCrash']:
if playerRot > -90:
playerRot -= playerVelRot

# draw sprites
SCREEN.blit(IMAGES['background'], (0, 0))

for uPipe, lPipe in zip(upperPipes, lowerPipes):
SCREEN.blit(IMAGES['pipe'][0], (uPipe['x'], uPipe['y']))
SCREEN.blit(IMAGES['pipe'][1], (lPipe['x'], lPipe['y']))

SCREEN.blit(IMAGES['base'], (basex, BASEY))
showScore(score)

playerSurface = pygame.transform.rotate(IMAGES['player'][1], playerRot)
SCREEN.blit(playerSurface, (playerx, playery))
SCREEN.blit(IMAGES['gameover'], (50, 180))

FPSCLOCK.tick(FPS)
pygame.display.update()


def playerShm(playerShm):
"""oscillates the value of playerShm['val'] between 8 and -8"""
if abs(playerShm['val']) == 8:
playerShm['dir'] *= -1

if playerShm['dir'] == 1:
playerShm['val'] += 1
else:
playerShm['val'] -= 1


def getRandomPipe():
"""returns a randomly generated pipe"""
# y of gap between upper and lower pipe
gapY = random.randrange(0, int(BASEY * 0.6 - PIPEGAPSIZE))
gapY += int(BASEY * 0.2)
pipeHeight = IMAGES['pipe'][0].get_height()
pipeX = SCREENWIDTH + 10

return [
{
'x': pipeX,
'y': gapY - pipeHeight
}, # upper pipe
{
'x': pipeX,
'y': gapY + PIPEGAPSIZE
}, # lower pipe
]


def showScore(score):
"""displays score in center of screen"""
scoreDigits = [int(x) for x in list(str(score))]
totalWidth = 0 # total width of all numbers to be printed

for digit in scoreDigits:
totalWidth += IMAGES['numbers'][digit].get_width()

Xoffset = (SCREENWIDTH - totalWidth) / 2

for digit in scoreDigits:
SCREEN.blit(IMAGES['numbers'][digit], (Xoffset, SCREENHEIGHT * 0.1))
Xoffset += IMAGES['numbers'][digit].get_width()


def checkCrash(player, upperPipes, lowerPipes):
"""returns True if player collders with base or pipes."""
pi = player['index']
player['w'] = IMAGES['player'][0].get_width()
player['h'] = IMAGES['player'][0].get_height()

# if player crashes into ground
if player['y'] + player['h'] >= BASEY - 1:
return [True, True]
else:

playerRect = pygame.Rect(player['x'], player['y'], player['w'], player['h'])
pipeW = IMAGES['pipe'][0].get_width()
pipeH = IMAGES['pipe'][0].get_height()

for uPipe, lPipe in zip(upperPipes, lowerPipes):
# upper and lower pipe rects
uPipeRect = pygame.Rect(uPipe['x'], uPipe['y'], pipeW, pipeH)
lPipeRect = pygame.Rect(lPipe['x'], lPipe['y'], pipeW, pipeH)

# player and upper/lower pipe hitmasks
pHitMask = HITMASKS['player'][pi]
uHitmask = HITMASKS['pipe'][0]
lHitmask = HITMASKS['pipe'][1]

# if player collided with upipe or lpipe
uCollide = pixelCollision(playerRect, uPipeRect, pHitMask, uHitmask)
lCollide = pixelCollision(playerRect, lPipeRect, pHitMask, lHitmask)

if uCollide or lCollide:
return [True, False]

return [False, False]


def pixelCollision(rect1, rect2, hitmask1, hitmask2):
"""Checks if two objects collide and not just their rects"""
rect = rect1.clip(rect2)

if rect.width == 0 or rect.height == 0:
return False

x1, y1 = rect.x - rect1.x, rect.y - rect1.y
x2, y2 = rect.x - rect2.x, rect.y - rect2.y

for x in xrange(rect.width):
for y in xrange(rect.height):
if hitmask1[x1 + x][y1 + y] and hitmask2[x2 + x][y2 + y]:
return True
return False
def getHitmask(image):
"""returns a hitmask using an image's alpha."""
mask = []
for x in xrange(image.get_width()):
mask.append([])
for y in xrange(image.get_height()):
mask[x].append(bool(image.get_at((x, y))[3]))
return mask


if name == 'main':
main()
آیا می‌دانستید؟ 🤓

اولین کامپیوتر مکانیکی قابل برنامه‌ریزی در جهان توسط کنراد تسوزه (Konrad Zuse) ساخته شد و به نام Z1 شناخته می‌شود. 💻 این شاهکار مهندسی در سال 1938 در آلمان ساخته شد و یکی از اولین تلاش‌ها برای ایجاد یک کامپیوتر دیجیتال واقعی بود.

Z1 با استفاده از قطعات مکانیکی پیچیده‌ای که شامل اهرم‌ها و چرخ‌دنده‌ها بود، اطلاعات دو دویی (باینری) را ذخیره و پردازش می‌کرد. 🤖🛠 این کامپیوتر مکانیکی دارای دقت و سرعت کمتری نسبت به کامپیوترهای الکترونیکی امروزی بود، اما گامی بزرگ در جهت توسعه علم کامپیوتر به حساب می‌آید.

از ویژگی‌های جالب Z1 می‌توان به موارد زیر اشاره کرد:
- استفاده از مموری مکانیکی برای ذخیره داده‌ها 🗄🔧
- قابلیت برنامه‌ریزی با استفاده از نوارهای پانچ 📜🎛
- انجام محاسبات منطقی و ریاضی با استفاده از سیستم دو دویی 🔢🤓

Z1 توسط تسوزه در خانه‌اش و با استفاده از منابع محدودی که در دسترس داشت، ساخته شد. این دستگاه نشان‌دهنده نبوغ و پیشگامی تسوزه در حوزه کامپیوتر بود و راه را برای نسل‌های بعدی کامپیوترها هموار کرد. 👨‍🔬🚀

این کامپیوتر خارق‌العاده، اگرچه در جنگ جهانی دوم و بمباران‌ها از بین رفت، اما مدل‌های بازسازی شده آن در موزه‌های مختلفی به نمایش گذاشته شده‌اند تا یادآور یکی از نخستین گام‌ها در دنیای محاسبات باشند. 🏛🔍
چنل پایتون | جنگو | برنامه نویسی وب سایت
https://aparat.com/v/hqb2pk8
دوستان عزیز حتما دنبال کنید عالیه میتونه کمک خوبی در مسیر یادگیری پایتون باشه
نظرتون درباره کانال؟
Anonymous Poll
70%
خوبه
30%
بده
ساخت کلاس و متدها در پایتون

ابتدا یک کلاس ساده به نام Car تعریف می‌کنیم و چند متد برای آن ایجاد می‌کنیم.

class Car:
    def __init__(self, brand, model, year):
        self.brand = brand
        self.model = model
        self.year = year

    def start_engine(self):
        print(f"The engine of the {self.brand} {self.model} is now running.")

    def stop_engine(self):
        print(f"The engine of the {self.brand} {self.model} has been turned off.")

    def honk(self):
        print("Beep beep!")

    def display_info(self):
        print(f"Car Info: {self.brand} {self.model}, Year: {self.year}")

توضیحشinitit__ یک متد ویژه است که به عنوان سازنده (constructor) کلاس عمل می‌کند و هنگام ایجاد یک شیء از کلاس فراخوانی می‌شود. این متد برای مقداردهی اولیه به متغیرهای نمونه (instance variables) استفاده می‌شود.
- start_engine یک متد معمولی است که پیام شروع به کار موتور را چاپ می‌کند.
- stop_engine یک متد معمولی است که پیام خاموش شدن موتور را چاپ می‌کند.
- honk یک متد معمولی است که صدای بوق را چاپ می‌کند.
- display_info یک متد معمولی است که اطلاعات خودرو را چاپ می‌کند.

استفاده از کلاس و متدها

حال می‌توانیم از کلاس Car استفاده کنیم و متدهای آن را فراخوانی کنیم.

if __name__ == "__main__":
    my_car = Car("Toyota", "Corolla", 2020)
    my_car.start_engine()  # خروجی: The engine of the Toyota Corolla is now running.
    my_car.honk()          # خروجی: Beep beep!
    my_car.display_info()  # خروجی: Car Info: Toyota Corolla, Year: 2020
    my_car.stop_engine()   # خروجی: The engine of the Toyota Corolla has been turned off.

توضیحش

- با استفاده از Car("Toyota", "Corolla", 2020) یک شیء جدید از کلاس Car با نام my_car ایجاد می‌کنیم.
- سپس متدهای مختلف را با استفاده از my_car فراخوانی می‌کنیم.

نکات مهم

1. متدهای یک کلاس همیشه باید حداقل یک پارامتر داشته باشند که به طور معمول self نامیده می‌شود. این پارامتر به شیء فعلی اشاره دارد.
2. شما می‌توانید متدهای کلاس را برای انجام هر عملیاتی که می‌خواهید تعریف کنید. این متدها می‌توانند پارامترهای اضافی داشته باشند و هر عملیاتی را که نیاز دارید انجام دهند.

امیدوارم این آموزش به شما کمک کرده باشد که بفهمید چطور می‌توانید متدهای خود را در پایتون تعریف کنید
🔤 آموزش کامل متدهای کار با رشته‌ها در پایتون 🔤

سلام دوستان! امروز قصد دارم درباره‌ی متدهای مختلف کار با رشته‌ها در زبان برنامه‌نویسی پایتون صحبت کنم. رشته‌ها یکی از پرکاربردترین نوع داده‌ها در پایتون هستند و آشنایی با متدهای آن‌ها می‌تواند کدنویسی را بسیار ساده‌تر کند. بیایید شروع کنیم! 🚀

1. lower()
این متد تمام حروف رشته را به حروف کوچک تبدیل می‌کند.

text = "Hello, WORLD!"
print(text.lower())  # خروجی: hello, world!

2. upper()
این متد تمام حروف رشته را به حروف بزرگ تبدیل می‌کند.

text = "Hello, world!"
print(text.upper())  # خروجی: HELLO, WORLD!

3. capitalize()
این متد حرف اول رشته را به حروف بزرگ و بقیه را به حروف کوچک تبدیل می‌کند.

text = "hello, world!"
print(text.capitalize())  # خروجی: Hello, world!

4. title()
این متد حرف اول هر کلمه در رشته را به حروف بزرگ تبدیل می‌کند.

text = "hello, world!"
print(text.title())  # خروجی: Hello, World!

5. strip()
این متد فاصله‌های خالی در ابتدای و انتهای رشته را حذف می‌کند.

text = "  hello, world!  "
print(text.strip())  # خروجی: hello, world!

6. startswith()
این متد بررسی می‌کند که آیا رشته با زیررشته‌ی خاصی شروع می‌شود یا نه.

text = "hello, world!"
print(text.startswith("hello"))  # خروجی: True

7. endswith()
این متد بررسی می‌کند که آیا رشته با زیررشته‌ی خاصی پایان می‌یابد یا نه.

text = "hello, world!"
print(text.endswith("world!"))  # خروجی: True

8. replace()
این متد یک زیررشته را با زیررشته‌ای دیگر در رشته جایگزین می‌کند.

text = "hello, world!"
print(text.replace("world", "Python"))  # خروجی: hello, Python!

9. split()
این متد رشته را بر اساس یک جداکننده خاص جدا کرده و به لیست تبدیل می‌کند.

text = "one, two, three"
print(text.split(", "))  # خروجی: ['one', 'two', 'three']

10. join()
این متد عناصر یک لیست را با استفاده از یک جداکننده خاص به یکدیگر متصل می‌کند.

items = ['one', 'two', 'three']
print(", ".join(items))  # خروجی: one, two, three

11. find()
این متد اولین موقعیت یک زیررشته را در رشته پیدا می‌کند. اگر زیررشته وجود نداشته باشد، -1 برمی‌گرداند.

text = "hello, world!"
print(text.find("world"))  # خروجی: 7

12. index()
این متد اولین موقعیت یک زیررشته را در رشته پیدا می‌کند. اگر زیررشته وجود نداشته باشد، خطا برمی‌گرداند.

text = "hello, world!"
print(text.index("world"))  # خروجی: 7

13. count()
این متد تعداد تکرار یک زیررشته در رشته را شمارش می‌کند.

text = "hello, world! hello again!"
print(text.count("hello"))  # خروجی: 2

14. isnumeric()
این متد بررسی می‌کند که آیا همه کاراکترهای رشته اعداد هستند یا نه.

text = "12345"
print(text.isnumeric())  # خروجی: True

15. zfill()
این متد طول رشته را به طول مشخصی می‌رساند و با اضافه کردن صفر از سمت چپ، رشته را پر می‌کند.

text = "42"
print(text.zfill(5))  # خروجی: 00042

16. swapcase()
این متد حروف بزرگ را به کوچک و حروف کوچک را به بزرگ تبدیل می‌کند.

text = "Hello, World!"
print(text.swapcase())  # خروجی: hELLO, wORLD!

17. format()
این متد رشته‌ها را با استفاده از جایگزینی قالب‌بندی می‌کند.

name = "Alice"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
# خروجی: My name is Alice and I am 30 years old.

18. rjust()
این متد رشته را به طول مشخصی می‌رساند و از سمت چپ با کاراکتر خاصی پر می‌کند.

text = "42"
print(text.rjust(5, '0'))  # خروجی: 00042

19. ljust()
این متد رشته را به طول مشخصی می‌رساند و از سمت راست با کاراکتر خاصی پر می‌کند.

text = "42"
print(text.ljust(5, '0'))  # خروجی: 42000

این هم از متدهای کار با رشته‌ها در پایتون! امیدوارم این آموزش براتون مفید باشه و ازش استفاده کنید.
پروژه ۱ - مدیریت مخاطبین 📞📝

در این پارت، یک پروژه عملی برای مدیریت مخاطبین را پیاده‌سازی می‌کنیم. هدف این پروژه آشنایی با مفاهیم پایه‌ای مانند کار با فایل‌ها، دیکشنری‌ها، و توابع است.

۱. تعریف ساختار پروژه
این پروژه شامل قابلیت‌های زیر خواهد بود:
- اضافه کردن مخاطب جدید
- نمایش لیست مخاطبین
- جستجو در مخاطبین
- حذف مخاطب
- ذخیره و بازیابی مخاطبین در فایل

۲. ایجاد فایل اصلی پروژه
ابتدا فایل اصلی پروژه را ایجاد کنید و ساختار اولیه آن را پیاده‌سازی کنید.
import json

# مسیر فایل ذخیره مخاطبین
CONTACTS_FILE = 'contacts.json'

def load_contacts():
"""بارگذاری مخاطبین از فایل"""
try:
with open(CONTACTS_FILE, 'r') as file:
return json.load(file)
except FileNotFoundError:
return []

def save_contacts(contacts):
"""ذخیره مخاطبین در فایل"""
with open(CONTACTS_FILE, 'w') as file:
json.dump(contacts, file, indent=4)

def add_contact(contacts):
"""اضافه کردن مخاطب جدید"""
name = input("نام: ")
phone = input("شماره تلفن: ")
email = input("ایمیل: ")

contact = {
'name': name,
'phone': phone,
'email': email
}
contacts.append(contact)
print("مخاطب جدید اضافه شد.")

def display_contacts(contacts):
"""نمایش لیست مخاطبین"""
for idx, contact in enumerate(contacts, start=1):
print(f"{idx}. {contact['name']} - {contact['phone']} - {contact['email']}")

def search_contacts(contacts):
"""جستجو در مخاطبین"""
search_name = input("نام برای جستجو: ")
found_contacts = [c for c in contacts if search_name.lower() in c['name'].lower()]

if found_contacts:
for contact in found_contacts:
print(f"{contact['name']} - {contact['phone']} - {contact['email']}")
else:
print("مخاطبی پیدا نشد.")

def delete_contact(contacts):
"""حذف مخاطب"""
display_contacts(contacts)
idx = int(input("شماره مخاطب برای حذف: ")) - 1

if 0 <= idx < len(contacts):
deleted_contact = contacts.pop(idx)
print(f"مخاطب {deleted_contact['name']} حذف شد.")
else:
print("شماره نامعتبر است.")

def main():
contacts = load_contacts()

while True:
print("\nمدیریت مخاطبین:")
print("1. اضافه کردن مخاطب")
print("2. نمایش لیست مخاطبین")
print("3. جستجو در مخاطبین")
print("4. حذف مخاطب")
print("5. خروج")

choice = input("انتخاب شما: ")

if choice == '1':
add_contact(contacts)
elif choice == '2':
display_contacts(contacts)
elif choice == '3':
search_contacts(contacts)
elif choice == '4':
delete_contact(contacts)
elif choice == '5':
save_contacts(contacts)
break
else:
print("انتخاب نامعتبر است.")

if __name__ == '__main__':
main()
۳. توضیحات هر تابع
- تابع load_contacts: مخاطبین را از فایل JSON بارگذاری می‌کند. اگر فایل موجود نباشد، یک لیست خالی برمی‌گرداند.
- تابع save_contacts: مخاطبین را در فایل JSON ذخیره می‌کند.
- تابع add_contact: اطلاعات یک مخاطب جدید را از کاربر می‌گیرد و به لیست مخاطبین اضافه می‌کند.
- تابع display_contacts: لیست مخاطبین را با استفاده از یک حلقه چاپ می‌کند.
- تابع search_contacts: نام وارد شده را جستجو کرده و مخاطبین مرتبط را نمایش می‌دهد.
- تابع delete_contact: مخاطب مورد نظر را بر اساس شماره انتخاب شده از لیست حذف می‌کند.
- تابع main: حلقه اصلی برنامه که منوی اصلی را نمایش داده و انتخاب کاربر را مدیریت می‌کند.

۴. نکات مهم
- مدیریت فایل: برای ذخیره و بارگذاری مخاطبین از فایل JSON استفاده شده است تا بتوانیم داده‌ها را بین اجراهای مختلف برنامه حفظ کنیم.
- پیشگیری از خطا: در حذف مخاطب، اطمینان حاصل می‌شود که شماره وارد شده معتبر است.
- تعامل با کاربر: اطلاعات مخاطب را از ورودی کاربر گرفته و نتیجه عملیات را به کاربر نمایش می‌دهد.
👍5
آموزش ساخت QR کد با پایتون 🖼️

سلام دوستان! امروز می‌خواهیم در مورد چگونگی ایجاد QR کد با استفاده از پایتون صحبت کنیم. QR کد‌ها می‌توانند برای بسیاری از موارد مفید باشند، مانند اشتراک‌گذاری لینک‌ها، اطلاعات تماس و بسیاری موارد دیگر. بیایید با هم یاد بگیریم! 😊

1. نصب کتابخانه qrcode 📦

ابتدا باید کتابخانه qrcode را نصب کنیم. این کتابخانه به ما امکان می‌دهد که به راحتی QR کد ایجاد کنیم. برای نصب آن از pip استفاده کنید:
pip install qrcode[pil]
2. وارد کردن کتابخانه qrcode 📚

پس از نصب، کتابخانه qrcode را وارد می‌کنیم:
import qrcode
3. ایجاد یک QR کد ساده 🎨

حالا می‌خواهیم یک QR کد ساده ایجاد کنیم. در این مثال، ما یک لینک به وب‌سایت را در QR کد قرار می‌دهیم:

# ایجاد یک QR کد ساده
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# داده‌ای که می‌خواهید در QR کد قرار دهید
data = "https://www.example.com"

# اضافه کردن داده به QR کد
qr.add_data(data)
qr.make(fit=True)

# ساخت تصویر QR کد
img = qr.make_image(fill_color="black", back_color="white")

# ذخیره تصویر QR کد
img.save("qrcode.png")
4. تنظیمات بیشتر برای QR کد 🔧

می‌توانید تنظیمات بیشتری برای QR کد اعمال کنید، مانند تغییر رنگ‌ها، اندازه و سطح تصحیح خطا. برای مثال:
# ایجاد یک QR کد با تنظیمات بیشتر
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H, # سطح تصحیح خطا: H (بالا)
box_size=10,
border=4,
)

data = "https://www.example.com"
qr.add_data(data)
qr.make(fit=True)

# ساخت تصویر QR کد با رنگ‌های سفارشی
img = qr.make_image(fill_color="blue", back_color="yellow")

# ذخیره تصویر QR کد
img.save("custom_qrcode.png")
5. استفاده از کتابخانه pillow برای نمایش QR کد 🖼️

برای نمایش تصویر QR کد در برنامه پایتون، می‌توانیم از کتابخانه Pillow استفاده کنیم. اگر هنوز نصب نکرده‌اید، آن را نصب کنید:
pip install Pillow
سپس از آن برای نمایش تصویر استفاده کنید:
from PIL import Image

# باز کردن و نمایش تصویر QR کد
img = Image.open("qrcode.png")
img.show()
6. جمع‌بندی 📜

با استفاده از کتابخانه qrcode در پایتون، می‌توانید به راحتی QR کد‌های سفارشی ایجاد کنید. این QR کد‌ها می‌توانند برای کاربردهای مختلفی مانند به اشتراک‌گذاری لینک‌ها، اطلاعات تماس، و حتی پرداخت‌ها استفاده شوند. امیدوارم این آموزش برای شما مفید باشد و بتوانید از آن در پروژه‌های خود استفاده کنید.
3