Salviati
Salviati

Reputation: 778

How to avoid a redundant and verbose if-else-structure?

Is there a simpler and more efficient way to writing this code? It is a calculator on how much it costs to smoke.

There must be a way of skipping all the if and elif tags, and make it into a loop and save a few minutes of typing the code, and there may be even a "standard" in how to type code like this that I have missed.

how_many = int(input('How many ciggaretes do you smoke each day?\n'))

per_package = int(input('How much does your package cost?\n'))

contain = int(input('How many ciggaretes does the package contain?\n'))

cost_st = per_package / contain

choice = input('Do you want to calculate the cost per "Day (D)" / "Week (W)" / "Year (Y)" / "Decade (DE)"?\n')

if choice == 'D':
    cost_day = cost_st * how_many
    print("It will cost", cost_day ,"kr per day.")

elif choice == 'W':
    cost_week = (cost_st * how_many) * 7
    print('It will cost', cost_week,'kr per week.') 

elif choice == 'Y':
    cost_year = (cost_st * how_many) * 365
    print('It will cost' ,cost_year, 'kr per year.')

elif choice == 'DE':
    cost_DE = ((cost_st * how_many) * 365) * 10
    print('It will cost' ,cost_DE, 'kr per decade.')

else:
    print('Something went wrong! Try again please.') 

Upvotes: 2

Views: 183

Answers (1)

Malik Brahimi
Malik Brahimi

Reputation: 16711

You can use a dictionary and a predefined function:

mappings = {'D': 1, 'W': 7, 'Y': 365, 'DE': 3650}

def calculate_cigarettes(arg):
    cost = cost_st * how_many * mappings[arg]
    print('It will cost', cost, 'kr total.')

Upvotes: 7

Related Questions