SoniaBarasa / country-capital-quiz-game

This repository is for general learning purposes. Aim is to learn conventional way to write a python code.
1 stars 2 forks source link

Move code into a main function #21

Closed alimanfoo closed 1 year ago

alimanfoo commented 1 year ago

Currently the main code for the game is defined at the module level, outside of any function. I.e., the start of the module looks like this at the moment...

import random
import getpass
import pycountry
from countryinfo import CountryInfo

# Fetch all countries and their capitals using pycountry
countries_capitals = {}
for country in pycountry.countries:
    try:
        country_info = CountryInfo(country.alpha_2)
        capital = country_info.capital()
        if capital:
            countries_capitals[country.name] = capital
    except (KeyError, ValueError):
        continue

# Function to choose a random country from the dictionary
def choose_country():
    country = random.choice(list(countries_capitals.keys()))
    return country

# Function to check if the guess is correct
def check_guess(guess, country):
    capital = countries_capitals[country]
    if guess.lower() == capital.lower():
        return True
    else:
        return False

# Initialize player scores
player1_score = 0
player2_score = 0

#Defining the congratulatory message
congrats_message ="Congratulations Player {winner}, you are the winner!"

[... rest of the main game code ...]

Putting code at the module level like this, outside of a function, can cause some problems. For example, currently flake8 is not picking up the fact that the congrats_message variable is declared but never used (accessed).

It would be better to move the main logic into a function. Something like this would be conventional...

import random
import getpass
import pycountry
from countryinfo import CountryInfo

# Function to choose a random country from the dictionary
def choose_country():
    country = random.choice(list(countries_capitals.keys()))
    return country

# Function to check if the guess is correct
def check_guess(guess, country):
    capital = countries_capitals[country]
    if guess.lower() == capital.lower():
        return True
    else:
        return False

def main():
    """Main game logic."""

    # Fetch all countries and their capitals using pycountry
    countries_capitals = {}
    for country in pycountry.countries:
        try:
            country_info = CountryInfo(country.alpha_2)
            capital = country_info.capital()
            if capital:
                countries_capitals[country.name] = capital
        except (KeyError, ValueError):
            continue

    # Initialize player scores
    player1_score = 0
    player2_score = 0

    #Defining the congratulatory message
    congrats_message ="Congratulations Player {winner}, you are the winner!"

    [... rest of the main game code ...]

if __name__ == "__main__":
    # Call the main function if script has been run from the command line.
    main()

I.e., here all of the main game logic is moved inside a new function called main().

Then, at the end of the script, there is a special code block:

if __name__ == "__main__":
    # Call the main function if script has been run from the command line.
    main()

...which is not strictly necessary but helps to clarify that you expect this module to be run from the command line.