首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -遍历用户输入的数字,计算并输出输入的值

Python -遍历用户输入的数字,计算并输出输入的值
EN

Stack Overflow用户
提问于 2019-12-14 11:52:11
回答 2查看 223关注 0票数 0

我已经学习Python将近6周了,下面是我的第一个程序。

我想得到的是用户输入患者的no,碳水化合物,蛋白质和脂肪的需求。

使用下面的代码,我得到了我想要的输出。但是,我觉得一点也不干燥。我在重复很多事情。

我想修改这段代码,使用户可以输入任意数量的患者。目前,我指定了patient_no1和patient_no2。我将修改for循环,并使用for循环对此问题进行编码。如果您能给我一点关于如何重构当前代码的指导,我将不胜感激。谢谢!

代码语言:javascript
复制
def diet_log():

    ################################ Patient 1 ##########################################
    # Request User input for patient numbers, Handle non-positive integers and other invalid user input error for patient numbers 
    while True:
        try:
            patient_no1 = int(input("Enter a patient number to determine the dietary requirements : "))
            assert(patient_no1 > 0), "The patient number entered must be a positive integer."
            break           
        except:
            print("The patient number you enter must be a positive integer. Please try again.")

    # Request User input for protein, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_protein1 = float(input("Amount of protein required: "))
            assert(diet_protein1 > 0)
            break           
        except:
            print("The protein amount must be a non-negative integer.")

    # Request User input for carbohydrates, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_carb1 = float(input("Amount of carbohydrates required: "))
            assert(diet_carb1 > 0)
            break           
        except:
            print("The amount of carbohydrates required must be a non-negative integer.")

    # Request User input for fat, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_fat1 = float(input("Amount of fat required:  "))
            assert(diet_fat1 > 0)
            break           
        except:
            print("The fat amount must be a non-negative integer.")

    print("-----------------------------------------------------")

    ########################## end of Patient 1 ##############################################################


    ################################ Patient 2 ##########################################
    # Request User input for patient numbers, Handle non-positive integers and other invalid user input error for patient numbers 
    while True:
        try:
            patient_no2 = int(input("Enter a patient number to determine the dietary requirements : "))
            assert(patient_no2 > 0), "The patient number entered must be a positive integer."
            break           
        except:
            print("The patient number you enter must be a positive integer. Please try again.")

    # Request User input for protein, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_protein2 = float(input("Amount of protein required: "))
            assert(diet_protein2 > 0)
            break           
        except:
            print("The protein amount must be a non-negative integer.")

    # Request User input for carbohydrates, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_carb2 = float(input("Amount of carbohydrates required: "))
            assert(diet_carb2 > 0)
            break           
        except:
            print("The amount of carbohydrates required must be a non-negative integer.")

    # Request User input for fat, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_fat2 = float(input("Amount of fat required:  "))
            assert(diet_fat2 > 0)
            break           
        except:
            print("The fat amount must be a non-negative integer.")

    ########################## end of Patient 2 ##############################################################

    # Create list of protein, carb and fat for patients 

    total_patient_num = [patient_no1, patient_no2]
    diet_protein = [diet_protein1, diet_protein2]
    diet_carb = [diet_carb1, diet_carb2]
    diet_fat = [diet_fat1, diet_fat2]

    # Calculate average for the lists created above by using statistics 
    import statistics

    average_protein = statistics.mean(diet_protein)
    average_carb = statistics.mean(diet_carb)
    average_fat = statistics.mean(diet_fat)

    # Calculate average kilojoules 

    kilojoules = 4.18 * ( (4 * average_protein) + (4* average_carb) + (9.30 * average_fat)) 

    # Display the output to the users 
    print("===================================================")
    print("Total number of patients entered: ", len(total_patient_num))

    print("Patient %d" % patient_no1)
    print("\n","   Amount of protein (g) required: ", diet_protein1, "\n","   Amount of carbohydrates (g) required: ",diet_carb1 ,"\n","   Amount of fat required: ", diet_fat1) 


    print("Patient %d" % patient_no2)
    print("\n","   Amount of protein (g) required: ", diet_protein2, "\n","   Amount of carbohydrates (g) required: ",diet_carb2 ,"\n","   Amount of fat required: ", diet_fat2) 

    print("-----------------------------------------------------")
    print("Averages: ", "\n", 
        "Protein (g): ", format(average_protein, ",.2f"), "\n", 
        "Carbohydrates (g): ", format(average_carb, ",.2f"), "\n",
        "Fat (g): ", format(average_fat, ".2f"), "\n", 
        "Kilojoules (kJ): ", format(kilojoules, ",.2f"), "\n")

if __name__ == "__main__": diet_log()
    # print(diet_log("patient no"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-14 12:07:46

你可以以一种通用的方式定义你的列表:

代码语言:javascript
复制
total_patient_num = []
diet_protein = []
diet_carb = []
diet_fat = []

目前,如果要添加n个用户,则必须重复相同的代码n次。当您看到这样的模式时,它会提示您应该对代码进行抽象。要解决这个问题,您可以简单地将代码放入一个函数中,如下所示:

代码语言:javascript
复制
def get_user_input():
    while True:
        try:
            patient_no_value = int(input("Enter a patient number to determine the dietary requirements : "))
            assert(patient_no_value > 0), "The patient number entered must be a positive integer."
            total_patient_num.append(patient_no_value)
            break           
        except:
            print("The patient number you enter must be a positive integer. Please try again.")

    # Request User input for protein, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_protein_value = float(input("Amount of protein required: "))
            assert(diet_protein_value > 0)
            diet_protein.append(diet_protein_value)
            break           
        except:
            print("The protein amount must be a non-negative integer.")

    # Request User input for carbohydrates, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_carb_value = float(input("Amount of carbohydrates required: "))
            assert(diet_carb_value > 0)
            diet_carb.apend(diet_carb_value )
            break           
        except:
            print("The amount of carbohydrates required must be a non-negative integer.")

    # Request User input for fat, Handle non-positive integers and other invalid user input error 

    while True:
        try:
            diet_fat_value = float(input("Amount of fat required:  "))
            assert(diet_fat_value > 0)
            diet_fat.append(diet_fat_value)
            break           
        except:
            print("The fat amount must be a non-negative integer.")

    print("-----------------------------------------------------")

每次调用该方法时,它都会在每个列表上创建一个新条目。

你也可以考虑使用一个类来表示你的用户。

票数 0
EN

Stack Overflow用户

发布于 2019-12-14 11:58:05

从寻找看起来非常相似的代码开始。例如,围绕input语句执行的while循环看起来非常相似。尝试将它们转换为带有参数的函数,这些参数用于使它们不同的部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59332172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档