4 کتابخانه عالی پایتون که آرزو می کنید زودتر به آنها سر بزنید

امیرحسین بیگدلو 4 ماه قبل

من 4 کتابخانه پایتون را انتخاب کردم که احتمالاً در مورد آنها نشنیده اید و به نظر من مفید هستند. من نحوه استفاده از آنها را به شما نشان خواهم داد و سپس یک برنامه کوچک سرگرم کننده با آنها خواهیم ساخت.

 

 


 

Delorean

 

کار با آبجکت‌های زمان در پایتون ممکن است کمی دشوار باشد. Delorean کتابخانه ای است که کار با آبجکت‌های Datetime را آسان تر می کند. بر اساس مستندات ، Delorean کتابخانه ای برای روشن کردن حقایق ناخوشایند است که در مورد زمان در پایتون بوجود می آید. درک اینکه زمان بندی به اندازه کافی مشکل است، Delorean امیدوار است راه حلی تمیزتر و کم دردسرتر برای تغییر ، دستکاری و ایجاد زمان ارائه دهد.

 

از آنجا که مستندات Delorean بسیار خوب هستند، بنابراین در اینجا به جزئیات زیادی نمی پردازم. در زیر چند نمونه از استفاده از آن آورده شده است. (می توانید اینها را خودتان در مترجم پایتون یا IDE اجرا کنید.).

 

from delorean import Delorean

# create delorean obj
d = Delorean()
d

# set obj to central timezone
d = d.shift("US/Central")
d

# print datetime
d.datetime

# print date
d.date

 

در مثال بالا ، ما یک شیء Delorean ایجاد می کنیم ، آن را در منطقه زمانی مرکزی تنظیم می کنیم و سپس مقادیر زمان و تاریخ آن را چاپ می کنیم.

 

# create obj
d = Delorean()
d

# print next tuesday's date
d.next_tuesday()

# print datetime two tuesdays ago at midnight
d.last_tuesday(2).midnight

 

در مثال دوم ما ، زمان روز سه شنبه آینده را بر اساس تاریخ فعلی تعیین شده توسط Delorean چاپ می کنیم. سرانجام ، ما به 2 سه شنبه قبلی برمی گردیم و ساعت تعیین شده را نیمه شب دریافت می کنیم. انجام این کار به صورت دستی دردناک خواهد بود.

 


 

FuzzyWuzzy

 

کتابخانه بعدی ما ، FuzzyWuzzy ، راهی به ما می دهد که به راحتی رشته های تطبیق فازی را انتخاب کنیم. تطبیق فازی شامل مقایسه ورودی با مقادیر مختلف و محاسبه میزان "یکسان بودن" آنها است. مستندات FuzzyWuzzy اطلاعات بیشتری را ارائه می دهد.

 

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

fuzz.ratio("this is a test", "this is a test!")
fuzz.partial_ratio("this is a test", "this is a test!")
fuzz.token_sort_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")

choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
process.extract("new york jets", choices, limit=2)
process.extractOne("cowboys", choices)

 

با fuzz.ratio ، مقادیر "this is a test" را با "this is a test!" مقایسه می کنیم. که به ما نمره 97 (97٪ یکسان) می دهد. fuzz.partial_ratio ، نمره گذاری در اولین رشته موجود در دوم ، 100 به ما می دهد زیرا 100 string از رشته اول در دوم وجود دارد. fuzz.token_sort_ratio ، با استفاده از "tokens" مجموعه اول کلمات را با دومی مقایسه می کند ، نمره 84 را به ما می دهد.

 

بخش دوم کد ، رشته اول را با مطابقت در لیست رشته ها مقایسه می کند. process.extract لیستی از چندتایی حاوی رشته همسان را از لیست و نمره باز می گرداند. (محدودیت تعداد کبریت های برگشتی را تعیین می کند.)

 


 

Emoji

 

Emoji یک کتابخانه پایتون است که به طور شگفت انگیزی به ما اجازه می دهد ایموجی ها را نمایش دهیم. پیگیری اسناد ایموجی آسان است اما جزئیات زیادی ارائه نمی دهد.

 

import emoji

print(emoji.emojize('Python is :thumbs_up:'))
print(emoji.emojize('Python is :thumbsup:', use_aliases=True))

print(emoji.emojize("Python is fun :red_heart:"))

print(emoji.emojize("Python is fun :red_heart:",variant="emoji_type"))

 

Emoji چیز زیادی ندارد اما کار خود را به خوبی انجام می دهد. emoji.emojize هر کد ایموجی را با نماد واقعی ایموجی جایگزین می کند. use_aliases = True به شما امکان می دهد از نام های جایگزین برای emoji (: thumbs_up: vs: thumbsup :) استفاده کنید. به نظر می رسد که این نسخه رایانه شما را مجبور می کند تا به جای کاراکتر کد ascii ، یک ایموجی واقعی را در ترمینال بارگذاری کند. (این فقط یک حدس بر اساس آزمایش من با آن است ، اما در اسناد چیزی نمی گوید.)

 


 

Inflect

 

توضیح Inflect کمی سخت تر است زیرا کارهای زیادی انجام می دهد. این یک جعبه ابزار است که به ما کمک می کند تا پیام ها/جملات را برای نمایش به کاربر "هوشمند" بسازیم. اگر به Inflect یک فعل ، اسم یا صفت بدهید ، آنقدر هوشمند است که نسخه صحیح کلمه را برگرداند. به عنوان مثال ، شکل جمع "dogs" "dog" است. Inflect همچنین به شما امکان می دهد اعداد (1 ، 100 ، 1000) را به کلمات (یک ، صد ، هزار) تغییر دهید. برای اطلاعات بیشتر به مستندات Inflect مراجعه کنید.

 

import inflect
inflector = inflect.engine()

num_words = inflector.number_to_words(1632976)
num_words

num_turkeys = 1
print("I saw", num_turkeys, inflector.plural(word, num_turkeys))

num_turkeys = 17
print("I saw", num_turkeys, inflector.plural(word, num_turkeys))

n1 = 1
n2 = 2

print(
	inflector.plural_noun("I", n1),
	inflector.plural_verb("saw", n1),
	inflector.plural_adj("my", n2),
	inflector.plural_noun("saw", n2)
)

 


 

بیایید یک پروژه بسازیم!

 

اکنون که نحوه استفاده از این کتابخانه ها را دیدیم ، بیایید همه آنها را برای ساخت یک پروژه کوچک جمع آوری کنیم. پروژه ما نسخه بسیار کوچکی از MadLibs خواهد بود. من کد را به شما نشان می دهم و سپس کمی توضیح می دهم.

 

import random
from datetime import timedelta
import delorean
import emoji
import inflect
from delorean import Delorean
from fuzzywuzzy import process

class Story:

    verbs = ['runs', 'swims', 'walks', 'flies', 'paints', 'sleeps', 'eats', 'drives', 'spells', 'bakes', 'slices', 'waters']
    nouns = ['taco', 'elephant', 'cheeseburger', 'shoe', 'ogre', 'broccoli', 'lightbulb', 'cloud', 'coffee', 'mailbox', 'slime', 'hat']
    descriptors = ['green', 'tired', 'huge', 'sleepy', 'delicious', 'stinky', 'funky', 'hairy', 'moldy', 'expensive', 'wet', 'droopy']
    places = ['house', 'stadium', 'theater', 'store', 'bakery', 'amusement park', 'canyon', 'moon', 'valley', 'circus tent', 'forest', 'mountain']

    subjects = {
        0: ['boy', 'girl', 'rabbit', 'platypus', 'astronaut', 'horse', 'alligator', 'clown', 'dentist', 'beekeeper', 'mushroom', 'monster'],
        1: ['candle', 'toe', 'headache', 'spoon', 'cat', 'toaster', 'racecar', 'baseball', 'toothbrush', 'towel', 'sandbox', 'grampa']
    }

    adjectives = ['this', 'that', 'a', 'my', 'your', 'his', 'her', 'the']
    prepositions = ['at', 'in', 'under', 'beside', 'behind', 'above', 'from']
    intervals = ['minutes', 'hours', 'days', 'weeks']
    feelings = {'sad': ':frowning:', 'happy': ':smile:', 'tired': ':tired_face:', 'sleepy': ':sleepy:', 'angry': ':angry:', 'worried': ':worried:', 'confused': ':confused:', 'disappointed': ':disappointed:', 'amazed': ':open_mouth:'}
    lunch_stuff = ['Chicken Tacos', 'Cheeseburgers', 'Steamed Broccoli', 'Black Coffee']
    num_stories = 1

    def __init__(self, num_stories = 1):
        self.inflector = inflect.engine()
        self.num_stories = num_stories

    def about_lunch(self, noun):
        if process.extractOne(noun, self.lunch_stuff)[1] >= 75:
            return 'is'
        return 'isn\'t'

    def random_emotion(self):
        emotion = random.choice(
            list(self.feelings)
        )
        return (
            emotion,
            self.emoji_by_emotion(emotion)
        )

    def emoji_by_emotion(self, emotion):
        selected_emoji = self.feelings.get(emotion)
        return emoji.emojize(selected_emoji, use_aliases=True)

    def single_or_plural(self):
        num = random.randint(1, 10000)
        if num % 2 == 0:
            return 1
        return 2

    def random_number(self):
        num = random.randint(1, 10000)
        if num % 3 == 0:
            return 1
        return num

    def number_to_words(self,num):
        return self.inflector.number_to_words(num)

    def random_preposition(self):
        return random.choice(self.prepositions)

    def random_descriptor(self):
        return random.choice(self.descriptors)

    def random_place(self):
        return random.choice(self.places)

    def random_subject(self, idx, num):
        return self.inflector.plural_noun(
            random.choice(self.subjects.get(idx)),
            num
        )

    def random_adjective(self, num):
        adjective = random.choice(self.adjectives)
        if num == 1:
            return adjective
        return self.inflector.plural_adj(adjective)

    def random_noun(self, num):
        noun = random.choice(self.nouns)
        if num == 1:
            return noun
        return self.inflector.plural(noun)

    def random_verb(self, num):
        return self.inflector.plural_verb(
            random.choice(self.verbs), num
        )

    def adjective_subject_verb(self, subject_idx):
        num = self.single_or_plural()

        return [
            self.random_adjective(num),
            self.random_subject(subject_idx, num),
            self.random_verb(num)
        ]

    def adjective_subject_place(self, subject_idx):
        num = self.single_or_plural()
        subject = self.random_subject(subject_idx, num)

        if num == 2:
            subject += '\''
        else:
            subject += '\'s'

        return [
            self.random_adjective(num),
            subject,
            self.random_place()
        ]

    def adjective_num_descriptor_noun(self):
        num = self.random_number()
        return [
            self.random_adjective(num),
            self.number_to_words(num),
            self.random_descriptor(),
            self.random_noun(num)
        ]

    def timeframe(self):
        self.delorean = Delorean()
        self.delorean = self.delorean.shift("US/Central")
        
        interval = random.choice(self.intervals)
        num = random.randint(1, 10)

        self.delorean += timedelta(
            **{interval: num}
        )

        out = f'In {num} {interval}, it will be {self.delorean.datetime.strftime("%a %b %d, %Y %I:%M %p")}'
        return out

    def capitalize_sentences(self, orig):
        sentences = orig.split(". ")
        sentences2 = [sentence[0].capitalize() + sentence[1:] for sentence in sentences]
        return '. '.join(sentences2)

    def create_story(self):
        part1 = self.adjective_subject_verb(0)
        part2 = self.adjective_num_descriptor_noun()
        part3 = self.adjective_subject_place(1)
        preposition = self.random_preposition()
        time = self.timeframe()
        (emotion, feeling) = self.random_emotion()
        lunch = f'The first sentence {self.about_lunch(part2[3])} about lunch.'

        out = self.capitalize_sentences(f"{' '.join(part1)} {' '.join(part2)} {preposition} {' '.join(part3)}.\n{time}.\nI\'m {feeling} {emotion}.\n{lunch}\n\n")

        print(out)

if __name__ == '__main__':
    story_maker = Story(
        int(input('How many stories: '))
    )
    
    for i in range(story_maker.num_stories):
        story_maker.create_story()

 

برنام به شرح زیر است:

 

Input: از کاربر بپرسید که چند "داستان" می خواهد ایجاد کند

 

Random adjective, subject, verb: انتخاب کنید که یک اسم مفرد است یا جمع و به طور تصادفی صفت ، فاعل و فعل را با انتخاب صحیح مفرد یا جمع بدست می آورید.

 

Get more random words: به طور تصادفی صفت ، شماره ، توصیف کننده و اسم را انتخاب کنید.

 

Pick another random adjective, subject, and place: راه و چاه رو تا الان یاد گرفتی.

 

Preposition: به طور تصادفی یک حرف اضافه از لیست ما انتخاب کنید.

 

Use our Delorean object: منطقه زمانی را تنظیم کرده و به طور تصادفی در آینده زمان تعیین کنید.

 

Express yourself: یک احساس تصادفی و یک ایموجی مرتبط انتخاب کنید.

 

Does the first sentence contain a food word? کتابخانه Fuzzy اولین جمله را با لیست کلمات غذایی ما مطابقت می دهد.

 

Capitalization: همه جملات را با هم ترکیب کنید و کلمه اول هر یک را بزرگ بنویسید.

 

Display: نتیجه را چاپ کنید.

 

Repeat: روند را برای داستان دیگری که باید ایجاد کنیم ادامه دهید.

 


 

نتیجه نهایی

مطالب مشابه



مونگارد