a) Crie uma função que, dados como parâmetro uma lista de registros de produtos ordenada crescentemente por nome de produto e um novo registro de produto, insere o novo registro na lista de forma a manter a ordenação. Um registro de produto é uma lista na forma ["nome do produto", "cor", preço]. Exemplo de registro de produto:
["Tênis New Balas", "pink", "359.99"]
b) Escreva um programa que lê uma sequência de registros de produtos e depois os exibe em ordem crescente de nome de produto.
def insere_ordenado(lista_produtos, novo_produto):
n = len(lista_produtos)
i = 0
# encontra a posição onde o novo produto deve ficar na lista
while i < n and lista_produtos[i][0] < novo_produto[0]:
i += 1
# aqui, i contém a posição onde o novo produto deve entrar na lista
lista_produtos.append([])
# desloca os elementos a partir da posiçao i uma posição a frente,
# para "abrir espaço" para o novo produto
k = len(lista_produtos) - 1 # é igual a k = n
while k > i:
lista_produtos[k] = lista_produtos[k-1]
k -= 1
# guarda o novo produto na posição correta
lista_produtos[i] = novo_produto
def main():
n = int(input("Digite o numero de produtos que serao fornecidos: "))
prods = []
for i in range(n):
print("*** Produto numero %d ***" %(i+1))
produto = []
produto.append(input("Digite o nome do produto: "))
produto.append(input("Digite a cor do produto: "))
produto.append(float(input("Digite o preco do produto: ")))
insere_ordenado(prods, produto)
for produto in prods: # igual a : for i in range(len(prods)):
print(produto) # print(prods[i])
######################
main()
Dizemos que uma matriz quadrada inteira é um quadrado máqgico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais. Exemplo de matriz quadrado-mágico:
8 | 0 | 7 |
4 | 5 | 6 |
3 | 10 | 2 |
Faça um programa que , dados um inteiro positivo n (n >= 1) e uma matriz quadrada An x n
, verificar se A é quadrado mágico.
def main():
n = int(input("Digite o numero de linhas da matriz A: "))
A = le_matriz(n,n)
# Verifica se matriz tem linhas ou colunas compostas por zeros
quadrado_magico = True
# A soma de referência será a soma dos números da linha 1 de A
soma_referencia = 0
for numero in A[0]:
soma_referencia += numero
# Verifica se a soma de cada uma das demais linhas dá igual à soma de referência
i = 1
while quadrado_magico and i < n: # Percorre as linhas de A a partir da segunda linha
soma_linha = 0
for numero in A[i]: # Para cada número na linha A[i], faça
soma_linha += numero # acrescente o número na soma da linha A[i]
if soma_linha != soma_referencia:
quadrado_magico = False
i += 1
# Verifica se a soma de cada uma das colunas dá igual à soma de referência
j = 0
while j < n and quadrado_magico: # Percorre as colunas de A
soma_coluna = 0
for i in range(n): # Percorre as linhas de uma dada coluna
soma_coluna += A[i][j]
if soma_coluna != soma_referencia:
quadrado_magico = False
j += 1
# obtém a soma de cada uma das diagonais
soma_diagonal_principal = 0
soma_diagonal_secundaria = 0
k = 0
while quadrado_magico and k < n:
soma_diagonal_principal += A[k][k]
soma_diagonal_secundaria += A[k][n-k-1]
k += 1
if soma_diagonal_principal != soma_referencia or soma_diagonal_secundaria != soma_referencia:
quadrado_magico = False
if quadrado_magico:
print("A matriz é um quadrado magico! :) ")
else:
print("A matriz não é um quadrado magico! :( ")
def le_matriz(m, n):
"""
(int, int) --> list
Funçao que recebe como entrada um número de linhas m
e um número de colunas n e então lê uma matriz de inteiros
de tamanho m x n, ou seja, uma lista contendo m listas
com n elementos cada. A matriz lida é devolvida como
valor de retorno da funçao.
"""
print("Digite os elementos da matriz de tamanho %dx%d:" %(m,n))
matriz = []
for i in range(m):
matriz.append([])
for j in range(n):
elemento = int(input("Elemento da %da. linha, %da. coluna: " %(i+1,j+1)))
matriz[i].append(elemento)
return matriz
#########################
main()