מלחמה וזהו מחברת 5

תגיות:

לעבוד על טקסט קצר יותר ולראות שהקוד אכן עובד כמו שצריך. אם הוא עובד עבור קצר יותר יעבוד גם עבור טקסט ארוך (:

כמו כן – עדיף לייעל את הקוד כך שיעבוד גם על הטקסט הארוך.
יש סיכוי שהפתרון לא מספיק יעיל פשוט

לייק 1

האם בשלב הזה בקורס אפשר לקרוא מקובץ ע"י

with open('resources/war-and-peace.txt', 'r') as file_handler:
     for line in file_handler:

במקום -

with open('resources/haiku.txt') as fh:
    haiku_text = fh.readlines()

??

  • readlines
    קורא את כל הקובץ לזכרון בעוד שקריאה של שורה מתוך
    handler
    יותר יעילה.
    (אשמח לתיקון אם זה לא נכון)

זה אותו הדבר, השם של המשתנה פשוט שונה. בדוגמא הראשונה זה file_handler ובדוגמה השניה זה fh. בדוגמה הראשונה אתה עושה לולאת for לא ברור על מה, ובדוגמה השניה אתה קורא את השורות מהקובץ בעזרת המשתנה שמצביע על הקובץ.

אני מודע לזה ששתי הדוגמאות עושות אותו דבר.
את הדוגמה הראשונה לא תמצא בחומר הלימוד ואת הדוגמה השנייה תמצא.
הדוגמה הראשונה יעילה יותר.
אני שואל אם מותר להשתמש בדוגמה הראשונה.

לא, כמו תמיד אסור להשתמש בדברים שלא נלמדו אלא אם כן נכתב במפורש שמותר

מרגישה תסכול גדול, :wilted_flower: ואשמחחח לעזרה :shower: :tulip:
הצלחתי לנקות את הטקסט מסימני פיסוק מיותרים,
יצרתי פונקציה שעל כל מילה בטקסט, עוברת על הטקסט וסופרת את כמות המופעים של המילה תוך מחיקת המופעים שנספרו. לבסוף נוצר מילון של כל מילה והמופעים שלה.
כמובן שהפונקציה לא מצליחה לרוץ לאורך כל הטקסט.

הייתי שמחה להכוונה ב2 דברים:

  1. האם הציפייה היא לחלק את הקובץ לטקסטים קטנים יותר ולבצע את הפונקציה על כל אחד מהם בנפרד ולאחר מכן לעדכן את המילון בהתאם?
  2. כיצד ניתן להגיע ל10 הערכים הגבוהים ביותר ולשמור על המפתחות שלהם ובכך ליצור את הרשימה של 10 המילים הנכתבות ביותר? ניסיתי כל מיני ווארסיות ארוכות מידי ולא יעילות ומרגיש שהתשובה היא קלה ומתחת לאף
    :raised_hands:

היי :slight_smile:

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

  2. בנוגע לשאלה הזו זה טריקי לענות על זה כי זה מה שהתרגיל מבקש לעשות.

2 לייקים

אין פרינטים ועדיין התוכנה איטית ולא מגיעה לתוצאה סופית… ):

את יכולה להעביר לי אם את רוצה אני אסתכל, אבל בגדול אם את לא בלולאה אינסופית אז משהו ביעילות של הקוד לא עובדת וצריך לבצע פעולות פחות “ארוכות” נגיד ככה.

לייק 1

היי, רשמתי קוד שעובד טוב על טקסט אם הוא באורך של כמה דפים.
כשאני מנסה להריץ אותו על כל הטקסט של מלחמה ושלום התוכנה נתקעת, מה אני יכול לעשות?

לייעל אותו כדי שירוץ מהר יותר. אם יש בקוד הרבה פעולות שעוברות על כל הטקסט זה מאט מאוד את הריצה

לייק 1

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

את האמת שיש פה משהו מיוחד, וזה גם מימוש ספציפי של פייתון לכך שזה יעבוד :slight_smile:

לייק 1

אז רק לוודא, זה שימוש אסור?

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

יש דרכים לספור את כל המילים בטקסט עם ריצות בודדות על כולו ויש דרכים שדורשות מאות אלפי ריצות על הטקסט. אם אתה משתמש ב-count נגיד זו בעיה

לייק 1

כן. אפשר עדיין לעבור ב־for על readlines, נניח, פשוט לא על השם של הקובץ ישירות

לייק 1

כנראה שזאת הבעיה, שהספירה מתבצעת בcount.

יש אפשרות לתת רמז לאופציה חלופית לcount? כרגע להריץ את הקוד לוקח לי מעל 2 דקות…