湯婆婆は参照で落ちるから名前を書かない方がいい


千と千尋の神隠し

2019/08/16の金曜ロードショーでノーカットの『千と千尋の神隠し』が放送されました
いや〜よかった!
いつ見てもあれはいいですね!

「契約書だよ。そこに名前を書きな。働かせてやる。
その代わり嫌だとか、帰りたいとか言ったらすぐ子豚にしてやるからね。 

あの、名前ってここですか? 

そうだよもぅぐずぐずしないでさっさと書きな! 

まったく……つまらない誓いをたてちまったもんだよ。
働きたい者には仕事をやるだなんて…… 書いたかい? 

はい……あっ。 

フン。千尋というのかい? 

はい。 

贅沢な名だねぇ。 今からおまえの名前は千だ。
いいかい、千だよ。分かったら返事をするんだ、千!!」

というシーンを知っていますか?
Twitterを見つつ鑑賞していたら
https://twitter.com/SabanikiTofu/status/1162323952309424134?s=20
というツイートを目にしました
「これは面白い。たぶん湯婆婆は文字列の一文字目だけにしてるんだろう」と考えました

湯婆婆を作る

じゃあとりあえず湯婆婆を作ります

hot_water_old_lady.py
print("契約書だよ。そこに名前を書きな。働かせてやる。\nその代わり嫌だとか、帰りたいとか言ったらすぐ子豚にしてやるからね。\nそうだよもぅぐずぐずしないでさっさと書きな!\n\nまったく……つまらない誓いをたてちまったもんだよ。働きたい者には仕事をやるだなんて…… 書いたかい?")
name = input()
short_name = name[0]
print("はい…あっ。 \n\nフン。%sというのかい? \n\nはい。 \n\n贅沢な名だねぇ。 今からおまえの名前は%sだ。\nいいかい、%sだよ。分かったら返事をするんだ、%s!!"% (name, short_name, short_name, short_name))

はい終わり

$ python hot_water_old_lady.py
契約書だよ。そこに名前を書きな。働かせてやる。
その代わり嫌だとか、帰りたいとか言ったらすぐ子豚にしてやるからね。
そうだよもぅぐずぐずしないでさっさと書きな!

まったく……つまらない誓いをたてちまったもんだよ。働きたい者には仕事をやるだなんて…… 書いたかい?
千尋
はい…あっ。 

フン。千尋というのかい? 

はい。 

贅沢な名だねぇ。 今からおまえの名前は千だ。
いいかい、千だよ。分かったら返事をするんだ、千!!

はい、ちゃんと湯婆婆してますね
じゃあ名前を書かないでいきましょう

python hot_water_old_lady.py 
契約書だよ。そこに名前を書きな。働かせてやる。
その代わり嫌だとか、帰りたいとか言ったらすぐ子豚にしてやるからね。
そうだよもぅぐずぐずしないでさっさと書きな!

まったく……つまらない誓いをたてちまったもんだよ。働きたい者には仕事をやるだなんて…… 書いたかい?

Traceback (most recent call last):
  File "hot_water_old_lady.py", line 3, in <module>
    short_name = name[0]
IndexError: string index out of range

はい、湯婆婆が落ちましたね
文字列の""の0番目を参照したからですね

結論

湯婆婆は落ちる
cでやった人もいるらしいのでみなさんも湯婆婆作りましょう〜
https://twitter.com/cmpl_error/status/1162330445683412992?s=20

追記

2019/08/17 プログラム内のミスをご指摘いただき少し修正しました