ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 18/09/2007 - 02:20
נושא ההודעה: ביטויים מותנים בפייתון

C, ושפות דומות, מאפשרת ביטויים מותנים אשר מחזירים ערך בהתאם לתנאי. כך ניתן לרשום בשפות האלה משהו בסגנון:
קוד:
state = age < 19 ? "teen" : "adult";


פייתון (עד גרסה 2.5 לא כולל, עוד על כך במשך) אינה כוללת משהו בסגנון. ניתן כמובן לשאול בתנאי:
קוד:

if age < 19:
    state = "teen"
else:
    state = "adult"


אך נפוץ לנצל רשימות כדי לבצע משהו דומה בצורה מקוצרת:
קוד:
state = ["adult","teen"][age < 19]


איך זה עובד ? התנאי מציין את האינדקס המוחזר מהמערך. אם הוא לא מתקיים, כלומר False, יוחזר האבר הראשון (אינדקס 0). אם הוא מתקיים, True, יוחזר האבר השני (אינדקס 1). פחות ברור למי שלא מכיר את הנוהג, אך עדיין קצר ולעניין.


בגרסה 2.5 נוספה תמיכה בביטויים כאלה, עם תחביר מעניין (כמובן שלא פורטיבילי לגרסאות קודמות). את התנאי הנ"ל ניתן לכתוב בתור:
קוד:
state = "teen" if age < 19  else "adult"
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
nadavvinלא בפורום כעת ת.הצטרפות: 08/12/2003 · הודעות: 7066 ·
 

הודעה פורסם: 27/09/2007 - 21:18
נושא ההודעה:

ציטוט:

בגרסה 2.5 נוספה תמיכה בביטויים כאלה, עם תחביר מעניין (כמובן שלא פורטיבילי לגרסאות קודמות). את התנאי הנ"ל ניתן לכתוב בתור:
קוד:
state = "teen" if age < 19 else "adult"


מגניב, זה יפה שפייטון נראית כמו שפה אנושית, ואפשר באותה מידה גם להרחיב את זה:

קוד:

>>> def age(age):
...     return "child" if age < 10 else "teen" if age  < 20 else "adult"
...
>>> age(5)
'child'
>>> age(15)
'teen'
>>> age(25)
'adult'

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם Yahoo Messenger מספר ICQ 
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ik_5לא בפורום כעת ת.הצטרפות: 16/04/2002 · הודעות: 3027 · מיקום: ישראל
 

הודעה פורסם: 07/08/2008 - 09:03
נושא ההודעה:

אנחנו משתמשים ברעיון של מערכים בשבילזה די הרבה בפסקל Smile

קוד:

const age_status : array[boolean] of string = ('adult', 'teen');
...
state := age_status[age < 19];


צריך לזכור ששלילי מגיע לפני חויובי במערך Smile
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
פיל-קטןלא בפורום כעת ת.הצטרפות: 02/05/2004 · הודעות: 1089 ·
 

הודעה פורסם: 07/08/2008 - 11:19
נושא ההודעה:

בפייתון ישנה היה נפוץ גם השימוש באופרטורים לוגיים:
קוד:

stat = age<19 and "teen" or "adult"

שעובד (רוב הזמן), בגלל שהאופרטורים הנ"ל מחזירים את הערך האחרון שהם חישבו, ובפייתון רוב האובייקטים נחשבים true לצרכים לוגיים.

המיעוט של הזמן שבו זה לא עובד הוא כאשר הערך שאמור לחזור כשהתנאי מתקייים מוערך לוגית כ-false (מחרוזת, רשימה או מילון ריקים, None, 0, false, או אובייקט שמחזיר ערכים כאלה על פונקציות "קסם" מסויימות). בהרבה מקרים, בניגוד לדוגמאות, הערך הזה לא ידוע בזמן הכתיבה (למשל משתנה או חוזר מקריאה לפונקציה). התחביר החדש פותר את הבעיה הזו (ניתן גם לטעון שהוא ברור וקריא יותר; בעיני, אם התנאי מוערך ראשון, הוא צריך גם להופיע ראשון).

אגב שרשורים, אני חושד שהרבה אנשים לא מודעים לכך שבפייתון ניתן לשרשר אופרטורים של השוואה:
קוד:

10 < x < 20

באמת בודק תחום, ולא כמו ברוב השפות שבהן זה ביטוי חוקי (ב-C למשל, זה תמיד מחזיר true כי קודם משווים את x ל-10, ואת התשובה, 0 או 1, משווים ל-20).
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אבגדאורח · ·
 

הודעה פורסם: 22/01/2009 - 16:46
נושא ההודעה:

[quote="nadavvin"]
מגניב, זה יפה שפייטון נראית כמו שפה אנושית, ואפשר באותה מידה גם להרחיב את זה:

קוד:

>>> def age(age):
...     return "child" if age < 10 else "teen" if age  < 20 else "adult"
...
>>> age(5)
'child'
>>> age(15)
'teen'
>>> age(25)
'adult'

זה כבר לא הומניטרי
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. mksoft
  2. nadavvin
  3. ik_5
  4. פיל-קטן
  5. אורח [אבגד]