• בלוג
  • בואו נלמד שפה חדשה עם Python

בואו נלמד שפה חדשה עם Python

18/11/2019

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

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

1. מבנה הקלט

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

mom / maman
dad / papa
hello / salut
island / île

בגלל שאנחנו בעסקי השפות חשבתי שיהיה נחמד לצאת מעולם ה ascii ובגלל זה המילה "אי" נכנסה לרשימה. בכל מקרה אתם יכולים לשחק עם זה ולבחור את המילים שאתם רוצים להתאמן עליהן בשפה שאתם לומדים. הסימן / כדי להפריד בין המילה לתרגום שלה עדיף על רווח כי לפעמים נרצה להתאמן על תרגום משפטים של כמה מילים.

2. קריאת הקלט למילון ב Python

עם המודול fileinput אפשר יהיה לקרוא את הקלט למילון בזיכרון יחסית בקלות - המודול ייתן לנו לרוץ על כל השורות בקובץ, ובעזרת split אשבור כל שורה למילים באנגלית ובצרפתית. הדבר היחיד שחשוב לזכור כאן הוא לקרוא ל strip כדי לא להיתקע עם רווחים בתוך המילה:

# Create the data
with fileinput.input("flashcards.txt") as f:
    for line in f:
        [english, french] = [w.strip() for w in line.split('/')]
        words[english] = french

3. בחירת מילה אקראית מהמילון

עכשיו שכל המילים בזיכרון אפשר להמשיך לבחור מילה אקראית בשביל המשחק שלנו - הפונקציה random.choice מחזירה אלמנט אקראי מתוך סידרה. הבעיה שהיא לא עובדת על מילונים ולכן עלינו לקחת את word.items, להפוך אותו לרשימה ואותה לשלוח ל random.choice. אני רוצה לתמוך גם בתרגום מאנגלית לצרפתית וגם מצרפתית לאנגלית לכן אני מוסיף עוד משתנה בוליאני שיגדיר את סוג המשחק:

# Show a flashcard
word, translation = random.choice(list(words.items()))
reverse = random.choice([True, False])
if reverse:
    word, translation = translation, word

4. הצגת המילה אות-אחרי-אות בהמתנה לתרגום

עכשיו אפשר לצאת לדרך - נציג את המילה לתרגום ונחכה שהמשתמש יכתוב את התרגום שלה. אם הוא טעה נציג לו אות אחת מהמילה כדי להזכיר, בטעות הבאה נוסיף עוד אות וכך עד שנציג בסוף את כל המילה. בגלל שכל פעם יש הזדמנות להצליח, אני יכול להשתמש במבנה נחמד של Python של else על לולאה: במבנה כזה ה else יופעל רק אם לא היה break בתוך הלולאה, כלומר רק אם המשתמש לא הצליח לנחש בצורה נכונה את המילה.

החלק האחרון של התוכנית לכן נראה כך:

print(word)
for i in range(1, len(translation) + 1):
    guess = input('> ')
    if guess == translation:
        print('Bravo!')
        break

    print(translation[0:i])
else:
    print("Sorry, the answer was", translation)

ובפחות מ-30 שורות קיבלתם משחק זיכרון למילים שיעזור לכם ללמוד כל שפה בעולם.