LoginSignup
0
1

More than 5 years have passed since last update.

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

Posted at

同僚とLoto6購入について会話していたところ、12個の数字を選んで8組購入しているという方がいたので、それをツール化しました。
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()


0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1