1

食品の栄養レベルを計算するプログラムを作成しようとしています.このデータがあるとします(間違っている可能性があります)

10 grams of bread has 68 mg sodium.
1 medium slice is 50 grams.

1 cup of milk has 98 mg sodium
1 cup of milk is 236 ml(or 244 grams)
which means 10 grams of milk has 0.004 grams of Sodium

ユーザーは、食べたパンのスライス数またはグラム数を入力するか、牛乳の場合は何カップまたは何mlの牛乳を飲んだかを入力できます

では、データ構造をどのように設計すればよいでしょうか。グラムなどの単一の単位を内部的に保持し、スライス、ml、カップなどをそれに変換する必要がありますか?

    food details ={ 
     'whitebread':{'unit':10,'slice':50,'sodium':0.068},
     'milk':{'unit':10,'cup':244,'sodium':0.004},...
     }
4

2 に答える 2

1

単純な表現はタプルと呼ばれます。本格的なオブジェクト指向設計を必要としない限り、それらは問題ありません。

from collections import namedtuple

details = namedtuple('details', 'name sodium amount unit')
food = namedtuple('food', 'details amount unit')
unit = namedtuple('unit', 'name weight')

gram = unit('gram', 1)
slice = unit('slice', 50)
cup = unit('cup', 244)

bread = details(name='bread', sodium=68,  amount=10, unit=gram)
f_bread = food(details=bread, amount=1, unit=slice)

milk = details(name='milk', sodium=98, amount=1, unit=cup)
f_milk = food(details=milk, amount=10, unit=gram)


for f in (f_bread, f_milk):
    total = 1.0 / 1000 * f.amount * f.unit.weight * f.details.sodium / f.details.amount / f.details.unit.weight
    print(
        "%d %s of %s has %0.3f grams sodium" % 
        (f.amount, f.unit.name, f.details.name, total))

出力:

1 slice of bread has 0.340 grams sodium
10 gram of milk has 0.004 grams sodium

私は実際の食物摂取量から食物の詳細と単位を切り離しました. ある種のパンはおそらく何度も食べられます。

于 2013-05-17T06:28:04.400 に答える