Alguém me ajuda estou com dificuldades para ordenar uma lista no pycharm [RESOLVIDO]

1. Alguém me ajuda estou com dificuldades para ordenar uma lista no pycharm [RESOLVIDO]

Paulo Henrique Bobak
STX

(usa Outra)

Enviado em 09/10/2018 - 15:54h








O programa recebe um arquivo txt com os seguientes valores
1-1 2-1 3-1 4-1 5-1 6-1 7-1 8-1 9-1 10-1
1-2 2-2 3-2 4-2 5-2 6-2 7-2 8-2 9-2 10-2
1-3
10-3
4-3 2-1 3-3 1-1
9-1
1-0 2-3 10-3
1-0 2-0 3-0 4-0 5-0 6-0 7-0 8-0 9-0 10-0
1-0 2-0 3-0 4-0 5-0 6-0 7-0 8-0 9-0 10-0
9-2 8-1 5-1 7-2
1-2 2-2 3-2 4-2
1-1 2-1 3-1 4-1 5-1 6-1 7-1 8-1 9-1 10-1
cada linha representa uma hora
o numero antes do hífen refere-se a vaga
depois do hífen o numero representa o tipo de veiculo sendo 1 para moto que vale 3, 2 para carro que vale 5 e 3 para caminhão que vale 10.
a lista arrecadaValor guarda o total por vaga e a contVagas mostra as vagas
o código está quase pronto mas estou tendo uma certa dificuldade em mostrar os valores de forma ordenada de maior para menor.
Agradeço desde já pela ajuda.

estacionamento = open("entrada.txt", "r")
vagas = estacionamento.readlines()
arrecadaValor = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
acumulaValor = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
cont=0

for linha in vagas:

linha = linha.replace("\n","")
listaa = str.split(linha," ")
contVagas = len(listaa)
a=0
b=0
c=0

while a < contVagas:
listab = str.split(listaa[ a ],"-")
c =int(listab[0])
c -=1
if listab[0]=="0":
while b < 10:
arrecadaValor[ b ] += acumulaValor[ b ]
b += 1
elif listab[1] == "1":
acumulaValor[ c ] = 3
elif listab[1] == "2":
acumulaValor[ c ] = 5
elif listab[1] == "3":
acumulaValor[ c ] = 10
elif listab[1] == "0":
acumulaValor[ c ] = 0
a += 1
c = 0
if listab[0]!="0":
while b < 10:
arrecadaValor[ b ] += acumulaValor[ b ]
b += 1
contVagas=1
while contVagas <= 10:
print("{} - {}".format(contVagas, arrecadaValor[contVagas - 1]))
cont += arrecadaValor[contVagas-1]
contVagas+=1
print("TOTAL:{}".format(cont))
estacionamento.close()




  


2. MELHOR RESPOSTA

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 20/10/2018 - 01:04h

A maneira que organizou o código está dificultando esta parte.
Segue um código de sugestão:
# define dicionário com o valor de cada tipo de veículo
valores = {'0': 0, '1': 3, '2': 5, '3': 10}
# inicializa dicionário
estacionamento = {}
# inicializa um totalizador
total = 0
# inicializa uma lista
estatisticas = []

# variáves de configuração
# ordenar pela vaga = 0 / ordenar por giro = 1 / ordenar por valor = 2 / ordenar pela média = 3
ordem = 0
# modo crescente = 0 / ordem decrescente = 1
reverso = 0

# comando que abre arquivo para leitura e automaticamente fecha
with open("entrada.txt", "r") as horas:
horas = horas.read().splitlines() # neste comando lê as linhas e já retira o /n

# separa as informações da hora (linha) em vagas
for hora in horas:
vagas = hora.split()
# separa cada vaga das vagas
for vaga in vagas:
vaga = vaga.split('-') # retira os hífens
# se a vaga não estiver vazia registra no dicionário estacionamento
if vaga[1] != '0':
if vaga[0] not in estacionamento:
estacionamento[vaga[0]] = [(vaga[1], valores[vaga[1]])]
else:
estacionamento[vaga[0]].append((vaga[1], valores[vaga[1]]))

# lê o dicionário e cria uma lista totalizando as informações
for k, v in estacionamento.items():
subtotal = 0
for val in v:
subtotal += val[1]
total += subtotal
estatisticas.append((int(k), int(len(v)), int(subtotal), int(subtotal) / int(len(v))))

# imprime o resultado
print("=" * 25)
print("VAGA GIRO VALOR MÉDIA")
print("-" * 25)
for valores in sorted(estatisticas, key=lambda orderby: orderby[ordem], reverse=reverso):
print("{:2d} {:5d} {:6d} {:7.2f}".format(valores[0], valores[1], valores[2], valores[3]))
print("-" * 25)
print("TOTAL:{:9d}".format(total))
print("=" * 25)

Abraço

3. Re: Alguém me ajuda estou com dificuldades para ordenar uma lista no pycharm [RESOLVIDO]

Paulo Henrique Bobak
STX

(usa Outra)

Enviado em 23/10/2018 - 09:59h

Valeu pela ajuda






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts