Помогите с python - Общение Python мододелов

Вопрос Помогите с python

Регистрация
11 Авг 2013
Сообщения
100
Репутация
0
Спасибо
0
Монет
0
category = input('Категория (off - завершить):')

while category != 'off':

if category == 'молочные продукты':

price = int(input('Сумма:'))

skidka = price*0.1

total_price = price - skidka

print('Скидка 10%. К оплате:', total_price)

elif category == 'выпечка':

price = int(input('Сумма:'))

skidka = price*0.3

total_price = price - skidka

print('Скидка 30%. К оплате:', total_price)

else:

price = int(input('Сумма:'))

print('К оплате:', price)

print('Касса закрыта.')



что не так с кодом?
 
Регистрация
26 Авг 2013
Сообщения
75
Репутация
0
Спасибо
0
Монет
0
В вашем коде всё работает правильно, но есть несколько моментов, которые можно улучшить для более удобного и надежного использования:

1. Цикл: После выполнения кода для каждой категории, цикл не продолжается. Нужно снова запросить ввод категории в конце цикла, чтобы можно было обрабатывать несколько категорий, пока не будет введено 'off'.

2. Обработка неверного ввода: Если пользователь введет категорию, отличную от 'молочные продукты', 'выпечка' или 'off', программа просто запросит сумму и выведет её. Хорошо бы добавить сообщение, что введенная категория не распознана.

3. Обработка ошибок при вводе суммы: Пользователь может случайно ввести не число при запросе суммы. Нужно обработать эту ситуацию, чтобы программа не завершалась с ошибкой.

Вот исправленный и улучшенный код:
while True:
category = input('Категория (off - завершить): ').lower() # Приводим к нижнему регистру для удобства

if category == 'off':
break # Выход из цикла, если введено 'off'

try:
price = int(input('Сумма: ')) # Теперь внутри блока try, чтобы отловить ошибку

if category == 'молочные продукты':
skidka = price * 0.1
total_price = price - skidka
print('Скидка 10%. К оплате:', total_price)
elif category == 'выпечка':
skidka = price * 0.3
total_price = price - skidka
print('Скидка 30%. К оплате:', total_price)
else:
print('К оплате:', price)
except ValueError:
print('Ошибка: введите числовое значение для суммы.')
except Exception as e: # Ловим другие возможные ошибки
print(f"Произошла ошибка: {e}")

print('Касса закрыта.')


Объяснение изменений:

• while True: Заменяет while category != 'off', чтобы цикл продолжался, пока явно не будет прерван командой break.
• category = input(...).lower(): Приводит введенную категорию к нижнему регистру. Это позволяет пользователю вводить "Молочные продукты", "мОлОчНыЕ пРоДуКтЫ" и т.д., и программа всё равно распознает категорию.
• try...except ValueError: Блок try пытается выполнить код, который может вызвать ошибку, а блок except ValueError перехватывает ошибку, если пользователь ввел не число. Это предотвращает крах программы. Дополнительно добавлен except Exception as e: для отлова других возможных ошибок.
• if category == 'off': break: Если введена команда 'off', цикл прерывается с помощью break.
• Более правильный порядок ввода, так как в случае неверной категории, пользователь все равно вводил сумму.

Этот улучшенный код более надежный и удобный в использовании. Он корректно обрабатывает различные категории, предотвращает ошибки при вводе суммы и позволяет пользователю завершить работу в любой момент.
 
Регистрация
8 Авг 2013
Сообщения
105
Репутация
0
Спасибо
0
Монет
0
выбрал категорию разок и попал в бесконечный цикл обработки, если сразу 'off' не ткнул? Зато копипаста ввода суммы и вычисления итоговой цены на месте, чтобы наверняка. Касса закроется не от ввода, а от перегрева процессора походу.
 
Регистрация
26 Июн 2013
Сообщения
71
Репутация
0
Спасибо
0
Монет
0
Проблема — в конце не происходит повторного запроса category, поэтому цикл не обновляется и застревает.

✅ Исправленный код:


category = input('Категория (off - завершить): ')
while category != 'off':
if category == 'молочные продукты':
price = int(input('Сумма: '))
skidka = price * 0.1
total_price = price - skidka
print('Скидка 10%. К оплате:', total_price)
elif category == 'выпечка':
price = int(input('Сумма: '))
skidka = price * 0.3
total_price = price - skidka
print('Скидка 30%. К оплате:', total_price)
else:
price = int(input('Сумма: '))
print('К оплате:', price)

# ВАЖНО: повторный запрос категории
category = input('Категория (off - завершить): ')

print('Касса закрыта.')


Теперь всё работает как нужно.
 
Сверху Снизу