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

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
מתפתחאורח · ·
 

הודעה פורסם: 22/06/2015 - 21:36
נושא ההודעה: פייתון: מספר שאלות לגבי תנאי בשורה אחת

לדוגמה יש לי את הקוד הבא
אני מעוניין להריץ לולאה כלשהי כל עוד הערך שנכנס הוא לא XYZ, במידה והוא כן שהלולאה תגלד על האיטרציה הנוכחית ותעבור לאיטרציה הבאה.

הבעיה היא שאי אפשר להכניס continue בתוך הelse.
קוד:

a = []
for i in range(10):
    print i if i % 2 == 0 else continue
    a.append(i)
   

  File "<ipython-input-9-09a143bb89a4>", line 3
    print i if i % 2 == 0 else continue
                                      ^
SyntaxError: invalid syntax



שאלה אחרת שיש לי היא אם ניתן לעשות תנאי בשורה אחת בלי להתחייב לעשות else בסוף.
קוד:

a = []
for i in range(10):
    a = 'lalalala' if i % 2 == 0     

  File "<ipython-input-12-d350d6ae2777>", line 3
    a = 'lalalala' if i % 2 == 0
                                     ^
SyntaxError: invalid syntax
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/06/2015 - 21:46
נושא ההודעה:

אתה מדבר כאן על conditional expression. למעשה הביטוי

קוד:

x if condition else y


מתרגם לערך בודד - x אם התנאי אמת, אחרת y. במקרה הראשון הבעיה היא ש-continue הוא לא ערך ש-print יודע להדפיס. במקרה השני - מה יהיה הערך אם התנאי לא מתקיים?

ראה גם https://docs.python.org/2.5/whatsnew/pep-308.html
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/06/2015 - 22:25
נושא ההודעה:

בעיקרון אתה צודק אבל יש אפשרות כן לעשות את זה רק בצורה לא פייתונית, אני שואל אם יש משהו שכן "מותר" לעשות
קוד:

a = []
for i in range(10):
    i % 2 == 0 and a.append(i)
    print a

[0]
[0]
[0, 2]
[0, 2]
[0, 2, 4]
[0, 2, 4]
[0, 2, 4, 6]
[0, 2, 4, 6]
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
SFאורח · ·
 

הודעה פורסם: 22/06/2015 - 22:35
נושא ההודעה:

זאת תשובה לשאלה המקורית, או תגובה להסבר?
בכל מקרה - מה אתה מנסה לעשות? למה לא לעשות את זה עם list comprehension?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/06/2015 - 22:39
נושא ההודעה:

SF :
זאת תשובה לשאלה המקורית, או תגובה להסבר?
בכל מקרה - מה אתה מנסה לעשות? למה לא לעשות את זה עם list comprehension?

מסביר את הבעיה שלי (זה לא פייתוני)
בקשר לשאלה השניה מה שאני עושה זה עובר על קובץ עם המון שורות ומפרסר אחת אחת, יש שורות שמראש אני לא רוצה לפרסר אותם ולכן אני זקוק לדלג על האיטרציה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
SFאורח · ·
 

הודעה פורסם: 22/06/2015 - 22:54
נושא ההודעה:

מה הבעיה עם משהו כמו

קוד:

for line in lines:
    if line_condition:
        continue
    ...process lines...
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 22/06/2015 - 22:56
נושא ההודעה:

אתה לא מתייחס לזה נכון, זה לא דרך אחרת לרשום ל-if/else (כלומר control structure) אלא ביטוי ternary.

בשפות אחרות הייתה רושם:
קוד:
i = condition ? true_value : false_value;


זה חייב להיות משהו שאפשר להציב.

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
מתפתחאורח · ·
 

הודעה פורסם: 22/06/2015 - 23:00
נושא ההודעה:

אוקי את השאלה הראשונה הבנתי
מה בקשר לשניה למה אי אפשר לעשות continue רק אם התנאי מתקיים?
גם הדבר הבא לא עובד.
קוד:

for i in range(10):
    continue if i % 2 == 0
    print a
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 22/06/2015 - 23:16
נושא ההודעה:

אם שאלת את זה, לא הבנת. ביטוי ternary משמש להצבה, אין קשר בינו למשהו כמו continue.
קוד:

if i %% 2 == 0:
    continue


או לחלופין ללא continue:
קוד:

for x in y:
    if i % 2 != 0:
        process_line()


באופן אישי לא הייתי כותב זאת כך, אלא כותב generator שמקבל את זה של הקובץ ומחזיר רק את השורות המתאימות, ועליו הייתי עושה את האיטרציה בתור פונקציה או בתור generator expression - אם התנאי לא מורכב מדי והוא יהיה קריא. אופן עבודה כזה הוא פייתוני יותר לטעמי.

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
queencyלא בפורום כעת ת.הצטרפות: 13/11/2008 · הודעות: 2139 ·
 

הודעה פורסם: 22/06/2015 - 23:17
נושא ההודעה:

קוד:

def b():
 print "y"

[b() for x in range(0,10) if x%2==0]

_________________
מערכת: GNU/Linux debian
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 22/06/2015 - 23:23
נושא ההודעה:

עדיף לך generator expression ולא list comprehension.

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 29/06/2015 - 17:27
נושא ההודעה:

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

תוכן הדיון

  1. אורח [מתפתח]
  2. אורח
  3. אורח
  4. אורח [SF]
  5. אורח
  6. אורח [SF]
  7. mksoft
  8. אורח [מתפתח]
  9. mksoft
  10. queency
  11. mksoft
  12. אורח