quarta-feira, 31 de dezembro de 2014

Random e Interface - Parte II

No post ANTERIOR, fizemos uma interface e um gerador de números aleatórios. Bom, havia alguns problemas no código.

Erros:

A lista não ficava ordenada, um usuário gostaria de que seu jogo estivesse em ordem crescente.
A lista poderia apresentar números repetidos, imagine o usuário indo jogar e seu código apresentava um, dois ou mais números repetidos.

Esses erros são comuns quando não analisamos o que o usuário poderá fazer. E sabe eles sempre fazem coisas que não acreditamos.

Enfim, vamos melhorar nosso código.

Código antigo ( somente será necessário modificar a função):

#funcao gerar
def gerar():
    listasena=range(6) 
    for i in range(0,5):
        listasena[i]=random.randrange(1,60)
    
    mlbl = Label(text=listasena).pack()



Novo código


#funcao gerar
def gerar():
    listasena = random.sample(range(60),6)
    listasena.sort()
    mlbl = Label(text=listasena).pack()

O que foi modificado?

Foi acrescentado o:

listasena = random.sample(range(1,60),6)

Agora com essa linha, não precisa mais da função for. Definimos o range(1,60) que vai de 1-60, e depois da virgula definimos quantos números aleatórios queremos. Basicamente uma linha nos salvou. E a linha:



listasena.sort()

coloca a lista em ordem.

Bom, isso deixa nosso código pronto para usar.

Código:

from Tkinter import *
import random

#funcao gerar
def gerar():
    listasena = random.sample(range(1,60),6)

    listasena.sort()
    mlbl = Label(text=listasena).pack()

#janela
mJanela = Tk()
mJanela.geometry("200x200")
mJanela.title("Sena")
#janela

#botao
mbtn2 = Button(text = 'Gerar', command = gerar).pack()
#botao

mJanela.mainloop()

terça-feira, 30 de dezembro de 2014

Random e Interface

Imagine que você queira implementar a função random junto à uma interface, e que ao clicar de um botão pelo usuário seria apresentado seis valores para ele jogar na Sena.

Bom, apesar de simples a ideia é um bom treino.

Vamos utilizar o código para criar uma lista com seis valores aleatórios.

#code
import random

#criando a lista com seis valores
k=range(6)

#for para colocar seis numeros aleatorios na lista
for i in range(0,5):
    numero = random.randrange(1, 60);
    k[i] = numero

#apresentar a lista nova
print 'os seis valores: ', k
#code


E o código para desenhar uma janela na tela.


#codigo
from Tkinter import *

mGui = Tk()
mGui.geometry("450x450")
mGui.title("Exemplo")
myButton = Button(text='botao').pack()

mGui.mainloop()#somente necessario no Windows
#codigo


A proposta será juntar esses dois códigos.

Vamos começar. 

 Para que aconteça alguma coisa ao clicar do botão, deve-se acrescentar o código command:


myButton = Button(text='botao'  , command = gerar  ).pack()


O gerar será o nome da função que será chamada ao evento clicar sobre o botão.
 A função será essa:


#funcao gerar
def gerar():
    listasena=range(6) 
    for i in range(0,5):
        listasena[i]=random.randrange(1,60)
    
    mlbl = Label(text=listasena).pack()


Bom, ao clicar no botão será chamada a função gerar, que cria uma lista com seis valores, e os mesmos são trocados por valores aleatórios de 1-60. 
Após isso temos a a linha:


mlbl = Label(text=listasena).pack()

Que chama uma Label que seu texto será o conteúdo da lista.

 

Cada vez que o botão gerar é clicado aparecerá uma linha com código. Ainda tem que se arrumar algumas coisas no código. Depois continuamos.

Código completo:


#codigo

from Tkinter import *
import random

#funcao gerar
def gerar():
    listasena = range(6)
    for i in range(0,5):
        listasena[i]=random.randrange(1,60)
    mlbl = Label(text=listasena).pack()

#janela
mJanela = Tk()
mJanela.geometry("200x200")
mJanela.title("Sena")
#janela

#botao
mbtn2 = Button(text = 'Gerar', command = gerar).pack()
#botao

mJanela.mainloop()
#codigo



Random

Imagine que você precise de um numero aleatório. Bom, em Python isso acaba sendo tranquilo até, pois, temos a função random.

Exemplo:

#code
import random
numero = random.randrange(1, 60);
#code

Nesse exemplo o numero 1 e 60, serão de onde até onde os números serão gerados, e a variável 'numero' será onde o mesmo será armazenado.

Bom, imagine que você queira criar um programa que crie um jogo, de seis números aleatórios (MegaSena é pura coincidência rs).

O legal que achei é poder armazenar os seis números aleatórios em uma lista.

Exemplo:

#code
import random

#criando a lista com s
k=range(6)

#for para colocar seis numeros aleatorios na lista
for i in range(0,5):
    numero = random.randrange(1, 60);
    k[i] = numero

#apresentar a lista nova
print 'os seis valores: ', k
#code

Ainda há uma falha, pois, pode-se haver números repetidos. Depois completo. abs

Interface grafica - parte 2

Imagine agora que você queira colocar algo em sua janela. O básico é um botão, pois, é onde o usuário terá sua primeira iteração.

No Tkinter a sintaxe para botões é bem simples

#code
myButton = Button().pack()
#code

Com esse código simples você implementa um botão em sua janela.

#codigo
from Tkinter import *


mGui = Tk()
mGui.geometry("450x450")
mGui.title("Exemplo")
myButton = Button(text='botao').pack()

mGui.mainloop()#somente necessario no Windows
#codigo

Eu acrescentei o text = 'botao' no segundo código para acrescentar que dentro dos parenteses do Button é onde coloca-se os códigos de cor, texto e evento.



Outro código acrescentado foi o:

mGui.title("Exemplo")

Que coloca um nome na sua janela.



sexta-feira, 26 de dezembro de 2014

Interface gráfica

Uma das coisas que acho mais legal em programar é poder desenvolver um aplicativo com interface para o usuário. Particularmente sou muito visual, prefiro que meus programas sejam voltados para o usuário. Pois, em suma será para eles que será fornecido nosso trabalho.

Em Python temos a biblioteca Tkinter, eu prefiro usar alguma IDE para interface gráfica, mas neste primeiro momento estou usando o modo texto. É um pouco demorado, mas ajuda.

Tkinter

Vamos mostrar o código para uma janela simples.

#codigo
from Tkinter import *

mGui = Tk()
mGui.geometry = ('420x380')
mGui.mainloop()
#codigo

Simples e eficiente.


O código mGui.geometry = ('420x380'), é o que define o tamanho da janela. Tente muda-lo ou remover esse código para verificar como sua janela terá outra dimensão.

Funcao

No mundo da programação as funções são de extrema importância, pois, devemos deixar o código mais limpo. E para mim essa é uma das vantagens da função.

Vamos logo ao exemplo.

Exemplo 1:


def temp():
    d = 2
    return d


print temp()

Aqui temos um caso em que o print chama a função temp()
 que retorna o valor d e será imprimido 2 na tela. Simples mas eficiente.

Outro caso é onde você define um valor a ser utilizado na função temp().

Exemplo 2:


def temp(c):
    d = 2*c
    return d

print temp(2)

A função temp() agora recebe um valor de 2, e dentro dela o 
valor 2 valerá c. Sendo retornado o valor de d que será c*2.

Funções ajudam a deixar o código mais limpo.


Matrizes

Imagine que você tenha uma matriz 2x2, ou lista como chamam.

1 2
2 4
2 5
4 5
5 6

E que estão separadas por um espaço.
Isso é bem comum de se trabalhar, essa lista está salva em um arquivo .txt, ou outro.
Utilizando o código anterior.


matriz = [ map(float, line.split()) for line in file('nome do arquivo.extencao') if
line.strip() ]

Podemos salvar essa lista em matriz, e o que podemos fazer com ela depois?
Bom, temos inúmeras possibilidades.

Mas, uma coisa que acho interessante é podermos separar essa lista 2x2 em duas 1x1. Existe inúmeras maneiras de fazer isso, a que gostei, foi utilizando a função FOR.



FOR


#split matriz2x2 para duas matrix1x1
matrizx=range(0,len(matriz))
matrizy=range(0,len(matriz))

for z in range(0, len(matriz)):
    matrizx[z]=matriz[z][0]
    matrizy[z]=matriz[z][1]
#split matriz2x2 para duas matrix1x1

Nesse caso, teremos duas listas matrizx e matrixy e ainda temos a matrix 2x2.