Calc. Bowling score2

ボウリングのアベレージを算出しリスト表示するプログラムを変更しました。

スペア率、ストライク率を算出するようにしました。

【画面構成】

手書きで見栄えが良くないですがご了承ください。

Sp%,St%がスペア、ストライク率です。

SpNum,StNum.は、各ゲームのスペア、ストライク数です。

【基本動作】

プログラムを実行すると、まず、csvファイル(ゲーム番号、スコア、スペア数、ストライク数)を読み込み、それをリスト表示します。

画面上部の新しいスコア入力部に、スコア、スペア数、ストライク数を入力し、「add data」ボタンをクリックすると、新しいゲームデータを追加し表示します。同時に、csvファイルにも追記します。

【ソースコード】

srctohtmlのて変換しましたが、インデントが少しずれていますのでご了承ください。

  1. #A program that calculates the average score of bowling games
  2. #Input_file name is “b_score2.csv” (csv_file)
  3. #Don’t add new_line to final_data.
  4. import ui
  5. import csv
  6. new_score = 0
  7. t_sc = 0                    #total score
  8. a_sc = 0                    #average score
  9. g_num = 0                    #number of games
  10. G_MAX = 500                #Max. game nums
  11. gn_lst = [0] * G_MAX            #game num. list
  12. sc_lst = [0] * G_MAX            #score list
  13. ts_lst = [0] * G_MAX            #total score 
  14. av_lst = [0] * G_MAX            #average list
  15. sp_lst = [0] * G_MAX            #spare num. list
  16. st_lst = [0] * G_MAX            #strike num. list
  17. spr_lst = [0] * G_MAX            #spare ratio list
  18. str_lst = [0] * G_MAX            #strike ratio list
  19. ret = [(”,”,”,”)] * G_MAX
  20. def initData():
  21.     for i in range(0,G_MAX):
  22.         spr_lst[i] = 0
  23.         str_lst[i] = 0
  24. def readData():
  25.     global g_num
  26.     global ret
  27.     fr = open(“b_score2.csv”)                #open file
  28.     rp = csv.reader(fr)                            #for read csv
  29.     for rd in rp:
  30.         print(rd)    
  31.         if rd == []:
  32.             break    
  33.         else:
  34.             if g_num > G_MAX:                        #check Max num.(for mem.)
  35.                 break
  36.             print(rd[0], rd[1], rd[2],rd[3])
  37.             ret[(g_num)*4] = rd[0]            #for check
  38.             ret[(g_num)*4+1] = rd[1]        #for check
  39.             ret[(g_num)*4+2] = rd[2]
  40.             ret[(g_num)*4+3] = rd[3]
  41.             gn_lst[g_num] = rd[0]                #set game num. list
  42.             sc_lst[g_num] = rd[1]                #set score list
  43.             sp_lst[g_num] = rd[2]                #set spare list
  44.             st_lst[g_num] = rd[3]                #set strike list
  45.             g_num += 1
  46.     fr.close()
  47.     return ret
  48. def renewTableView(tv,lst):
  49.     lstdata = ui.ListDataSource(“”)        #clear list
  50.     tmp_lst = [‘0’] * (g_num)                    #malloc table
  51.     for i in range(0,g_num):                    #include title
  52.         tmp_lst[i] = lst[i]                            #data copy
  53.     lstdata.items = tmp_lst                        #set items of game number list
  54.     tv.data_source = lstdata                    #set source
  55.     tv.reload_data()                                    #display data
  56. #Display game num. and score
  57. def displayGameAndScore():
  58.     #Game Number
  59.     renewTableView(gn_tv, gn_lst)
  60.     renewTableView(sc_tv, sc_lst)
  61. #Display total score and average
  62. def displayAverage():
  63.     #calc. total_score and Average
  64.     for i in range(0,g_num):                #to LastData
  65.         if i == 0:                                        #first data
  66.             ts_lst[0] = sc_lst[0]
  67.             av_lst[0] = sc_lst[0]                #same top data
  68.         else:                                                    #2nd.—
  69.             ts_lst[i] = str(int(ts_lst[i-1]) + int(sc_lst[i]))
  70.             av_lst[i] = str(round(int(ts_lst[i]) / (i+1)))
  71.     #Total Score to tableview
  72.     renewTableView(total_tv, ts_lst)
  73.     #Average to tableview
  74.     renewTableView(ave_tv, av_lst)
  75.     print(“game_num=”,g_num)                    #for check
  76. def displaySpareAndStrike():
  77.     renewTableView(sp_tv, sp_lst)
  78.     renewTableView(st_tv, st_lst)
  79. def displaySpareAndStrikeRatio():
  80.     global g_num
  81.     #calc. Ratio
  82.     tsp = 0
  83.     tst = 0
  84.     for i in range(0,g_num):                #to LastData
  85.         if i == 0:                                        #first data
  86.             spr_lst[0] = int(sp_lst[0])*10        #num/10*100=num*10(%)
  87.             str_lst[0] = int(st_lst[0])*10        #num/10*100=num*10(%)
  88.             tsp = int(sp_lst[0])
  89.             tst = int(st_lst[0])
  90.         else:                                                    #2nd.—
  91.             spr_lst[i] = str(round((tsp + int(sp_lst[i]))*10/(i+1)))
  92.             str_lst[i] = str(round((tst + int(st_lst[i]))*10/(i+1)))
  93.             tsp += int(sp_lst[i])
  94.             tst += int(st_lst[i])
  95.     #SpareRatio to tableview
  96.     renewTableView(spr_tv, spr_lst)
  97.     #StrikeRatio to tableview
  98.     renewTableView(str_tv, str_lst)    
  99. def writeData(nd, sp, st):
  100.     global g_num
  101.     print(“g_num before write=”, g_num)
  102.     fw = open(‘b_score2.csv’,’a’)
  103.     wp = csv.writer(fw,lineterminator=’\n’)
  104.     ad_data = [”,”,”,”]                                    #append data
  105.     gn_lst[g_num] = ad_data[0] = str(g_num+1)
  106.     sc_lst[g_num] = ad_data[1] = nd
  107.     sp_lst[g_num] = ad_data[2] = sp
  108.     st_lst[g_num] = ad_data[3] = st
  109.     ts_lst[g_num] = str(int(ts_lst[g_num-1]) + int(sc_lst[g_num]))
  110.     av_lst[g_num] = str(round(int(ts_lst[g_num]) / (g_num+1)))
  111.     g_num += 1                #increment here. because for display 0 to g_num-1
  112.     renewTableView(gn_tv, gn_lst)
  113.     renewTableView(sc_tv, sc_lst)
  114.     renewTableView(total_tv, ts_lst)
  115.     renewTableView(ave_tv, av_lst)
  116.     displaySpareAndStrike()
  117.     displaySpareAndStrikeRatio()
  118.     print(“game num after write=”,g_num)                                        #for check
  119.     print(“add data=”, ad_data[0],ad_data[1],ad_data[2],ad_data[3])        #for check
  120.     wp.writerow(ad_data)
  121.     fw.close()
  122. #Add new data proc.
  123. def addData(sender):
  124.     res = 0                                        #input data is OK
  125.     nd = nd_tf.text
  126.     if nd == ”:                            #check blank
  127.         print(“Input new score!”)
  128.         res = -10
  129.     else:
  130.         if int(nd) == 0:                    #check zero
  131.             print(“Input-score is 0!”)
  132.             res = -20
  133.         else:
  134.             if int(nd) > 300:                    #check over 300
  135.                 print(“Input score is over 300”)
  136.                 res = -30
  137.     sp = nsp_tf.text
  138.     if sp == ”:                            #check blank
  139.         print(“Input new spareNum!”)
  140.         res = -110
  141.     else:
  142.         if int(sp) > 10:                    #check over 10
  143.             print(“Input spareNum is over 10”)
  144.             res = -130
  145.     st = nst_tf.text
  146.     if st == ”:                            #check blank
  147.         print(“Input new strikeNum!”)
  148.         res = -210
  149.     else:
  150.         if int(st) > 12:                    #check over 300
  151.             print(“Input strikeNum is over 12”)
  152.             res = -230
  153.     print(nd, sp, st)
  154.     if res == 0:
  155.         writeData(nd,sp,st)                            #display new data and write to file
  156. v = ui.load_view()
  157. v.present(‘sheet’)
  158. nd_tf = v[‘textfield1’]            #text field1 for new score
  159. nsp_tf = v[‘textfield2’]            #text field1 for new spareNum.
  160. nst_tf = v[‘textfield3’]            #text field1 for new strikeNum.
  161. gn_tv = v[‘tableview1’]            #table_view1 for display game_num
  162. sc_tv = v[‘tableview2’]            #table_view1 for display score
  163. sp_tv = v[‘tableview3’]            #table_view1 for display spare
  164. st_tv = v[‘tableview4’]            #table_view1 for display strike
  165. total_tv = v[‘tableview5’]    #table_view1 for display total score
  166. ave_tv = v[‘tableview6’]        #table_view1 for display average
  167. spr_tv = v[‘tableview7’]            #table_view1 for display spare ratio
  168. str_tv = v[‘tableview8’]            #table_view1 for display strike ratio
  169. initData()
  170. r_data = readData()                    #read csv-file and set data
  171. print(r_data)
  172. displayGameAndScore()                #display game-score to tableview
  173. displayAverage()                        #display total-score and average to tableview
  174. displaySpareAndStrike()            #display num. and % of spare and strike
  175. displaySpareAndStrikeRatio()

【csvファイル】

28ゲーム分を入力した後のcsvファイルです。

数ゲーム分入力しておいて、残りはこのプログラムを使用して、1ゲームずつ画面入力し、csvファイルを更新していきました。

注意)

まだデバグが十分でありませんが、実用上、これで使えそうなので、ここまでで公開します。

不具合がある場合は、適宜修正してお使いください。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Bowling

前の記事

Bowling score update
Bowling

次の記事

Average of Pro-Bowlers