Vamos começar então a série de postagens de implementação de algoritmos!
Hoje, para iniciar a série vou deixar aqui pra vocês um script que gera matrizes.
Uma grande parte do algoritmos que vamos ver nos próximos artigos trabalham em cima de dados matriciais, então é a partir das matrizes que começaremos.
O Script que apresento a seguir nos possibilita criar matrizes com dados aleatórios, digitar os valores linha a linha, ou digitar já a matriz inteira. Esta matriz será salva como um arquivo texto formatado de forma que cada linha da matriz ocupe uma linha do arquivo e os elementos da matriz serão separados por espaços.
#!/usr/bin/env python
# -*- coding:utf8 -*-
'''
Created on 27/11/2013
@author: julio
'''
from os import system
from random import randrange
import random
import string
menu_dict = {
1:'criar_matriz_aleatoria()',
2:'criar_matriz_linha()',
3:'ler_matriz()',
0:'sair()'
}
menu_str = '''Gerador de Matrizez
Escolha a opção desejada:
1 - Criar uma matriz com dados aleatórios
2 - Criar uma matriz digitada linha a linha
3 - Criar uma matriz digitada inteiramente
0 - Sair
>> '''
def cls():
x = system('clear')
if x!=0:
system('cls')
def gerar_matriz(linhas, colunas, a, b):
return [[randrange(a, b) for i in xrange(colunas)] for j in xrange(linhas)]
def recebe_num_colunas():
while True:
try:
return input('Insira o número de colunas')
except:
print('\nO valor digitado não é um número válido\n\n')
def recebe_num_linhas():
while True:
try:
return input('Insira o número de linhas')
except:
print('\nO valor digitado não é um número válido\n\n')
def ler_linhas():
print(
'''Insira os dados da matriz linha a linha
Digite os valores separados por espaços
Pra finalizar, digite somente ENTER''')
matriz = []
while True:
linha = raw_input('>>')
try:
linha = [eval(x) for x in linha.strip().split()]
except:
print('\nOs dados não foram digitados da forma correta.'+
' Insira a linha novamente\n\n')
continue
if len(linha)==0:
return matriz
matriz.append(linha)
def ler_numero_linhas():
while True:
try:
return input('Insira o número de linhas da matriz\n>> ')
except:
print('\nO número digitado não é válido. Tente novamente\n\n')
def ler_numero_colunas():
while True:
try:
return input('Insira o número de colunas da matriz\n>> ')
except:
print('\nO número digitado não é válido. Tente novamente\n\n')
def ler_range_de_valores():
while True:
string = raw_input(
'''Insira o intervalo de valores para os elementos da matriz
Use a forma (a, b)
>> ''')
try:
return eval(string)
except:
print('\nOs valores não foram digitados no padrão correto.'+
' Tente novamente\n\n')
def ler_matriz():
matriz = None
while True:
try:
matriz = eval(raw_input('Digite os dados da matriz na forma'+
' [[a1, a2,...,an],[b1,b2,...,bn],...,[m1,m2,...,mn]]'))
except:
print('\nA matriz não foi digitada da forma correta\n\n')
salvar_matriz(matriz)
def gera_caractere_aleatoria():
return random.choice(string.ascii_uppercase + string.digits)
def salvar_matriz(matriz):
nome_mat = 'matriz'+''.join(
gera_caractere_aleatoria() for x in range(5))+'.dat'
f = open(nome_mat,'w')
mat = ''
for i in xrange(len(matriz)):
for j in xrange(len(matriz[0])):
mat += str(matriz[i][j])+' '
mat+='\n'
f.write(mat)
f.close()
def criar_matriz_aleatoria():
a, b = ler_range_de_valores()
linhas = ler_numero_linhas()
colunas = ler_numero_colunas()
matriz = gerar_matriz(linhas, colunas, a, b)
salvar_matriz(matriz)
def criar_matriz_linha():
matriz = ler_linhas()
salvar_matriz(matriz)
def sair():
exit(0)
def mostra_menu():
while True:
opcao = -1
try:
opcao = input(menu_str)
except:
cls()
print('\nA opção digitada não é um número válido\n\n')
continue
try:
eval(menu_dict[opcao])
except Exception as e:
cls()
print('\nA opção digitada não é uma opção válida\n\n')
if __name__ == '__main__':
mostra_menu()
Procurei criar o script da forma mais intuitiva possível, espero que possam entendê-lo facilmente!
Qualquer dúvida, fiquem à vontade para comentar, guardem este script para os próximos posts, e até a próima!
Abraços!

Nenhum comentário:
Postar um comentário