今さら日本語の変数名などが使えるようになっていることに気づいたので、どこまで日本語で書けるか試してみました。
# -*- coding: utf-8 -*-
from おまじない import *
# 販売商品を作る
価格表 = 辞書()
価格表["りんご"] = 100
価格表["みかん"] = 50
価格表["メロン"] = 200
購入履歴 = リスト()
# 購入履歴を適当に作る
for 回数 in 連番リスト(10):
商品名リスト = 価格表.全部の名前をゲット()
商品名番号 = ランダムの数をゲット(0, 長さ(商品名リスト) - 1)
購入履歴.くっつける(リスト(商品名リスト)[商品名番号])
表示("=====購入履歴=====")
for 回数, 購入品 in 数えあげる(購入履歴):
表示("%d回目:%s" % (回数 + 1, 購入品))
# 支払合計を計算
支払合計 = 0
for 購入品 in 購入履歴:
支払合計 += 価格表[購入品]
表示("=====支払合計=====")
表示(支払合計)
出力
=====購入履歴=====
1回目:みかん
2回目:メロン
3回目:りんご
4回目:メロン
5回目:メロン
6回目:みかん
7回目:みかん
8回目:みかん
9回目:みかん
10回目:メロン
=====支払合計=====
1150
おまじない.py
日本語でプログラム書くためのおまじない
おまじない.py
# -*- coding: utf-8 -*-
import builtins
import random
_builtin_list = builtins.list
_builtin_dict = builtins.dict
# リスト置き換え用クラス定義
class リスト(_builtin_list):
くっつける = _builtin_list.append
リストをくっつける = _builtin_list.extend
いれる = _builtin_list.insert
消す = けす = _builtin_list.remove
取り出す = とりだす = _builtin_list.pop
全部消す = ぜんぶけす = _builtin_list.clear
探す = さがす = _builtin_list.index
数える = かぞえる = _builtin_list.count
並べる = ならべる = _builtin_list.sort
逆さに並べる = さかさにならべる = _builtin_list.reverse
コピー = _builtin_list.copy
# 辞書置き換え用クラス定義
class じしょ(_builtin_dict):
全部の名前と内容をゲット = ぜんぶのなまえとないようをゲット = _builtin_dict.items
全部の名前をゲット = ぜんぶのなまえをゲット = _builtin_dict.keys
全部の内容をゲット = ぜんぶのないようをゲット = _builtin_dict.values
全部消す = ぜんぶけす = _builtin_dict.clear
コピー = _builtin_dict.copy
ゲット = _builtin_dict.get
取り出す = とりだす = _builtin_dict.pop
名前と内容を飛び出す = なまえとないようをとりだす = _builtin_dict.popitem
組み込む = くみこむ = _builtin_dict.setdefault
合体する = がったいする = _builtin_dict.update
# 組込み関数別名定義
表示 = ひょうじ = print
長さ = ながさ = len
ランダムの数をゲット = ランダムのかずをゲット = random.randint
ランダムの少数をゲット = ランダムのしょうすうをゲット = random.random
連番リスト = れんばんリスト = range
数えあげる = かぞえあげる = enumerate
辞書 = じしょ
# 組込オブジェクト置き換え
builtins.list = リスト
builtins.dict = じしょ
def __test():
# 問題点の検証コード
data_list = list()
data_リスト = リスト()
data_内包表記リスト = []
print(["data_list", type(data_list)])
print(["data_リスト", type(data_リスト)])
print(["data_内包表記リスト", type(data_内包表記リスト)])
"""
出力
['data_list', <class '__main__.リスト'>]
['data_リスト', <class '__main__.リスト'>]
['data_内包表記リスト', <class 'list'>]
内包表記のリストが置き換えられない問題があるのが残念
"""
if __name__ == "__main__":
__test()
__test()
で試している通り内包表記のListやDictクラスが置き換えられないようなのが残念です。