تبدیل بایت به واحد های دیگر سایز دیتا :
def format_bytes(bytes, decimals=2):
if bytes is None: return "Incalculable"
if bytes < 1: return "0 B"
i = 0
while bytes >= 1024:
bytes /= 1024
i += 1
units = ["B", "KB", "MB", "GB", "TB", "PB"]
dm = decimals if bytes % 1 != 0 else 0
return f"{bytes:.{dm}f} {units[i]}"
❤1
خطا ها در زبان پایتون
در زبان پایتون، خطاها به دو دسته تقسیم میشوند: خطاهای معمولی (Exceptions) و خطاهای زمان اجرا (Runtime Errors). اینجا چند خطا اصلی همراه با معانیشان آمده است:
1. خطای (SyntaxError): زمانی رخ میدهد که کد نوشته شده با قواعد زبان پایتون مغایرت داشته باشد.
2. خطای فاصله گذاری (IndentationError): وقتی فاصلهگذاری در کد ناقص یا نادرست باشد.
3. خطای (NameError): وقتی یک نام متغیر یا فراخوانی وجود نداشته باشد.
4. خطای (TypeError): وقتی عملیاتی روی نوع اشیاء نامناسب باشد.
5. خطای (IndexError): وقتی شاخصی برای دسترسی به یک عنصر در یک لیست یا رشته وجود نداشته باشد.
6. خطای (ValueError): زمانی اتفاق میافتد که یک عملیات با یک مقدار نامناسب انجام شود.
7. خطای (KeyError): وقتی یک کلید در یک دیکشنری وجود نداشته باشد.
8. خطای (FileNotFoundError): وقتی یک پرونده مورد نظر برای عملیات فایل مورد نظر پیدا نشود.
9. خطای (ModuleNotFoundError): وقتی یک ماژولی که قرار استفاده شود پیدا نشود.
10. خطای (ZeroDivisionError): وقتی تلاش برای تقسیم عددی بر صفر انجام شود.
در زبان پایتون، خطاها به دو دسته تقسیم میشوند: خطاهای معمولی (Exceptions) و خطاهای زمان اجرا (Runtime Errors). اینجا چند خطا اصلی همراه با معانیشان آمده است:
1. خطای (SyntaxError): زمانی رخ میدهد که کد نوشته شده با قواعد زبان پایتون مغایرت داشته باشد.
2. خطای فاصله گذاری (IndentationError): وقتی فاصلهگذاری در کد ناقص یا نادرست باشد.
3. خطای (NameError): وقتی یک نام متغیر یا فراخوانی وجود نداشته باشد.
4. خطای (TypeError): وقتی عملیاتی روی نوع اشیاء نامناسب باشد.
5. خطای (IndexError): وقتی شاخصی برای دسترسی به یک عنصر در یک لیست یا رشته وجود نداشته باشد.
6. خطای (ValueError): زمانی اتفاق میافتد که یک عملیات با یک مقدار نامناسب انجام شود.
7. خطای (KeyError): وقتی یک کلید در یک دیکشنری وجود نداشته باشد.
8. خطای (FileNotFoundError): وقتی یک پرونده مورد نظر برای عملیات فایل مورد نظر پیدا نشود.
9. خطای (ModuleNotFoundError): وقتی یک ماژولی که قرار استفاده شود پیدا نشود.
10. خطای (ZeroDivisionError): وقتی تلاش برای تقسیم عددی بر صفر انجام شود.
دانستی مخفی درباره پایتون
آیا میدانستید که در پایتون، میتوانید از توابعی استفاده کنید که درون خودشان صدا زده میشوند، به این حالت توابع بازگشتی میگویند (Recursion)!؟ شاید این ویژگی برای بسیاری ناشناخته باشد، اما با استفاده از این روش، میتوانید مسائل پیچیده را به سادگی حل کنید.
یک مثال ساده از توابع بازگشتی، محاسبه فاکتوریل یک عدد است:
در این مثال، تابع factorial خودش را برای مقدارهای کوچکتر از n صدا میزند تا به مقدار نهایی برسد. این نکته کوچک میتواند برای بسیاری از مسائل ریاضی و الگوریتمی، کد شما را بسیار کوتاهتر و کارآمدتر کند.
آیا میدانستید که در پایتون، میتوانید از توابعی استفاده کنید که درون خودشان صدا زده میشوند، به این حالت توابع بازگشتی میگویند (Recursion)!؟ شاید این ویژگی برای بسیاری ناشناخته باشد، اما با استفاده از این روش، میتوانید مسائل پیچیده را به سادگی حل کنید.
یک مثال ساده از توابع بازگشتی، محاسبه فاکتوریل یک عدد است:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
print(factorial(5)) # خروجی: 120
در این مثال، تابع factorial خودش را برای مقدارهای کوچکتر از n صدا میزند تا به مقدار نهایی برسد. این نکته کوچک میتواند برای بسیاری از مسائل ریاضی و الگوریتمی، کد شما را بسیار کوتاهتر و کارآمدتر کند.
آموزش گرفتن اطلاعات از دیتابیس و پردازش آنها با پایتون
در این پارت، به بررسی نحوه گرفتن اطلاعات از دیتابیس و پردازش آنها با استفاده از پایتون میپردازیم. برای این کار از کتابخانههای
۱. نصب و راهاندازی
برای استفاده از دیتابیس SQLite و کتابخانه Pandas، ابتدا باید اطمینان حاصل کنید که این کتابخانهها نصب شدهاند. برای نصب، از دستورهای زیر استفاده کنید:
۲. اتصال به دیتابیس SQLite
ابتدا باید به دیتابیس SQLite متصل شویم. برای این کار از کتابخانه
توضیح: در اینجا به یک دیتابیس به نام
۳. ایجاد جدول و وارد کردن دادهها
در این مرحله، یک جدول نمونه ایجاد کرده و تعدادی داده به آن وارد میکنیم.
توضیح: در اینجا جدولی به نام
۴. خواندن دادهها از دیتابیس
برای خواندن دادهها از دیتابیس، از دستور
توضیح: در اینجا تمام دادههای جدول
خروجی:
۵. پردازش دادهها با Pandas
برای پردازش دادهها از کتابخانه
توضیح: در اینجا دادههای خوانده شده از دیتابیس را به یک DataFrame از pandas تبدیل کرده و چاپ میکنیم.
خروجی:
۶. انجام عملیات پردازش
با استفاده از DataFrame میتوانیم عملیات پردازش مختلفی را انجام دهیم. به عنوان مثال، محاسبه میانگین سن کاربران:
توضیح: در اینجا میانگین سن کاربران را محاسبه و چاپ میکنیم.
خروجی:
۷. بستن اتصال به دیتابیس
پس از اتمام کار، باید اتصال به دیتابیس را ببندیم.
در این پارت، به بررسی نحوه گرفتن اطلاعات از دیتابیس و پردازش آنها با استفاده از پایتون میپردازیم. برای این کار از کتابخانههای
sqlite3
و pandas
استفاده خواهیم کرد.۱. نصب و راهاندازی
برای استفاده از دیتابیس SQLite و کتابخانه Pandas، ابتدا باید اطمینان حاصل کنید که این کتابخانهها نصب شدهاند. برای نصب، از دستورهای زیر استفاده کنید:
pip install pandas
۲. اتصال به دیتابیس SQLite
ابتدا باید به دیتابیس SQLite متصل شویم. برای این کار از کتابخانه
sqlite3
استفاده میکنیم.import sqlite3
# اتصال به دیتابیس
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
توضیح: در اینجا به یک دیتابیس به نام
example.db
متصل میشویم. اگر این فایل وجود نداشته باشد، به طور خودکار ایجاد خواهد شد.۳. ایجاد جدول و وارد کردن دادهها
در این مرحله، یک جدول نمونه ایجاد کرده و تعدادی داده به آن وارد میکنیم.
# ایجاد جدول
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# وارد کردن دادهها
cursor.execute("INSERT INTO users (name, age) VALUES ('Ali', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Sara', 30)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Reza', 22)")
# ذخیره تغییرات
conn.commit()
توضیح: در اینجا جدولی به نام
users
با ستونهای id
، name
و age
ایجاد کردهایم و تعدادی داده به آن اضافه کردهایم.۴. خواندن دادهها از دیتابیس
برای خواندن دادهها از دیتابیس، از دستور
SELECT
استفاده میکنیم.# خواندن دادهها
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
توضیح: در اینجا تمام دادههای جدول
users
را انتخاب کرده و چاپ میکنیم.خروجی:
(1, 'Ali', 25)
(2, 'Sara', 30)
(3, 'Reza', 22)
۵. پردازش دادهها با Pandas
برای پردازش دادهها از کتابخانه
pandas
استفاده میکنیم. ابتدا دادهها را به یک DataFrame تبدیل میکنیم.import pandas as pd
# تبدیل دادهها به DataFrame
df = pd.DataFrame(rows, columns=['id', 'name', 'age'])
print(df)
توضیح: در اینجا دادههای خوانده شده از دیتابیس را به یک DataFrame از pandas تبدیل کرده و چاپ میکنیم.
خروجی:
id name age
0 1 Ali 25
1 2 Sara 30
2 3 Reza 22
۶. انجام عملیات پردازش
با استفاده از DataFrame میتوانیم عملیات پردازش مختلفی را انجام دهیم. به عنوان مثال، محاسبه میانگین سن کاربران:
# محاسبه میانگین سن
average_age = df['age'].mean()
print(f"Average age: {average_age}")
توضیح: در اینجا میانگین سن کاربران را محاسبه و چاپ میکنیم.
خروجی:
Average age: 25.666666666666668
۷. بستن اتصال به دیتابیس
پس از اتمام کار، باید اتصال به دیتابیس را ببندیم.
✅ شورت کات های کلیدی برای VSCode
▫️جایگزینی ⬅️ Ctrl+H
▫️باز کردن سریع فایل ⬅️ Ctrl+P
▫️بستن پنجره ⬅️ Ctrl+shift+F
▫️تنظیمات ⬅️ , + Ctrl
▫️جستجو ⬅️ Ctrl+F
▫️نمایش همه سمبل ها ⬅️ Ctrl+T
▫️تغییر نام ⬅️F2
▫️بازگرداندن تغییرات ⬅️ Ctrl+Z
#vscode
➿➿➿➿➿➿➿➿
@programmers_gathering
▫️جایگزینی ⬅️ Ctrl+H
▫️باز کردن سریع فایل ⬅️ Ctrl+P
▫️بستن پنجره ⬅️ Ctrl+shift+F
▫️تنظیمات ⬅️ , + Ctrl
▫️جستجو ⬅️ Ctrl+F
▫️نمایش همه سمبل ها ⬅️ Ctrl+T
▫️تغییر نام ⬅️F2
▫️بازگرداندن تغییرات ⬅️ Ctrl+Z
#vscode
➿➿➿➿➿➿➿➿
@programmers_gathering
❤3
# Fork of https://github.com/sourabhv/FlapPyBird
from itertools import cycle
import random
import sys
import pygame
from pygame.locals import *
FPS = 30
SCREENWIDTH = 288
SCREENHEIGHT = 512
PIPEGAPSIZE = 100 # gap between upper and lower part of pipe
BASEY = SCREENHEIGHT * 0.79
# image, sound and hitmask dicts
IMAGES, SOUNDS, HITMASKS = {}, {}, {}
# list of all possible players (tuple of 3 positions of flap)
PLAYERS_LIST = (
# red box
(
'assets/sprites/redbox-upflap.png',
'assets/sprites/redbox-midflap.png',
'assets/sprites/redbox-downflap.png',
),
# blue box
(
'assets/sprites/bluebox-upflap.png',
'assets/sprites/bluebox-midflap.png',
'assets/sprites/bluebox-downflap.png',
),
# yellow box
(
'assets/sprites/yellowbox-upflap.png',
'assets/sprites/yellowbox-midflap.png',
'assets/sprites/yellowbox-downflap.png',
),
)
# list of backgrounds
BACKGROUNDS_LIST = (
'assets/sprites/background-day.png',
'assets/sprites/background-night.png',
)
# list of pipes
PIPES_LIST = (
'assets/sprites/pipe-green.png',
'assets/sprites/pipe-red.png',
)
try:
xrange
except NameError:
xrange = range
def main():
global SCREEN, FPSCLOCK
pygame.init()
FPSCLOCK = pygame.time.Clock()
# Fullscreen scaled output
SCREEN = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT), pygame.SCALED | pygame.FULLSCREEN)
pygame.display.set_caption('Flappy Box')
# numbers sprites for score display
IMAGES['numbers'] = (pygame.image.load('assets/sprites/0.png').convert_alpha(), pygame.image.load('assets/sprites/1.png').convert_alpha(), pygame.image.load('assets/sprites/2.png').convert_alpha(), pygame.image.load('assets/sprites/3.png').convert_alpha(), pygame.image.load('assets/sprites/4.png').convert_alpha(), pygame.image.load('assets/sprites/5.png').convert_alpha(), pygame.image.load('assets/sprites/6.png').convert_alpha(), pygame.image.load('assets/sprites/7.png').convert_alpha(), pygame.image.load('assets/sprites/8.png').convert_alpha(), pygame.image.load('assets/sprites/9.png').convert_alpha())
# game over sprite
IMAGES['gameover'] = pygame.image.load('assets/sprites/gameover.png').convert_alpha()
# message sprite for welcome screen
IMAGES['message'] = pygame.image.load('assets/sprites/message.png').convert_alpha()
# base (ground) sprite
IMAGES['base'] = pygame.image.load('assets/sprites/base.png').convert_alpha()
# sounds
soundExt = '.ogg'
SOUNDS['die'] = pygame.mixer.Sound('assets/audio/die' + soundExt)
SOUNDS['hit'] = pygame.mixer.Sound('assets/audio/hit' + soundExt)
SOUNDS['point'] = pygame.mixer.Sound('assets/audio/point' + soundExt)
SOUNDS['wing'] = pygame.mixer.Sound('assets/audio/wing' + soundExt)
while True:
# select random background sprites
randBg = random.randint(0, len(BACKGROUNDS_LIST) - 1)
IMAGES['background'] = pygame.image.load(BACKGROUNDS_LIST[randBg]).convert()
# select random player sprites
randPlayer = random.randint(0, len(PLAYERS_LIST) - 1)
IMAGES['player'] = (
pygame.image.load(PLAYERS_LIST[randPlayer][0]).convert_alpha(),
pygame.image.load(PLAYERS_LIST[randPlayer][1]).convert_alpha(),
pygame.image.load(PLAYERS_LIST[randPlayer][2]).convert_alpha(),
)
# select random pipe sprites
pipeindex = random.randint(0, len(PIPES_LIST) - 1)
IMAGES['pipe'] = (
pygame.transform.flip(pygame.image.load(PIPES_LIST[pipeindex]).convert_alpha(), False, True),
pygame.image.load(PIPES_LIST[pipeindex]).convert_alpha(),
)
# hismask for pipes
HITMASKS['pipe'] = (
getHitmask(IMAGES['pipe'][0]),
getHitmask(IMAGES['pipe'][1]),
)
# hitmask for player
HITMASKS['player'] = (
getHitmask(IMAGES['player'][0]),
getHitmask(IMAGES['player'][1]),
getHitmask(IMAGES['player'][2]),
)
GitHub
GitHub - sourabhv/FlapPyBird: A Flappy Bird Clone using python-pygame
A Flappy Bird Clone using python-pygame. Contribute to sourabhv/FlapPyBird development by creating an account on GitHub.
movementInfo = showWelcomeAnimation()
crashInfo = mainGame(movementInfo)
showGameOverScreen(crashInfo)
def showWelcomeAnimation():
"""Shows welcome screen animation of flappy box"""
# index of player to blit on screen
playerIndex = 0
playerIndexGen = cycle([0, 1, 2, 1])
# iterator used to change playerIndex after every 5th iteration
loopIter = 0
playerx = int(SCREENWIDTH * 0.2)
playery = int((SCREENHEIGHT - IMAGES['player'][0].get_height()) / 2)
messagex = int((SCREENWIDTH - IMAGES['message'].get_width()) / 2)
messagey = int(SCREENHEIGHT * 0.12)
basex = 0
# amount by which base can maximum shift to left
baseShift = IMAGES['base'].get_width() - IMAGES['background'].get_width()
# player shm for up-down motion on welcome screen
playerShmVals = {'val': 0, 'dir': 1}
while True:
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
if event.type == KEYDOWN and (event.key == K_SPACE or event.key == K_UP) or event.type == MOUSEBUTTONDOWN:
# make first flap sound and return values for mainGame
SOUNDS['wing'].play()
return {
'playery': playery + playerShmVals['val'],
'basex': basex,
'playerIndexGen': playerIndexGen,
}
# adjust playery, playerIndex, basex
if (loopIter + 1) % 5 == 0:
playerIndex = next(playerIndexGen)
loopIter = (loopIter + 1) % 30
basex = -((-basex + 4) % baseShift)
playerShm(playerShmVals)
# draw sprites
SCREEN.blit(IMAGES['background'], (0, 0))
SCREEN.blit(IMAGES['player'][playerIndex], (playerx, playery + playerShmVals['val']))
SCREEN.blit(IMAGES['message'], (messagex, messagey))
SCREEN.blit(IMAGES['base'], (basex, BASEY))
pygame.display.update()
FPSCLOCK.tick(FPS)
def mainGame(movementInfo):
score = playerIndex = loopIter = 0
playerIndexGen = movementInfo['playerIndexGen']
playerx, playery = int(SCREENWIDTH * 0.2), movementInfo['playery']
basex = movementInfo['basex']
baseShift = IMAGES['base'].get_width() - IMAGES['background'].get_width()
# get 2 new pipes to add to upperPipes lowerPipes list
newPipe1 = getRandomPipe()
newPipe2 = getRandomPipe()
# list of upper pipes
upperPipes = [
{
'x': SCREENWIDTH + 200,
'y': newPipe1[0]['y']
},
{
'x': SCREENWIDTH + 200 + (SCREENWIDTH / 2),
'y': newPipe2[0]['y']
},
]
# list of lowerpipe
lowerPipes = [
{
'x': SCREENWIDTH + 200,
'y': newPipe1[1]['y']
},
{
'x': SCREENWIDTH + 200 + (SCREENWIDTH / 2),
'y': newPipe2[1]['y']
},
]
pipeVelX = -4
# player velocity, max velocity, downward accleration, accleration on flap
playerVelY = -9 # player's velocity along Y, default same as playerFlapped
playerMaxVelY = 10 # max vel along Y, max descend speed
playerMinVelY = -8 # min vel along Y, max ascend speed
playerAccY = 1 # players downward accleration
playerRot = 45 # player's rotation
playerVelRot = 3 # angular speed
playerRotThr = 20 # rotation threshold
playerFlapAcc = -9 # players speed on flapping
playerFlapped = False # True when player flaps
while True:
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
if event.type == KEYDOWN and (event.key == K_SPACE or event.key == K_UP) or event.type == MOUSEBUTTONDOWN: