実現したいこと
今Pythonでリストについて学んでいるのですが、リスト内包表記の使い方がいまいち分からなくて、困っています。
以下のようなプログラミングを今作っています。
三つの原料でどの飲み物ができるかを出力するプログラミングです。
- 最後の2つの引数は飲み物のリストと原料のタプルのリスト
- 戻り値は、指定された3つの原料で作ることができる飲み物の名前
- 一致する飲み物が見つからない場合、関数は None を返す
- 3つ以上の原料を含む飲み物を作ることは可能だが、原料は3つしか提供されない
Expected output
python
1>>> find_drink("cachaca", "sugar", "lime", drinks, ingredients) 2"caipirinha" 3 4>>> find_drink("ice", "olives", "vodka", drinks, ingredients) 5"vodka martini" 6>>> find_drink("ice", "olives", "vermouth", drinks, ingredients) 7"vodka martini" 8 9>>> find_drink("white rum", "gin", "ice", drinks, ingredients) 10None 11
試したこと
all関数を使ってプログラミングを書かないといけないのですが、リスト内包表記とall関数の使い方がいまいち理解できず、これであっているのかもよくわかりません。
drinkname = [x for x in ingredients if all(w in x for w in list)] これは、インターネットで同じような書き方があったので少し変えていろいろ試してみましたが、どういう意味か理解できていません。
python
1def find_drink(ingredient1, ingredient2, ingredient3, drinks, ingredients): 2 for DRINK, INGREDIENTS in zip(drinks, ingredients): 3 list = [ingredient1, ingredient2, ingredient3] 4 drinkname = [x for x in ingredients if all(w in x for w in list)] 5 i = ingredients.index(drinkname) 6 return drinks[i] 7 8drinks = ["caipirinha", "mojito", "gin tonic", "vodka martini"] 9 10ingredients = [ 11 ("cachaca", "sugar", "lime"), 12 ("white rum", "sugar cane juice", "lime juice", "soda water", "mint"), 13 ("gin", "tonic water", "ice"), 14 ("vodka", "vermouth", "ice", "olives"), 15] 16 17print(find_drink("cachaca", "sugar", "lime", drinks, ingredients)) 18print(find_drink("ice", "olives", "vodka", drinks, ingredients)) 19print(find_drink("ice", "olives", "vermouth", drinks, ingredients)) 20print(find_drink("white rum", "gin", "ice", drinks, ingredients))
i = ingredients.index(drinkname)とreturn drinks[i]は間違っているのは分かっていますが、一応試したこととして書きました。
回答2件
あなたの回答
tips
プレビュー