1
+ import pandas as pd
2
+ import re
3
+ from chinese_num_transform import chinese_to_arabic
4
+ chinese_char_dict = {
5
+ '〇' : 0 , '一' : 1 , '二' : 2 , '三' : 3 , '四' : 4 , '五' : 5 , '六' : 6 , '七' : 7 , '八' : 8 , '九' : 9 , '零' : 0 ,
6
+ '壹' : 1 , '贰' : 2 , '叁' : 3 , '肆' : 4 , '伍' : 5 , '陆' : 6 , '柒' : 7 , '捌' : 8 , '玖' : 9 , '貮' : 2 , '兩' : 2 ,
7
+ }
8
+ def load_xlsx (file_name = 'menu.xlsx' ):
9
+ xls = pd .ExcelFile (file_name )
10
+ df = xls .parse (xls .sheet_names [0 ])
11
+ df = df .T
12
+ # print(df)
13
+ # print(df.to_dict())
14
+ return df .to_dict ()
15
+
16
+ def write_xlsx (file_name = 'menu.xlsx' ):
17
+ menu = {
18
+ "item" :["滷肉飯" ,"豆花" , "燒肉" , "雞腿" ],
19
+ "price" :[1 , 2 , 3 , 4 ],
20
+ }
21
+ df = pd .DataFrame (data = menu )
22
+ # df = (df.T)
23
+ # print (df)
24
+ df .to_excel (file_name )
25
+
26
+ def process_data_to_menu (data_dict :dict ):
27
+ menu_dict = dict ()
28
+ for key in data_dict :
29
+ menu_dict [data_dict [key ]['item' ]]= data_dict [key ]['price' ]
30
+ # print(menu_dict)
31
+ return menu_dict
32
+
33
+ def process_price_with_order (menu_dict , order ):
34
+ # format is 多少個什麼和多少個什麼
35
+ order = re .split ('和|個' , order )
36
+
37
+ # using stack to process item and amount
38
+ price_dict = dict ()
39
+ top = None
40
+ for item in order :
41
+ if item .isdigit ():
42
+ if top == None :
43
+ top = item
44
+ else :
45
+ if item in chinese_char_dict :
46
+ item = chinese_to_arabic (item )
47
+ price_dict [top ] = {'amount' :item , 'price' :None }
48
+ top = None
49
+ else :
50
+ if top == None :
51
+ top = item
52
+ else :
53
+ if top .isnumeric ():
54
+ top = chinese_to_arabic (top )
55
+ top = int (top )
56
+ price_dict [item ] = {'amount' :top , 'price' :None }
57
+ top = None
58
+
59
+ total = 0
60
+ for item in price_dict :
61
+ if item in menu_dict :
62
+ price_dict [item ]['price' ] = price_dict [item ]['amount' ] * menu_dict [item ]
63
+ total += price_dict [item ]['price' ]
64
+ none_list = []
65
+ for item in price_dict :
66
+ if price_dict [item ]['price' ]== None :
67
+ none_list .append (item )
68
+
69
+ print (menu_dict )
70
+ print (price_dict )
71
+ # return total, none_list
72
+ return sum_up_total_line (total , none_list )
73
+
74
+ def sum_up_total_line (total , none_list ):
75
+ total = format (total , "," )
76
+ line = '總共是' + str (total ) + '元。'
77
+ if len (none_list )> 0 :
78
+ line += '不過,我們沒有:'
79
+ for item in none_list :
80
+ line += item + ', '
81
+ return line
82
+
83
+ # write_xlsx()
84
+ # data_dict = load_xlsx('script/menu.xlsx')
85
+ # menu_dict = process_data_to_menu(data_dict)
86
+ # print(process_price_with_order(menu_dict, '100個火腿和7000個蛋糕'))
87
+ # print(process_price_with_order(menu_dict, '兩千萬個雞腿和兩個蛋糕'))
0 commit comments