22
submitted 1 week ago by Arkouda@lemmy.ca to c/python@programming.dev

I am learning both Greek and Python right now, so I decided to make a simple program that quizzes you on the translations by providing it in Greek and asking for English, and if you provide the English, it will output the Greek if it is in the dictionary.

Feel free to take and modify this for your own uses if interested! It would be as simple as replacing the Greek dictionary and references with anything else. :)

import random, sys

greekTranslation = {
    'Γεια σας': 'Hello',
    'Καλημέρα': 'Good morning',
    'Καλησπέρα': 'Good evening',
    'Ευχαριστώ': 'Thank you',
    'Παρακαλώ': 'Please',}

def practiceGreek():
    greekPhrase = random.choice(list(greekTranslation.keys()))
    print('')
    print(f'What is the translation of "{greekPhrase}"?')
    print('')
    answer = input('Your answer: ')
    if answer.strip().lower() == greekTranslation[greekPhrase].lower():
        print('')
        print('That is correct!')
        print('')
    else:
        print('')
        print(f'Incorrect! The correct translation is "{greekTranslation[greekPhrase]}".')
        print('')

def translateToGreek():
    print('')
    print('What would you like to translate into Greek?')
    print('')
    englishPhrase = input().strip().lower()
    reverseTranslation = {v.lower(): k for k, v in greekTranslation.items()}
    greekPhrase = reverseTranslation.get(englishPhrase)
    
    if greekPhrase:
        print('')
        print(f'The Greek phrase is: "{greekPhrase}"')
        print('')
    else:
        print('')
        print('I am sorry, I don\'t have that in my dictionary.')
        print('')
    
        
while True:
    print('Welcome to the Greek Practice Program!')
    print('')
    print('What would you like to do?')
    print('')
    print('[Practice] [Translate] [Exit]')
    print('')
    optionSelection = input().strip().lower()
        
    if optionSelection != 'practice' and optionSelection != 'translate' and \
       optionSelection != 'exit':
        print('')
        print('Please select either practice, translate, or exit')
        optionSelection = ''
        print('')

    if optionSelection == 'practice':
        while optionSelection == 'practice':
            practiceGreek()
            print('')
            print('Would you like another? [yes] [no]')
            print('')
            selection = input().strip().lower()
            if selection == 'yes':
                print('')
                continue
            else:
                print('')
                break
                
            
    elif optionSelection == 'translate':
        while optionSelection == 'translate':
            translateToGreek()
            print('')
            print('Would you like to translate another phrase? [yes] [no]')
            print('')
            selection = input().strip().lower()
            if selection == 'yes':
                print('')
                continue
            else:
                print('')
                break
        
    
    elif optionSelection == 'exit':
        print('')
        print('Thank you for using the Greek Practice Program!')
        print('')
        sys.exit()

you are viewing a single comment's thread
view the rest of the comments
[-] shape_warrior_t@programming.dev 7 points 1 week ago* (last edited 1 week ago)

Nice! Some feedback (on your Python, I don't speak Greek):

  • In Python, the idiomatic way to name variables and functions is snake_case -- for example, greekTranslation should be greek_translation. (EDIT after seeing your most recent reply: good luck with that when it comes to Python :) )
  • You're currently recomputing reverseTranslation every time the user requests an English-to-Greek translation. Unless you're planning to modify greekTranslation while the program is running, it would likely be more efficient to make reverseTranslation a global variable, computed just once at the start of the program.
  • The control flow in the main program could be a bit more clear:
    • The condition in while optionSelection == <'practice'/'translation'> makes it look like optionSelection could change to something else inside the loop, yet you never do so. You could just write while True instead.
    • Instead of putting the "Please select either practice, translate, or exit" check up front, it would likely be more maintainable to add it as an else branch to the main if-elif-elif chain. That way, if you added in a new option, you would only have one place in the code to modify instead of two. (Also, instead of x != a and x != b and x != c, you could write x not in [a, b, c]).
    • Speaking of the if-elif-elif chain, you could replace it with a match statement, which would remove the repetitions of optionSelection ==.

Here's how I would write the control flow for the last section:

    optionSelection = input().strip().lower()
    match optionSelection:
        case 'practice':
            while True:
                practiceGreek()
                print('')
                print('Would you like another? [yes] [no]')
                print('')
                selection = input().strip().lower()
                print('')
                if selection != 'yes':
                    break
        case 'translate':
            while True:
                translateToGreek()
                print('')
                print('Would you like to translate another phrase? [yes] [no]')
                print('')
                selection = input().strip().lower()
                print('')
                if selection != 'yes':
                    break
        case 'exit':
            print('')
            print('Thank you for using the Greek Practice Program!')
            print('')
            sys.exit()
        case _:
            print('')
            print('Please select either practice, translate, or exit')
            print('')

(You could probably pull the while True loops into their own dedicated functions, actually.)

Hope that helps. Feel free to ask if any of this doesn't make sense.

[-] Arkouda@lemmy.ca 3 points 1 week ago

Thank you for the detailed response and help! It is funny because I am actually working on learning the functions you are recommending (I am working through "Automate the boring stuff with python") and it is literally the chapter I am on now. haha

I do have plans to modify the translation in the future, which is why I set it up the way I did. But your recommendation is a lot cleaner than what I had in mind so I likely would have had a lot of redundant code even with my plan to add later.

This helps a lot, and again thank you for taking the time on this. I appreciate it!

this post was submitted on 26 Jul 2025
22 points (100.0% liked)

Python

7345 readers
9 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

📅 Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

🐍 Python project:
💓 Python Community:
✨ Python Ecosystem:
🌌 Fediverse
Communities
Projects
Feeds

founded 2 years ago
MODERATORS