Pythonista 3でLoto6購入数列案生成ツールを作ったよ

同僚とLoto6購入について会話していたところ、12個の数字を選んで8組購入しているという方がいたので、それをツール化しました。
pythonの勉強がてら作ってみましたので、こうした方が良いという所はおっしゃっていただけると幸いです。
こういうの作ってって言う方もおっしゃっていただくと私の勉強の励みになります。
なお、ツール使っても当たる保証はありません。


```python:code.py
from objc_util import *
import ui
import console
from numpy import *
from operator import itemgetter  #配列操作

main_view = ui.View()
label = ui.Label()
buttons12List = []
buttonsList = []

buttons12Bk = 0
buttonsBk = 0

buttons12Flg = False
buttonsBkTitle = '0'

def main():
	global main_view
	global label
	global buttons12Bk
	global buttonsBk
	
	console.clear()
	
#View
	main_view = ui.View(frame=(0,0,375,667))
	main_view.name = 'Loto6用数列生成'
	main_view.background_color = 'white'		

#Buttons12
	cnt = 1
	width_height = int(main_view.width / 9)
	width_margin = int((main_view.width - (width_height * 6)) / 7)
	buttonType = 1
	for y in range(2):
		for x in range(6):
			createButton((x * width_margin) + width_margin + (x * width_height),(y * 2) + 5 + (y * width_height)+5,width_height,width_height,cnt,buttonType)
			cnt+=1
	yMargin = 2 * width_height + 20
#Buttons
	cnt = 1
	width_height = int(main_view.width / 10)
	width_margin = int((main_view.width - (width_height * 10)) / 11)
	buttonType = 2
	for y in range(5):
		for x in range(10):
			if cnt <= 43 or cnt==50:
				createButton((x * width_margin) + width_margin + (x * width_height),(y * 2) + yMargin + (y * width_height)+5,width_height,width_height,cnt,buttonType)
			cnt+=1
	yMargin = yMargin + 5 * width_height + 20
	
#Label
	label = ui.Label(frame=(0,yMargin,main_view.width,667-yMargin))
	label.background_color = (200,255,204,1)
	label.text_color = 'black'
	label.alignment = ui.ALIGN_LEFT
	label.number_of_lines = 0
	label.text = '  使い方\n    ◼️数字12個生成\n\t・◼️数字タップ後●数字タップ\n\t・●数字タップ後◼️数字タップ\n\t・◼️数字タップ後◼️数字タップで入換\n    ▼ボタン押下で購入案8組生成\n  補足\n    ●数字は2回タップで色反転します\n    数字考案の参考までにお使いください\n    iPhone7で開発しています\n\n\n\n\n\n\n'
	main_view.add_subview(label)

#View表示
	main_view.present('sheet')
	main_view.wait_modal()

#initialize
	buttons12Bk = 999
	buttonsBk = 999
	return 

def createButton(x,y,width,height,cnt,buttonType):
	global main_view
	global buttons12List
	global buttonsList
	
	button = ui.Button()
	button.frame = (x,y,width,height)
	if buttonType == 1:						#buttons12
		button.title = str(cnt)
		button.action = button12_tapped
		button.corner_radius = 3
		button.border_color = 'blacke'
		button.border_width = 2
		button.background_color = (100,100/255,120,1)
		button.name = str(100 + cnt)
		button.tint_color = 'black'
		buttons12List.append(button)
		main_view.add_subview(buttons12List[cnt - 1])
	else:
		if cnt == 50:					#▼ボタンのとき
			button.title = '▼'
			button.action = create_tapped
		else:
			button.title = str(cnt)
			button.action = button_tapped
		button.corner_radius = width / 2
		button.border_color = (0,122/255,1,1)
		button.border_width = 2
		button.background_color = 'white'
		button.name = str(200 + cnt)
		button.tint_color = (0,122/255,1,1)
		if cnt == 50:
			main_view.add_subview(button)
		else:
			buttonsList.append(button)
			main_view.add_subview(buttonsList[cnt - 1])		
	return


def button12_tapped(sender):
	global buttons12Bk				#タップしたボタンの記憶用
	global buttonsBk
	global buttons12Flg
	global buttons12List
	
	#下部マル数字エリアがタップされている場合(値退避エリア<>999)
		#sender.title = 値退避エリア
		#値退避エリア=999
	#下部マル数字エリアがタップされていない場合(値退避エリア==999)
		#タップボタン記憶用 = sender.name - 100 - 1				#後で参照するために添字を退避
		
		
	#print(buttonsBk , buttons12Bk)
	if buttonsBk == 0 and buttons12Bk == 0:
		buttonsBk = 999
		buttons12Bk = 999
		buttons12Flg = False
	
	if buttons12Flg == True:
		bkTitle = sender.title
		sender.title = buttons12List[buttons12Bk].title
		buttons12List[buttons12Bk].title = bkTitle
		buttons12Flg = False
	
	elif buttonsBk == 999:
		buttons12Bk = int(sender.name) - 100 - 1
		buttons12Flg = True
	else:
		sender.title = str(buttonsBk)
		buttonsBk = 999
	return 

def button_tapped(sender):
	global buttons12List
	global buttons12Bk
	global buttonsBk
	global buttons12Flg
	global buttonsBkTitle
	
	#上部数字エリアがタップされている場合(タップボタン記憶用<>999)
		#buttons12List[タップボタン記憶用].title = sender.title
		#タップボタン記憶用 = 999
	#上部数字エリアがタップされていない場合(タップボタン記憶用==999)
		#値退避エリア = sender.title	
		
	if buttonsBk == 0 and buttons12Bk == 0:
		buttonsBk = 999
		buttons12Bk = 999
		buttons12Flg = False
		buttonsBkTitle = '0'
	
	if int(buttonsBkTitle) == int(sender.title):
		if int(int(sender.name)/100) == 2:
			sender.background_color = (0,122/255,1,1)
			sender.tint_color = 'white'
			sender.name = str(int(sender.name) + 100)
		else:
			sender.background_color = 'white'
			sender.tint_color = (0,122/255,1,1)
			sender.name = str(int(sender.name) - 100)
	else:
		buttonsBkTitle = sender.title
		
	if buttons12Bk == 999:
		buttonsBk = int(sender.title)
		buttons12Flg = False
	else:
		buttons12List[buttons12Bk].title = sender.title
		buttons12Bk = 999
		buttons12Flg = False
	return 
	

def create_tapped(sender):
	global label
	global buttons12List

	numList = []
	
	for i in buttons12List:
		numList.append(int(i.title))
	
	label.text = '\t数列\t\t\t\t\t    合計\t  奇数\t  偶数\n'
		
	#以下、組1
	getItem=itemgetter(0,3,5,6,8,9)(numList)
	infoPrint(getItem)
				
	#以下、組2
	getItem=itemgetter(0,2,3,7,10,11)(numList)
	infoPrint(getItem)
	
	#以下、組3
	getItem=itemgetter(0,2,4,5,7,9)(numList)
	infoPrint(getItem)
	
	#以下、組4
	getItem=itemgetter(0,4,6,8,10,11)(numList)
	infoPrint(getItem)
	
	#以下、組5
	getItem=itemgetter(1,2,4,5,9,11)(numList)
	infoPrint(getItem)
	
	#以下、組6
	getItem=itemgetter(1,2,4,6,7,9)(numList)
	infoPrint(getItem)
	
	#以下、組7
	getItem=itemgetter(1,3,7,8,10,11)(numList)
	infoPrint(getItem)
	
	#以下、組8
	getItem=itemgetter(1,3,5,6,8,10)(numList)
	infoPrint(getItem)
	
	label.text = label.text + '\n\n\n\n\n'
	return 
	
def infoPrint(sender):
	global label
	
	zeroNineList = [0] * 10
	oddEven = [0] * 2
	for i in sender:
		zeroNineList[i%10] += 1
		if i%2 == 0:
			oddEven[0] += 1
		else:
			oddEven[1] += 1
		
	label.text = label.text + '\t' + ('{:02}  {:02}  {:02}  {:02}  {:02}  {:02}'.format(*sender))+ '\t' + '=' + '\t' + str(sum(sender)) + '\t\t' + str(oddEven[1]) + '\t\t' + str(oddEven[0]) + '\n'
	
	

if __name__ == '__main__':
	main()
	
	
```