0

Сделал программу которая выбирает минимальную цену из представленных. Но при выводе 92 и 95 под строкой print ('По запросу мы нашли лучшую цену!', gaz_92(), ' руб') выводится лишнее число, помогите пожалуйста избавится от него. И если не трудно подскажите как можно убрать многочисленные if в коде. Код:

price_gazprom = {'92': 41.10, '95': 44.20, '95+': 45.60, '100+': 51.40, 'ДТ': 47.75, 'Пропан': 21.20}
price_rosneft = {'92': 43.00, '95': 45.00, 'ДТ': 48.10}
price_novyi_potok={'92': 39.95, '95': 43.40, 'ДТ': 46.95}
def gaz_92 ():
    p_end = 0
    p_end = min(price_gazprom['92'], price_rosneft['92'], price_novyi_potok['92'])
    return p_end
def gaz_95 ():
    p_end = 0
    p_end = min(price_gazprom['95'], price_rosneft['95'], price_novyi_potok['95'])
    return p_end
def DT ():
    p_end = 0
    p_end = min(price_gazprom['ДТ'], price_rosneft['ДТ'], price_novyi_potok['ДТ'])
    return p_end
print ('Приветствуем вас в программе подборки лучшей цены на топливо! Все представленные цены действительны на территории г.Тюмень и 300 км от него!')
vvod = input('Введите желаемое топливо, а мы сравним все заправки и выберем лучшую цену! Ввод(92,95,95+,100+,ДТ,Пропан): ', )
if vvod == '92':
    print ('По запросу мы нашли лучшую цену!', gaz_92(), ' руб')

if vvod =='95':
    print ('По запросу мы нашли лучшую цену!', gaz_95(), ' руб')

if vvod == 'ДТ':
    print ('По запросу мы нашли лучшую цену!', DT(), ' руб')

if vvod == '95+' or '100+' or 'Пропан':
    print (price_gazprom[vvod])

введите сюда описание изображения

  • if vvod == '95+' or vvod == '100+' or vvod == 'Пропан': – m0nte-cr1st0 Apr 14 '19 at 15:53
  • Из трех функций gaz_92, gaz_95, DT, которые делают одно и тоже, нужно сделать одну. Если правильно сделать, то не понадобится ни одного if-а. – Эникейщик Apr 14 '19 at 18:24

2 Answers2

1

Оператор or может быть использован только с булевыми значениями. Другие типы будут приводиться к bool, в частности любая не пуста строка - это True. По этому последняя ветка условия срабатывает не зависимо от ввода.

Правильно будет так:

if vvod == '95+' or vvod == '100+' or vvod == 'Пропан':                                                       
    print (price_gazprom[vvod])  

Что касается многочисленных if, то вот вам подробный ответ.


Обратите внимание на то, что не объединенные конструкции if могут при определенных обстоятельствах могут сильно замедлять код. Подробнее можно прочитать здесь.

fimmind
  • 38
0
price_gazprom = {'92': 41.10, '95': 44.20, '95+': 45.60, '100+': 51.40, 'ДТ': 47.75, 'Пропан': 21.20}
price_rosneft = {'92': 43.00, '95': 45.00, 'ДТ': 48.10}
price_novyi_potok={'92': 39.95, '95': 43.40, 'ДТ': 46.95}

def get_min_price(inp):
    return min(price_gazprom[str(inp)], price_rosneft[str(inp)], price_novyi_potok[str(inp)])

print ('Приветствуем вас в программе подборки лучшей цены на топливо! Все представленные цены действительны на территории г.Тюмень и 300 км от него!')
inp = input('Введите желаемое топливо, а мы сравним все заправки и выберем лучшую цену! Ввод(92,95,95+,100+,ДТ,Пропан): ', )

if inp == '95+' or inp == '100+' or inp == 'Пропан':
    print (price_gazprom[inp])
else:
  print('По запросу мы нашли лучшую цену!', get_min_price(inp), 'руб')