ערוץ - python tip israel
رفتن به کانال در Telegram
1 792
مشترکین
اطلاعاتی وجود ندارد24 ساعت
اطلاعاتی وجود ندارد7 روز
اطلاعاتی وجود ندارد30 روز
آرشیو پست ها
ההבדלים בין הפונקציות all ו-any
הפונקציה all():
מחזירה True אם כל הערכים באיטרציה הם True, אחרת תקבל False,
היא מקבלת אובייקט שניתן לעשות עליו איטרציה כארגומנט וחוזר על האלמנטים שלו, מעריכה אותם באמצעות הפונקציה bool() . אם כל האלמנטים מוערכים ל-True, נקבל True
אחרת, הוא נקבל False.
דוגמא 1: בדיקה אם כל האלמנטים הם מספרים שלמים וחיוביים:
numbers = [10, 20, 30, 40, 50]
result = all(num > 0 for num in numbers)
print(result) # Output: True
דוגמא 2: בדיקה אם כל הערכים אינם ריקים:
strings = ['Hello', 'World', '', 'Israel']
result = all(len(string) > 0 for string in strings)
print(result) # Output: False
הפונקציה any():
הפונקציה any(), בדומה ל-all(), מעריכה את האלמנטים של איטרציה. עם זאת, היא מחזיר True אפילו אם אלמנט אחד שווה לTrue, וFalse אם כל האלמנטים שווים לFalse.
דוגמא 3: בדיקה אם ערך כלשהו ניתן לחלוקה ב- 7:
numbers = [15, 21, 32, 45, 58]
result = any(num % 7 == 0 for num in numbers)
print(result) # Output: True
דוגמא 4: בדיקה אם מחרוזת כלשהי מהרשימה מכילה את האותיות "abcd"
strings = ['Test', 'Israel', 'Python', 'Script']
result = any(char in 'abcd' for string in strings for char in string.lower())
print(result) # Output: True
סיכום:
- הפונקציה 'any' מחזירה 'True' אם לפחות אלמנט אחד בבדיקה מוערך כנכון, אחרת "False".
- טיפ - הבדיקה רצה ומפסיק לאתר את האלמנטים ברגע שתמצא את הערך True הראשון.
- הפונקציה 'all' מחזירה 'True' רק אם כל האלמנטים החזירו True, אחרת False.
- טיפ - הבדיקה רצה ומפסיק לאתר את האלמנטים ברגע שתמצא את הערך False הראשון.
——————————————————————————————————————————————
דוגמא לשימוש בall כדי לבדוק אם כל הקישורים מתחילים ב"https://"
links = [
'https://google.com',
'https://example.com',
]
if all(link.startswith('https://') for link in links):
print('valid link')
גירסא ללא all:
links = [
'https://google.com',
'https://example.com',
]
all_valid: bool = False
for link in links:
if link.startswith('https://'):
all_valid = True
else:
all_valid = False
break
if all_valid:
print('valid url')בהמשך העלה מדריך מסודר איך לגשת למידע ללא שימוש בדפדפן אלא בעזרת ספריית requests
הבסיס לapi
במדריך זה, נלמד איך ליצור אפליקציית FastAPI ויצירת קישור פשוט שמחזיר את התאריך והשעה הנוכחיים בפורמט JSON.
התקנות נדרשות
ודא שיש לך פייתון מותקן. נצתרך גם להתקין FastAPI ו-uvicorn, שהוא שרת ASGI. אפשר להתקין אותם דרך pip:
pip install fastapi uvicorn
הגדרת הפרויקט
צור ,תקייה חדשה עבור הפרויקט שלך ונווט אליה בטרמינל. בתוך תקיית הפרויקט, צור קובץ חדש בשם main.py
כתיבת הסקריפט FastAPI
פתח את הקובץ main.py בעורך טקסט (ide) והעתק אליו את הקוד הבא:
פה אנחנו מייבים את הספריות הנצרכות בשביל הקוד שלנו
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from datetime import datetime
# זהו אובייקט FastAPI שישמש כדקרטור בסקריפט
app = FastAPI()
# זהו המיקום (url) של האפליקציה שמשתמשת ב-דקרטור של האפליקציה שהגדרנו מקודם
@app.get('/')
# זוהי הפונקציה שתיקרא כאשר המשתמש יבקר בעמוד הראשי
def index():
current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# הנתונים שיישלחו למשתמש
data = {
"time_now": current_datetime
}
return JSONResponse(content=data, headers={'Content-Type': 'application/json'})
עד כאן הקוד
שמור את הקובץ.
איך להריץ אפליקציית FastAPI
כדי להריץ את יישום FastAPI, פתח את הטרמינל שלך, נווט אל ספריית הפרויקט והרץ את הפקודה הבאה:
uvicorn main:app --reload
פקודה זו מפעילה את שרת uvicorn ואומרת לו להשתמש במודול הראשי (שהוא קובץ main.py שלך) ובמופע שיצרנו (הדקרטור) האפליקציה FastAPI. צינתי --reload מאפשר טעינה אוטומטית, כך שהשרת יופעל מחדש בכל פעם שנבצע שינויים בקוד.
ניווט לאפליקציית FastAPI
לאחר שהשרת פועל, פתח את הדפדפן ועבור לכתובת http://localhost:8000 אתה אמור לראות את התאריך והשעה הנוכחיים בפורמט JSON:
{
"time_now": "2023-07-02 13:30:45"
}
זהו, יצרנו יישום FastAPI עם לינק שמחזיר את התאריך והשעה הנוכחיים בפורמט JSON.
הסבר על הקוד
1. מייבאים את המודולים הדרושים: FastAPI, JSONResponse ו-datetime.
2. יוצרים מופע FastAPI על ידי אתחול משתנה בשם app.
3. מגדירים מסלול באמצעות הדקורטור @app.get('/'). ה- / מציין את כתובת ה-URL של האפליקציה שלנו אפשר לבחור כמובן בקישור אחר לדוגמא /time_now.
4. מגדירים את הפונקציה index() שתיקרא כאשר משתמש מבקר בכתובת שהגדרנו (/).
5. בתוך הפונקציה index() אנו משתמשים בספריית זמן datetime.now().strftime('%Y-%m-%d %H:%M:%S') כדי לקבל את התאריך והשעה הנוכחיים בפורמט שציינו.
6. יוצרים מילון בשם data המכיל את התאריך והשעה הנוכחיים.
7. מחזירים (return) את המידע בעזרת JSONResponse עם התוכן שהגדרנו ב-data נשתמש בפרמטר headers כדי לציין את סוג התוכן כ-json.
וזה הכל! יצרנו יישום FastAPI בסיסי שמחזיר את התאריך והשעה הנוכחיים בפורמט json.טקסט לשמע:
אחת הספריות המוכרות לטקסט לשמע היא pyttsx3
השימוש די פשוט
מתקינים
pip install PyAudio
pip install pyttsx3
ומריצים את הסקריפט
import pyttsx3
pyttsx3.speak("hello wrold")
אם אתם רוצים אחד קצת יותר טוב שבניתי
https://gist.github.com/nhman-python/2e11d0e4dbd1160e5eb866b8e8e3d5db
תהנו!התשובה לתרגיל:
def custom_join(seperator: str, items: str):
if not items:
return ''
join_string = items[0]
for item in items[1:]:
join_string += seperator + item
return join_string
num = '1234567'
print(custom_join('*', num))תרגיל: יצירת פונקציית join מותאמת אישית
הוראות:
אסור להשתמש בjoin
צור פונקציה בשם custom_join.
הפונקציה צריכה לקחת מפריד ורשימת פריטים כפרמטרים ולהחזיר מחרוזת שמחברת את הפריטים יחד באמצעות המפריד.
הנה דוגמא לאופן שבו הפונקציה צריכה לעבוד:
>>> custom_join("*", [1, 2, 3, 4])
'1*2*3*4'
הסבר:
הבדלים בין המתודות rstrip, strip וsplit ב-פייתון.
1. rstrip():
המתודה משמשת להסרת תווים רווח מהצד הימני של המחרוזת. תווים רווח יכולים לכלול רווחים, טאבים וקווים מהקצה הימני של המחרוזת. התוצאה היא מחרוזת חדשה ללא התווים המיותרים מהצד הימני.
דוגמא:
text = " Hello World " stripped_text = text.rstrip() print(stripped_text) # output: " Hello World"2. strip(): המתודה strip() משמשת להסרת תווים רווח מתחילתה ועד סופה של המחרוזת. התוצאה היא מחרוזת חדשה ללא רווחים משני צידי המחרוזת. דוגמא:
text = "\n\t Hello, World! \t\n" stripped_text = text.strip() print(stripped_text) # Output: "Hello, World!"3. split(): מתודה זו משמשת לפיצול מחרוזת לרשימה של תתי מחרוזות, בהתבסס על מפריד מוגדר. ברירת המחדל היא תו הרווח. המתודה מחזירה רשימה המכילה את המחרוזות המשנה. דוגמא:
text = "Hello,World,How,Are,You"
words = text.split(',')
print(words) # פלט: ['Hello', 'World', 'How', 'Are', 'You']
סיכום:
- rstrip() מסיר תווים מהצד הימני של המחרוזת.
- strip() מסיר תווי רווח משני צידי המחרוזת.
- split() מפצל מחרוזת לרשימה של מחרוזות משנה, בהתבסס על מפריד.ממיר אימוגי ASCII לאימוגי רגיל
דוגמא
מ: :)
ל: 🙂
https://gist.github.com/nhman-python/f3d0f88d8fbcf3593107f0669225e6bf
האתר:
https://smail-ascii.vercel.app/
תרגיל:
הוראות מותר להשתמש רק בלולאות ו append אסור להשתמש בset
רמה: בינוני
כתוב פונקציה בשם remove_duplicate() שמקבלת רשימה ומסירה כפילויות מרשימה
דוגמא:
lst = [1, 1, 3, 4, 55, 55] # output [1, 3, 4, 55]תשובות לבוט @Python_tipbot
תרגיל:
רמה: קלה
האם יש הבדל מהותי בין שני קטעי הקוד הבאים?
קוד 1:
lst = [1, 2, 3, 4, 5, 6, 7] lst1 = lstקוד 2:
lst = [1, 2, 3, 4, 5, 6, 7] lst1 = lst.copy()אם יש הבדל הסבר מהו תשובות לבוט @Python_tipbot
מהו raise?
ב-פייתון, raise משמשת להעלאת חריגים או שגיאות בכוונה במהלך ביצוע תוכנית. זה מאפשר לך ליצור חריגים מותאמים אישית או להעלות חריגים מובנים כדי לטפל בתנאים חריגים בקוד שלך.
התחביר הכללי להצהרת raise הוא:
raise ExceptionType("הודעת השגיאה")
ה- ExceptionType יכול להיות חריג מובנה כמו ValueError, TypeError, או חריג מותאם אישית שאתה מגדיר על ידי סיווג משנה של המחלקה Exception. "הודעת השגיאה" היא מחרוזת אופציונלית המספקת מידע נוסף על החריג שהועלה.
כאשר אתה מעלה חריגה, זה מפריע לזרימה הרגילה של התוכנית שלך ומעביר את השליטה למטפל חריג שיכול לטפל בחריג שהועלה. אם לא נמצא מטפל חריג מתאים, התוכנית תסתיים עם שגיאה (Traceback), תציג את סוג החריגה, הודעת השגיאה ושורת הקוד שבה הועלה החריג.
דוגמא להעלאת חריג מובנה:
def divide(a, b):
if 0 in [a, b]:
raise ZeroDivisionError("Cannot divide by zero")
return a / b
try:
result = divide(9, 9)
print(result)
except ZeroDivisionError as e:
print("Error:", e)
# Output: Error: Cannot divide by zero
בדוגמה זו, הפונקציה divide() מעלה חריג ZeroDivisionError אם אחד המספרים הוא אפס. לאחר מכן החריג נתפס על ידי בלוק ה-except, והודעת השגיאה מודפסת.
אתה יכול גם ליצור חריגים מותאמים אישית משלך על ידי הגדרת מחלקה חדשה שיורשת ממחלקת החריגים המובנית. חריגים מותאמים אישית מאפשרים לך לטפל בתנאי שגיאה ספציפיים בקוד שלך.
class MyCustomError(Exception):
pass
def process_data(data):
if not data:
raise MyCustomError("Empty data")
# Process the data
try:
process_data([])
except MyCustomError as e:
print("Error:", e)
# Output: Error: Empty data
בדוגמה זו, הפונקציה process_data() מעלה חריג MyCustomError אם ארגומנט הנתונים ריק. לאחר מכן החריג שהועלה נתפס על ידי בלוק הפרט והודעת השגיאה מודפסת.
על ידי העלאת חריגים, אתה יכול לטפל ביעילות ולתקשר במצבי שגיאה בתוכניות Python שלך, מה שמאפשר שליטה טובה יותר בקוד שלך.אתגר
כתבו פונקציה בשם len_list
הפונקציה צריכה לקבל רשימה ולהחזיר את האיבר הגדול ביותר ברשימה
אסור להשתמש בפונקציות מובנות כמו max או
min
דוגמא
def len_list(list):
...
# your code
list_a = ['aaa', 'aa', 'a']
print(len_list(list_a)) #output 'aaa'אתגר
שנו את הקוד ככה שבמקום להשתמש ב"*" תשתמשו בלולאה פנימית,
אסור להשתמש ב " * " כדי להדפיס כל פעם את השורה
num_letter = [1, 1, 1, 1, 6]
for letter in num_letter:
print(letter * 'x')
תשובות לפה
https://t.me/Python_tipbot
הסבר על mutability וimmutability
ב-פייתון, mutability מתייחסת ליכולת של אובייקט להשתנות לאחר יצירתו, בעוד immutability מתייחס לאובייקטים שלא ניתן לשנות לאחר יצירתם. הבנת המושגים הללו חשובה מכיוון שיכולות להיות להם השלכות על ביצועים, שימוש בזיכרון והתנהגות התוכניות שלך.
נתחיל עם דוגמאות לאובייקטים בלתי ניתנים לשינוי:
1. Strings:
python name = "Alice" new_name = name + " Smith" print(new_name) # Output: Alice Smithבדוגמה זו, המחרוזת המקורית "Alice" נשארת ללא שינוי. במקום זאת, אובייקט מחרוזת חדש נוצר על ידי שרשור המחרוזת המקורית עם "Smith". התנהגות זו נובעת מחוסר השינוי של סטרינג. 2. Tuples:
python point = (3, 4) new_point = point + (2,) print(new_point) # Output: (3, 4, 2)בדומה למחרוזות, tuples הם בלתי ניתנים לשינוי. כאשר אנו מבצעים פעולות כמו שרשור, ניצור tuples חדש במקום לשנות את המקורי. ——————————————————- כעת נעבור לדוגמאות של אובייקטים הניתנים לשינוי: 1. Lists:
python numbers = [1, 2, 3] numbers.append(4) print(numbers) # פלט: [1, 2, 3, 4]רשימות ניתנות לשינוי, מה שמאפשר לנו לשנות את האלמנטים שלהן ישירות באמצעות מטודות כמו append(), pop(), וכו' או על ידי הקצאה מחדש של ערכים ספציפיים. 2. Dictionaries:
python
person = {"name": "Alice", "age": 30}
person["age"] = 31
print(person) # Output: {'name': 'Alice', 'age': 31}
גם מילונים ניתנים לשינוי, מה שמאפשר לנו להוסיף, לשנות או להסיר צמדי מפתח-ערך באמצעות שיטות שונות ופעולות הקצאה.
מתי נשתמש ומה היתרונות של כל אחד מהם:
—-
לא ניתן לשינוי מועיל כאשר: (immutable)
- עליך לוודא שהערך של אובייקט יישאר ללא שינוי, מה שיכול להיות שימושי עבור שלמות הנתונים.
- אתה רוצה לייעל את השימוש בזיכרון, מכיוון שניתן לאחסן אובייקטים בלתי ניתנים לשינוי ולעשות בהם שימוש חוזר, ולצמצם את טביעת הרגל של הזיכרון.
סיכום:
יתרון מהיר יותר צורך פחות משאבים זיכרון
חסרון לא ניתן לשינוי
—-
ניתן לשינוי מועיל כאשר: (mutability)
- עליך לשנות או לעדכן אלמנטים לעתים קרובות, כגון בעת עבודה עם נתונים המשתנים דינמי או ביצוע פעולות במקום.
- אתה רוצה להימנע מיצירת אובייקטים חדשים כדי לחסוך שורות קוד ולשפר את הביצועים.
- אתה דורש אובייקטים שניתן לשנות על ידי חלקים מרובים של התוכנית שלך, מה שמאפשר מניפולציה קלה יותר של הנתונים.
לסיכום:
יתרון חסוך בשורות קוד
חיסרון דורש יותר מיקום בזיכרון (מאט את מהירות הריצה run-time)
זכור, גם immutable וגם לmutability יש יתרונות וחסרונות, והבחירה ביניהם תלויה בדרישות הספציפיות של התוכנית שלך ובבעיה שאתה מנסה לפתור.
דוגמא תוכלו לראות בקוד מהפוסט הקודם שהתשמשתי בtuples כדי שהתוכנית תרוץ מהר יותר ותחסוך לי מקום בזיכרון כי ידעתי מראש את כל הסוגי קבצים שאני רוצה לטפל בהםמסדר הקבצים
כרגע בגרסת הcli בהמשך יהיה גם gui
תהנו
https://github.com/nhman-python/file_organizer
כללים:
לדון בכבוד על נושא התיכנות, פייתון וכו'
מצאתם טעות או מידע שגוי בפוסטים אפשר לעדכן בקבוצת הדיון ואתקן
אסור לשלוח הודעות או כל פוסט שלא קשור לתיכנות משתמש שישלח יושתק
אסור לשאול אם אפשר לשאול🤓 פשוט תשאלו🥸 (נשתדל לעזור)
רוצים להתחיל ללמוד פייתון יש את קמפוס יש גם ערוץ יוטיוב חמוד לפייתון בעברית
בהצלחה לכל המתחילים
אתר שמציג את השעה והתאריך עכשיו
https://gist.github.com/nhman-python/183ca96b4bcee8048d9c684df5451ca9
למי שמכיר את John Hammond
הוא הוציא סרטון על כלי כמו שאני בניתי רק ששם הקוד שימש למטרות פישינג
ממש דומה למה שאני בניתי
https://www.youtube.com/watch?v=KZoeP7YGnHo
