Pythonごはんを使うと、料理とプログラミングを同時に楽しめます。どっちも一緒にやりたいことありますもんね。ないですか?ほんと?絶対?でもほら、料理という身近なものをPythonで表現することで、プログラミングを始めたての人も勉強になるっていうか、ね?
ええっと、たとえばピザだとこんな感じです。
import random import time from itertools import cycle from threading import Thread from PIL import Image, ImageDraw, ImageFont class Dough: def __init__(self): self.ingredients = ["flour", "yeast", "salt", "water", "olive oil"] self.state = "raw" def knead(self): print("Kneading the dough... 🌾") time.sleep(random.uniform(0.5, 1.5)) self.state = "kneaded" print("Dough is now kneaded. 🍞") def rest(self): print("Letting the dough rest... 🛌") time.sleep(random.uniform(1.0, 2.0)) self.state = "rested" print("Dough has risen beautifully! 🎈") class Sauce: def __init__(self): self.ingredients = ["tomatoes", "garlic", "olive oil", "salt", "basil"] self.state = "raw" def simmer(self): (略)
もうちょっと短いやつだと、たとえば卵をかき混ぜるのが、
# 卵をかき混ぜる eggs = ['卵黄', '卵白'] random.shuffle(eggs)
だったり、野菜を切るのが、
# 各野菜の最初の半分をカット veggies = ['にんじん', '玉ねぎ', 'じゃがいも'] cut_veggies = [veggie[:len(veggie)//2] + '...' for veggie in veggies]
だったり、
# スパイスを適当にミックス spices = ['塩', 'こしょう', 'クミン', 'ターメリック'] spice_mix = " ".join(random.sample(spices, len(spices)))
とか、
# 食パンの2文字目以降を取り出してトースト bread = "食パン" toasted_bread = bread[slice(1, None)] + 'トースト'
みたいなことですね。それをピザとか唐揚げ弁当とかコンビニおにぎりとかポテチ(ただし箸で食べる)とかでやるわけです。結果はオブジェクト指向になることが多いですね。え、あ、はい、そうですね。さっきの料理のリストはPerlpelixityに「プログラマが好きそうな料理で打線組んで」とお願いしたものをもとにしました。
ちなみにRubyでも書いてくれますし、なんならRustやらKotlinもイケますが、Brainf*ckは「料理を作る手順は複雑すぎるからこんな制約の多い難解プログラミング言語じゃ無理」とNGでした。ただ、「代わりにHello, World!を書きますね」とか言い出して……。
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-. ------------.<++++++++.--------.+++.------.--------.>+.
ふーん、やるじゃん。
と思ったけどこれが出力するのって"Hello, world!"なんですが(wが小文字)。