2013-02-27 2 views
0

저는 파이썬에 익숙하지 않으므로 간단한 매크로 영양분 계산기를 작성하여 연습하려고합니다. 다른 값들에 어떤 값을 어떻게 넘겨 줄지 잘 모르겠습니다. 여기 다른 유형의 여러 값을 다른 함수에 전달하는 방법

는 내가하고 싶은 것은 출력 사전 (Macro_dict),
모든 매크로의 합 ( Macro_sum)이 100
경우 그래서 나는 그것을 인쇄 할 수는

def Macro_input(): 
    Percent_protein = input("Percentage of Protein: ") 
    float(Percent_protein) 
    Percent_carb = input("Percentage of Carbohydrates: ") 
    float(Percent_carb) 
    Percent_fat = input("Percentage of Fats: ") 
    float(Percent_fat) 
    Macro_dict = {'Protein': Percent_protein, 'Carbohydrate': Percent_carb, 'Fats': Percent_fat} 
    Macro_sum = Percent_protein + Percent_carb + Percent_fat 
    return Macro_sum 

def Total_macro_check(Macro_sum): 

    #perhaps put all input into a dictionary? Macro['Protein':num, 'Carb':num, 'Fat':num] 

    if Macro_sum == 100: 
     print "You macronutrients percentages are \n Protein: "#, Macro_dict['Protein'], "%" #list for P/C/F --> %d 
    elif Macro_sum < 100: 
     print "Total percentages do not add up to 100. Please reenter percentages." 
    #go back to function that asks for Macros 
    elif Macro_sum > 100: 
     print "Total percentages surpass 100. Please reenter percentages." 
    #go back to function that asks for Macros 

def main(): 
    print "Please enter your macro-nutrients" 
    Total_macro_value = Macro_input() 

    Total_macro_check(Total_macro_value) 

if __name__ == "__main__": 
    main() 

내 코드입니다 그러나 나는 또한 Macro_sum이 100인지 확인하고 싶습니다.
이것은 Macro_sum 값을 Total_macro_check에 출력해야 함을 의미합니다. 내 Macro_input 기능은 Macro_sumMacro_dict,
을 반환하는 경우 Total_macro_check는 1 개 값을 허용하면서, 하나 개 이상의 값을 반환로 인해 내가 Total_macro_check에 출력을 사용할 수없는 것처럼

그러나 나는 생각합니다.

def main(): 
    print "Please enter your macro-nutrients" 
    Total_macro_value, Macro_dict = Macro_input() 

    Total_macro_check(Total_macro_value) 

답변

1

값을 더한 도우미 기능을 포함하는 클래스를 만듭니다

class MacroInput(object): 
    def __init__(self, protein, carb, fat): 
     self.protein, self.carb, self.fat = protein, carb, fat 

    def sum(self): 
     return self.protein + self.carb + self.fat 

당신은 Macro_input()이의 인스턴스를 만든 다음 주위 해당 인스턴스를 전달할 수 있습니다. def Total_macro_check(Macro_sum)은 다음과 같습니다.

def Total_macro_check(input): 
    sum = input.sum() 
    if sum == 100: 
     print "You macronutrients percentages are \n Protein:", input.protein, "%" #list for P/C/F --> %d 
    ... 
2

수정 Macro_input()은이 같은 두 변수에 반환 된 튜플 압축을 풀 수있는 주요 기능에 그리고 당신은 Macro_dict의 튜플 및 Macro_sum

def Macro_input(): 
    # your code 
    return Macro_sum, Macro_dict 

를 반환 보기. 나는이 줄이 생각하는 것처럼 행동하지 않는다고 생각합니다.

float(Percent_protein) 

네 떠 Percent_protein 캐스팅되지만 무엇이든 그 값을 할당 아니에요.

func가 있어야합니다. 당신이 원하는대로

def Macro_input(): 
    Percent_protein = float(input("Percentage of Protein: ")) 
    Percent_carb = float(input("Percentage of Carbohydrates: ")) 
    Percent_fat = float(input("Percentage of Fats: ")) 
    Macro_dict = {'Protein': Percent_protein, 'Carbohydrate': Percent_carb, 'Fats': Percent_fat} 
    Macro_sum = Percent_protein + Percent_carb + Percent_fat 
    return (Macro_dict,Macro_sum) 

는 이제 사전 및 합계를 반환합니다. 당신은 그들을 밖으로 얻을 수 있습니다.

(dict,sum) = Macro_input() 
4

귀하의 기능 Macro_Input은 다음과 같습니다

+0

내 코드가 더 멋지게 보입니다. 귀하의 의견에 감사드립니다! – Liondancer

+1

질문 제목에 대답하지 않지만 문제의 코드에 실제로 문제가 무엇인지 대답합니다. – James

+0

ahyeah 나는 너가 지금 실제로있는 것을 안다. 나는 그 문제와 그 질문의 맨 끝을 보지 못했을 때 그가 원하는 것을 돌려주지 않았기 때문에 각 개인의 금액을 출력하고 싶다고 생각했다. – James

관련 문제