Home > Back-end >  `else` does not show the value
`else` does not show the value

Time:02-04

I built the code below. Code works ok when user insert word which is inside of data variable. If user type "monda" instead of "monday" then I get error message. My "else" does not apply here. Could you please look at that and suggest me what can I correct. Second thing is that numbers from data they should be printed on the end in print always with same shape as in data variable but friday where is 0800 it prints me 800. How can I correct the code so it shows me 0800 in print on the end.

data = """
monday;1250
tuesday;1405
wednesday;1750
thursday;1100
friday;0800
saturday;1225
sunday;1355
"""
data = data.strip()
data = {day: number for day, number in [line.split(';') for line in data.split('\n')]}
day = input("Insert day: ").lower()
number = int(data[day])
temperature = 0

if day in data:
   if number >= 1400:
       temperature = number / 22.5
   elif number >= 1200 and number <=1400:
       temperature = number / 23.1
   elif number < 1200:
       temperature = number / 23.5
else:
   print("Check day and insert again, please!")

print("""Data for "{}"\nNumber: {}\nTemperature {:.3f}\u2103""".format(day, number, temperature))

CodePudding user response:

"If user type "monda" instead of "monday" then I get error message."

You should always check if the key exists before trying to access, or it will throw an error if it's not there. You're trying to get "monda" out of the data dictionary, which doesn't exist, to fix that, you can simply move the line number = int(data[day]) under the if sentence.

if day in data:
    number = int(data[day])
    if number >= 1400:
        temperature = number / 22.5
    elif number >= 1200:   
        temperature = number / 23.1
    else:
        temperature = number / 23.5
    
    print("""Data for "{}"\nNumber: {:04d}\nTemperature {:.3f}\u2103""".format(day, number, temperature))
else:
    print("Check day and insert again, please!")

About the 0800 and 800, you can add the ":04d" to the print statement, which will add a leading zero to the number if it doesn't have 4 digits.

Notice that you don't need to verify inside the elif statement if the number is below 1400, since the first if will do its job. Same thing with the elif number < 1200:, it will fall under this statement only if it failed the first and second if's.

CodePudding user response:

As a number, there is no difference between 800 and 0800. You must say at print time what format to use:

print("""Data for "{}"\nNumber: {:04d}\nTemperature {:.3f}\u2103""".format(day, number, temperature))

CodePudding user response:

about the error you can change

number = int(data[day])

to

number = int(data.get(day, 0))

CodePudding user response:

First, lets simplify your example.

data = {
    'monday': '1250',
    'tuesday': '1405',
    'wednesday': '1750',
    'thursday': '1100',
    'friday': '0800',
    'saturday': '1225',
    'sunday': '1355'
}
day = input("Insert day: ").lower()
number = int(data[day]) # KeyError if day not in data
temperature = 0

if day in data:
    if number >= 1400:
        temperature = number / 22.5
    elif number >= 1200 and number <=1400:
        temperature = number / 23.1
    elif number < 1200:
        temperature = number / 23.5
else:
    print("Check day and insert again, please!")

print("""Data for "{}"\nNumber: {}\nTemperature {:.3f}\u2103""".format(day, number, temperature))

Your first problem is that if day is not in data, a KeyError will occur. You can resolve this by waiting to access it until you know it's in your data dict.

Your second problem is 0800 and 800 as integers are equivalent. Since python makes no assumptions about how many leading zeros to display, it just uses none. To fix this, you can just leave it as a string and use another converted variable for comparison since a string will leave your leading 0 intact.

data = {
    'monday': '1250',
    'tuesday': '1405',
    'wednesday': '1750',
    'thursday': '1100',
    'friday': '0800',
    'saturday': '1225',
    'sunday': '1355'
}
day = input("Insert day: ").lower()
if day in data:
    number = int(data[day])
    if number >= 1400:
        temperature = number / 22.5
    elif number >= 1200 and number <=1400:
        temperature = number / 23.1
    elif number < 1200:
        temperature = number / 23.5
    else:
        temperature = 0
    print(f'Data for "{day}"\nNumber: {data[day]}\nTemperature {temperature:.3f}\u2103')
else:
    print("Check day and insert again, please!")
  •  Tags:  
  • Related