پایتون فارسی(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