非常早期的Python编程入门,现在遇到了我认为是我的返回函数的错误。
在收到@Kaushal的一些很好的建议后,更新了原始帖子。
当我测试“输入患者人数”的输入时,我不断收到以下错误:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
我认为它必须与顶部的返回函数以及确定了错误的输入有关,然后在“无”之后进行任何输入。
任何有关如何解决此错误的建议将不胜感激!
答案 0 :(得分: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)