22
A quick language learning program I made.
(lemmy.ca)
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()
Hi! Looks ok. Since you're learning still, I recommend running this code through pylint and black. You can search for 'python black' and 'python pylint' for more details on those.
Thank you for looking it over!
I run my code using the idle python shell while I write, and then directly through my terminal when they are finished.
What benefit does running them through pylint or black offer?
They're both "linters". They analyze your code without executing it, known as "static analysis", and highlight logical and stylistic errors.
Pylint will give you warnings if you try to feed a variable that holds an integer into a function that works on strings or if you deviate from python's suggested style guide. Python doesn't check data types until you actually run your code, so errors with data types won't be caught until your program crashes. Using pylint allows you to get warnings before actually executing your code. Note that Python allows for type hinting which allows you to tell linters what data types variables and functions are allowed to be. Python itself ignores type hints when executing code.
Black automatically formats your code to adhere to Python's suggested style guide. Unlike something like Pylint, it cannot be configured to ignore certain style rules. All projects using Black will have the same style. Python gives a lot of leeway in how you can format valid code, but it's difficult for programmers to read code in dozens of different styles. Most languages have come up with their own style guide. For example, your first line does not match the suggested style. All imports should be on their own line. If you don't want to remeber all the rules yourself, you can use Black to format your code in a way everyone is agreeable with.
Sounds to me like if someone doesn't like my code, they have options! haha
I will likely look into things like that as I get more of my code out there, and I appreciate you taking the time to explain it.
I do see the point of the style guide, and I am learning it over time, but I will die on the hill of camelCase. haha