پایتون فارسی(PyCore)
228 subscribers
205 photos
105 videos
57 files
243 links
🐉پایتون فارسی
🚀آموزش و اخبار دنیای تکنولوژی
Download Telegram
Media is too big
VIEW IN TELEGRAM
الگوریتم و فلوچارت -فصل دوم : فلوچارت-سجاد ریاحی

#part2

@persians_python
@persians_python
@persians_python
Forwarded from CodeCrafters (mahyar)
سلام🥸همونطور که از پست قبلی متوجه شدیم با زبان های بسیاری میتونیم بلاکچین رو طراحی کنیم و خب تو این پست قراره بلاکچینی رو برای زنجیره تامینی با استفاده از پایتون پیاده کنیم
زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند و... هست.
بلاکچینی که قراره طراحی کنیم برای پیگیری محصولات غذایی از مزرعه تا فروشگاه برای اطمینان از کیفیت و اصالت کالا هستش

اولین چیزی که نیاز داریم یه کلاس تراکنش هست که یه سری مشخصات رو مثل فرستنده , گیرنده , محصول و مقدار اون محصول رو دریافت کنیم


import hashlib
import time

class Transaction:
def __init__(self, sender, recipient, product, quantity):
self.sender = sender
self.recipient = recipient
self.product = product
self.quantity = quantity

def __str__(self):
return f"Transaction(sender: {self.sender}, recipient: {self.recipient}, product: {self.product}, quantity: {self.quantity})"

حالا که تراکنش‌ها رو تعریف کردیم، باید یک کلاس برای بلاک‌ها ایجاد کنیم. هر بلاک در زنجیره شامل چند ویژگی اصلی که به ترتیب عبارتند از:
شماره بلاک در زنجیره (index)
هش بلاک قبلی در زنجیره (previous_hash)
زمان ایجاد بلاک (timestamp)
لیست تراکنش‌های درون بلاک (transactions)
عددی که برای ماینینگ استفاده میشه (nonce)
هش بلاک (hash):که با استفاده از تراکنش‌ها و ویژگی‌های دیگر بلاک ساخته میشه

class Block:
def __init__(self, index, previous_hash, timestamp, transactions, nonce=0):
self.index = index
self.previous_hash = previous_hash
self.timestamp = timestamp
self.transactions = transactions
self.nonce = nonce
self.hash = self.calculate_hash()

def calculate_hash(self):
transactions_string = ""
for tx in self.transactions:
transactions_string += str(tx)

block_string = f"{self.index}{self.previous_hash}{self.timestamp}{transactions_string}{self.nonce}"
return hashlib.sha256(block_string.encode()).hexdigest()

def __str__(self):
return f"Block<index: {self.index}, hash: {self.hash}>"


حالا که بلاک‌ها و تراکنش‌ها رو تعریف کردیم، باید یک کلاس برای بلاکچین خودمون ایجاد کنیم که شامل ویژگی‌هایی مثل لیستی از بلاک‌ها، تراکنش‌های معلق و سایر عملیات مانند اضافه کردن تراکنش، ماین کردن بلاک و بررسی اعتبار زنجیره باشه. درواقع نیاز به یه کلاس داریم که بیاد و بلاکچینمون رو مدیریت کنه
class Blockchain:
difficulty = 4 # میزان سختی برای ماینینگ بلاک

def __init__(self):
self.chain = [self.create_genesis_block()]
self.pending_transactions = []

def create_genesis_block(self):
# genesis block ایجاد بلاک اول با متود
return Block(0, "0", time.time(), [])

def get_latest_block(self):
#A: دریافت آخرین بلاک در زنجیره
return self.chain[-1]

def add_transaction(self, transaction):
#B: اضافه کردن تراکنش به لیست تراکنش‌های معلق یا در تایید انتظار
self.pending_transactions.append(transaction)

def mine_pending_transactions(self):
#C: ماین کردن تراکنش‌های معلق و اضافه کردن بلاک به زنجیره
block = Block(len(self.chain), self.get_latest_block().hash, time.time(), self.pending_transactions)
self.mine_block(block)
self.chain.append(block)
self.pending_transactions = []

def mine_block(self, block):
#D: Proof of Work ماین کردن یک بلاک با استفاده از الگوریتم
while block.hash[:self.difficulty] != "0" * self.difficulty:
block.nonce += 1
block.hash = block.calculate_hash()
print(f"Block mined: {block.hash}")

def is_chain_valid(self):
#E: بررسی اعتبار کل زنجیره با مقایسه هش‌ها و هش‌های محاسبه شده
for i in range(1, len(self.chain)):
current_block = self.chain[i]
previous_block = self.chain[i - 1]

if current_block.hash != current_block.calculate_hash():
return False

if current_block.previous_hash != previous_block.hash:
return False

return True

ادامه توضیحات کلس BlockChain و نحوه ساخت یه بلاک با تراکنش هاش تو پست بعدی🥸
#blockchain
👍2
CodeCrafters
سلام🥸همونطور که از پست قبلی متوجه شدیم با زبان های بسیاری میتونیم بلاکچین رو طراحی کنیم و خب تو این پست قراره بلاکچینی رو برای زنجیره تامینی با استفاده از پایتون پیاده کنیم زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند…
ساخت بلاک های اولیه و تراکنش
خب در نهایت به این میرسیم که چطوری میتونیم از کلس هامون استفاده کنیم
blockchain = Blockchain()

#A: ایجاد تراکنش‌
blockchain.add_transaction(Transaction('Farm', 'Warehouse', 'Tomatoes', 70))
blockchain.add_transaction(Transaction('Warehouse', 'Distributor', 'Tomatoes', 90))
blockchain.add_transaction(Transaction('Distributor', 'Retailer', 'Tomatoes', 80))

#B: ماین کردن تراکنش‌های معلق
blockchain.mine_pending_transactions()

#C: بررسی اعتبار زنجیره
print(f"Blockchain valid: {blockchain.is_chain_valid()}")

#D: نمایش بلاک‌ها و تراکنش‌ها
for block in blockchain.chain:
    print(block)
    for tx in block.transactions:
        print(f"txt = {tx}")

این تیکه کد، یک نمونه ساده از استفاده از کلاس بلاکچین و متود  های اون را نشان می‌ده. در اینجا، یک ابجکت از کلاس Blockchain ایجاد می‌شود و  سه تراکنش برای ردیابی محصولات غذایی  اضافه می‌شه. بعد از اون تراکنش‌های معلق ماین شده و یک بلاک جدید به زنجیره اضافه می‌شود و  اعتبار زنجیره چک می‌شه و در نهایت بلاک‌ها و تراکنش‌ها نمایش داده می‌شود.


پ ن: توضیح عمقی تر درمورد کلاس Blockchain
مورد اول difficulty: این متغییر نشان می‌دهه که برای ماین کردن یک بلاک جدید چه تعداد صفر در ابتدای هش باید وجود داشته باشد.فرض کنید که مقدار difficulty در بلاکچین  برابر 3 باشد.
ب فرض کنیم ما بلاکی را می‌خواهیم ماین کنیم و هش بلاک  باید اینگونه باشد:
hash: 000abc123

دوم ()init: در این متد، زنجیره با ایجاد بلاک اول (genesis block) شروع می‌شود و لیست تراکنش‌های در انتظار برای ماین کردن خالی می‌شود.

سوم:create_genesis_bloc()k: این متد بلاک اول یا genesis block را با شماره بلاک 0، هش بلاک قبلی صفر، زمان فعلی و بدون تراکنش ایجاد می‌کند. معمولا بلاک اول زنجیره رو خوومون درست میکنیم و بدون تراکنش و هش صفر

چهار: get_latest_block(): این متد آخرین بلاک در زنجیره را برمی‌گرداند.

پنج:add_transaction(transaction): این متد یک تراکنش را به لیست تراکنش‌های در انتظار برای ماین کردن اضافه می‌کند.

شش:mine_pending_transactions: این متد تمام تراکنش‌های در انتظار را ماین می‌کند و بلاک حاوی آن‌ها را به زنجیره اضافه می‌کند.

هفت:mine_block(block): این متد یک بلاک را با استفاده از الگوریتم Proof of Work ماین می‌کند، تا هش بلاک با تعداد صفرهای مشخص (بر اساس difficulty) شکل بگیرد.

هشت:()is_chain_valid: این متد بررسی می‌کند که زنجیره فعلی اعتبار دارد یا نه، با مقایسه هش‌های بلاک‌ها و هش‌های محاسبه شده.

#blockchain
سلام به همه دوستانی که تازه به جمع ما پیوستند ورودتون رو به جمع خانواده پایتون خوش آمد میگم
زیر این پست آخرین ورژن های مفسر پایتون و ویژوال استودیو کد رو قرار میدم برای استفاده البته دقت کنید این ورژن ها روی ویندوز ۸ به بعد نصب میشه بعد از اون ورژن های مخصوص ویندوز ۷ رو هم قرار میدم پیروز باشید
آخرین ورژن ویژوال استودیو کد نسخه ۶۴ بیتی (مخصوص ویندوز ۸.۱ به بعد ) 👇👇👇👇👇👇👇
آخرین ورژن ویژوال استودیو کد نسخه ۳۲ بیتی (مخصوص ویندوز ۸.۱ به بعد ) 👇👇👇👇👇👇👇
ورژن ۱.۷ ویژوال استودیو کد مخصوص ویندوز ۷ ، ۶۴ بیتی (مخصوص ویندوز ۷)
👇👇👇👇👇👇👇👇👇👇👇
آخرین نسخه ۶۴ بیتی مفسر پایتون ورژن ۳.۱۱.۴ برای ویندوز ۸ به بعد (روی ویندوز ۷ نصب نمیشه )
👇👇👇👇👇👇👇👇👇👇
آخرین نسخه ۳۲ بیتی مفسر پایتون ورژن ۳.۱۱.۴ برای ویندوز ۸ به بعد (روی ویندوز ۷ نصب نمیشه )
👇👇👇👇👇👇👇👇👇👇
👍1
نسخه ۳.۸.۱۰ مفسر پایتون ۶۴ بیتی مخصوص ویندوز ۷ (روی ویندوز ۸ به بعد نصب نمیشه )
👇👇👇👇👇👇👇👇👇👇👇👇
نسخه ۳.۸.۱۰ مفسر پایتون ۳۲ بیتی مخصوص ویندوز ۷ (روی ویندوز ۸ به بعد نصب نمیشه )
👇👇👇👇👇👇👇👇👇👇👇👇
برای ارتباط با من به این اکانت پیام بدید
حتما خودتون رو معرفی کنید و سوالتون رو تا حد امکان کوتاه بپرسید سوالات اصلی رو بذارید سر کلاس های حضوری
@MeisamShabani
* مهم *
بچه های دوره پایتون که دو هفته پیش دوره به پایان رسید و شروع دوره قبل از عید بود
با تمام تایم گرفتن از تهران تا پایان هفته بعد وقت دارید برای تحویل پروژه هاتون
عدم تحویل پروژه بر عدم نیاز به مدرک تلقی میشه در صورتی که زمان گذشته باشه از آخرین فرصت تحویل برای گرفتن مدرک و تحویل پروژه باید با مجتمع صحبت کنید اگر امکانش باشه با دادن یه هزینه دوباره دوره باز بشه و نمره شما ثبت بشه
برای اینکه درگیر این مشکلات نشید تا پایان هفته بعد حتما پروژه ها رو تحویل بدید

نکته : بچه‌هایی که دوره پیشرفته ثبت نام کردن بدلیل زمانی که باید برای ویدیوهای پیش نیاز که براشون ارسال شده و یا میشه بذارن چهار روز بیشتر فرصت دارند
موفق باشید 🎉🎉🎉🎉