Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

پیشنهاد / ابهام / سوال / نظرسنجی #1

Open
BaseMax opened this issue Sep 10, 2022 · 17 comments
Open

پیشنهاد / ابهام / سوال / نظرسنجی #1

BaseMax opened this issue Sep 10, 2022 · 17 comments
Assignees

Comments

@BaseMax
Copy link
Owner

BaseMax commented Sep 10, 2022

سلام
در مورد readme:
همیشه اول جملات یا متن ها با حرف بزرگ نوشته میشه انگلیسی.

linecache.getline(
"./male-first-names.txt", random_number(1219)
).strip()

این کار بدی هست که به ازای هر درخواست بروید فایل رو بخونید

بهتره که در لود برنامه فایل هارو بخونید و در حافظه بریزید بعد به ازای هر درخواست از اون ارایه بخونید.

اینطوری بهینه هست چون هزینه مراجعه خوندن/نوشتن به دیسک بالا هست و کند.

@AliiAhmadi
Copy link
Collaborator

سلام
این دو مورد حل شد.

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

مشکل اول:
female_first_names[random_number(4275) - 1]
این شیوه که رندوم میگیرید درست نیست بهتره یک تابع کنید که در یکجا کد های مربوط به راندوم گرفتن باشد.

مشکل دوم:
تعداد عدد رو ثابت نزارید میتونید count, len بزنید و تعداد اون رو خودکار بگیرید. (مثلا عدد 4275)

@AliiAhmadi
Copy link
Collaborator

حل شد.

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

def random_date():
return random.randrange(1, 2023)

سال رو هوشمند از تاریخ بگیرید. کار سختی نیست میتونید

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

if rand == 1:
    user["first_name"] = random_from_male()
else:
    user["first_name"] = None

این تکه کد رو میتونید شرط تک خطی بنویسید در پایتون هم این مورد پشتیبانی می شود

نمونه مثال:

# inline operator
is_true = 'yes' if sure else 'no'

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

پیشنهاد بهبود: مسیر های 404 رو بنظرم با یک پیغام متفاوت تری نشان دهید که 404 هستند و وجود ندارد.

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

پیشنهاد:

def create_user_male():
    user = {}
    rand = random_number(2)
    if rand == 1:
        user["first_name"] = random_from_male()
    else:
        user["first_name"] = None
    rand = random_number(2)
    if rand == 1:
        user["separator"] = separator()
    else:
        user["separator"] = None
    user["last_name"] = random_from_last_names()
    user["date"] = random_date()
    return user


def create_user_female():
    user = {}
    rand = random_number(2)
    if rand == 1:
        user["first_name"] = random_from_female()
    else:
        user["first_name"] = None
    rand = random_number(2)
    if rand == 1:
        user["separator"] = separator()
    else:
        user["separator"] = None
    user["last_name"] = random_from_last_names()
    user["date"] = random_date()
    return user


def create_user():
    user = {}
    rand = random_number(3)
    if rand == 1:
        user["first_name"] = random_from_male()
    elif rand == 2:
        user["first_name"] = random_from_female()
    else:
        user["first_name"] = None
    rand = random_number(2)
    if rand == 1:
        user["separator"] = separator()
    else:
        user["separator"] = None
    user["last_name"] = random_from_last_names()
    user["date"] = random_date()
    return user

این سه تابع قسمت مشترک زیادی دارند بنظرم میتونید بهینه تر بنویسید و از تکرار مکررات خودداری کنید.

یک تابع بنویسید که ورودی اون لیست اسم باشه حالا چه اسم فقط زن یا چه اسم فقط مرد یا ترکیبی
بهرحال اسمی را بگیرد و مابقی روند و کار های تکراری را روی ان انجام دهد.
با این تکنیک کد را بهینه و خلاصه تر می کنید و حتی خوانا تر

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

male_first_names = open(
    "./male-first-names.txt", mode="r", encoding="utf-8"
).readlines()
female_first_names = open(
    "./female-first-names.txt", mode="r", encoding="utf-8"
).readlines()
last_names = open("./last-names.txt", mode="r", encoding="utf-8").readlines()

شیوه نوشتار این سه کد بهم نمیخوره دو تای اولی اینتر زدید و سه خطی نوشتید ولی اخری رو تک خطی نوشتید. بهتره از یک سبک پیروی کنید.

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

def random_from_male():
    return male_first_names[random_number(len(male_first_names)) - 1][:-1]


def random_from_female():
    return female_first_names[random_number(len(female_first_names)) - 1][:-1]


def random_from_last_names():
    return last_names[random_number(len(last_names)) - 1][:-1]

این سه تابع رو هم شاید با یک ارگومنت ورودی که نقش flag رو داشته باشه بتونید تبدیل به یک تابع کنید.

برای نوع جنسیت هم میتونید یک کلاس enum داشته باشید که سه حالت دارد:
جنسیت خانم
جنسیت اقا
و جنسیت هردو

https://docs.python.org/3/library/enum.html

https://www.geeksforgeeks.org/enum-in-python/

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

همه رو بروزرسانی و بررسی کردید؟

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 10, 2022

http://127.0.0.1:5000/get/10/both
http://127.0.0.1:5000/get/both
http://127.0.0.1:5000/get/male
http://127.0.0.1:5000/get/female

این مسیر ها را هم تست کنید که به خوبی کار کنند.

اولی 10 تا اسم با جنسیت ترکیبی میسازد
و سه تا بعدی تنها یک اسم تولید می کنند.

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 12, 2022

سلام
هر موقع کامل تمام شد میتونید اعلام کنید که چک کنم.

@AliiAhmadi
Copy link
Collaborator

سلام .
بله این موارد رو چک کردم
بعضی از مسیر هایی که گفتین کم بود اضافه کردم.

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 12, 2022

تمام شد؟

@AliiAhmadi
Copy link
Collaborator

بله

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 12, 2022

عالی.
حالا در مورد وبسرویس چیست و restful چیست و اینکه JSON چه ساختاری است جستجو کنید و مقداری تمرین کنید.
پروژه ای که زدیم تمام خروجی هایش را در ساختار HTML پاسخ میداد
اما این استاندارد درستی نیست. چون این برای سایت و وب اپ مناسب است. برای وبسرویس ها همانطور که از نامش مشخص است قرار است سرویس بدهد یعنی اطلاعات خام و دست اول را منتقل کند.
در قدیم از XML به شدت استفاده می شد که چند سالی است JSON به شدت رونق گرفته است.
هرچند تکنیک های دیگری هم هستند که خوب اند اما هم چنان JSON پرطرفدار و پرمصرف است.

این موارد را صرفا مطالعه کنید و روی این مخزن بروزرسانی خاص دیگری نخواهیم داشت.
مطالعه کردید بگویید تا پروژه مشابهی را با ساختار JSON پیش ببریم.

اگر با محتوای ویدئویی فارسی هم راحت تر هستید قطعا مطالب خوبی پیدا خواهید کرد.

@AliiAhmadi
Copy link
Collaborator

درسته.
با JSON قبلا کار کردم منتها در Node
دو پایتون هم چند وقتی تمرین میکنم خبر میدم بهتون.
سپاس

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants