#python #python-3.x
#python #python-3.x
Вопрос:
Очень рано начал программировать на Python и теперь сталкиваюсь с ошибкой, связанной с тем, что я считаю своими функциями возврата.
где я нахожусь:
Обновил исходное сообщение после получения отличного совета от @Kaushal.
Когда я тестирую ввод для «Введите количество пациентов», я продолжаю получать следующую ошибку:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Я думаю, что это должно быть связано с тем, что мои функции возврата вверху проходят и после определения неправильного ввода затем вводят любой ввод после этого «Нет».
Любые указания на то, как я могу исправить эту ошибку, были бы весьма признательны!
Ответ №1:
Несколько указателей, о которых нужно позаботиться :
- Используйте функции для выполнения повторной работы
- Используйте обработку исключения специально в случае чтения входных данных
- Используйте форматирование строк
Примечание: для чтения входных данных использовалась рекурсия, до тех пор, пока не будет введен допустимый ввод
Ниже приведена реализация проблемы, которая поможет вам понять, как реализовать проблему с функциями и обработкой ошибок в python
Калькулятор макроэлементов
def validate_is_positive_numeric(val):
try:
val = float(val)
if val <= 0:
print("Enter a valid positive value")
return None, False
except ValueError:
print("Enter a valid numeric value")
return None, False
return val, True
def read_input(text):
value, success = validate_is_positive_numeric(input(text))
if not success:
value = read_input(text=text)
return value
def calculate_average(macro_name, total_quantity, total_patients):
avg = total_quantity/int(total_patients)
print("Amount of {} (g) required : {}".format(macro_name, avg))
num_patients = read_input("Enter the number of patients: ")
protein, fats, carbs, kilojoules = 0, 0, 0, 0
for _ in range(int(num_patients)):
protein = read_input("Amount of protein (g) required: ")
fats = read_input("Amount of fats (g) required: ")
carbs = read_input("Amount of carbohydrates (g) required: ")
kilojoules = 4.18*(4*protein 4*carbs 9.30*fats)
calculate_average(macro_name="Protein", total_quantity=protein, total_patients=num_patients)
calculate_average(macro_name="Fats", total_quantity=fats, total_patients=num_patients)
calculate_average(macro_name="Carbohydrates", total_quantity=carbs, total_patients=num_patients)
calculate_average(macro_name="Kilojoules", total_quantity=kilojoules, total_patients=num_patients)
Комментарии:
1. Аааа, потрясающе. Спасибо @Kaushal. Эта функция except довольно мощная, я обязательно разберусь в них.
2. Теперь я перенастроил свой код, но при тестировании выполнения я продолжаю получать следующую ошибку: ‘ File «diet.py «, строка 27, в <module> для i в диапазоне (int(number_of_patients)): ошибка типа: объект ‘NoneType’ не вызывается’ ‘ Это когда я тестирую «Введите количество пациентов», и я ввожу «ok», «0», затем «1» в качестве значения для получения ответа. Если я сразу введу ‘1’, все будет работать нормально. Есть идеи, почему это так? :/
3. ооо!! понял, мы не принимаем значение, возвращенное
read_input
во время рекурсивного вызова, следовательно, оно возвращало значение из первого выполненного вызова, которое должно бытьNone
!! Обновлено