Ir ao conteúdo
  • Cadastre-se

Python exercício de arquivos python


Ir à solução Resolvido por Midori,

Posts recomendados

210266580_ex2lista7.png.74c9e531d7a9e309790fe6fd0a028c88.png

o Arquivo tá no formato

Nome, Numero do DRE, Código da disciplina, nota, código da disciplina, nota e assim por diante. Cada linha contendo essas informações sobre cada aluno

 

eu fiz dessa forma :

def questao(arquivo,codigo):
  Arq = open(arquivo,'r')
  linha = Arq.readline()
  dre = [1]
  lista = []
  
  while linha!='':
    if codigo in linha:
      Arq.close()
      lista.append(dre)
      return lista
    linha = Arq.readline()
  Arq.close()
print(questao('alunos.txt','MAB114')) 
      

pensei que esse dre[1] ia me retornar ao numero do dre completo, mas ele tá retornando a segunda letra da primeira string :x

 

Link para o comentário
Compartilhar em outros sites

@Felipe2719 Assim só está verificando uma vez se o código está na linha. Veja que você fecha o arquivo na primeira condição verdadeira e retorna a lista com outra lista (dre é uma lista com apenas um elemento de valor 1). Feche o arquivo só no fim da função fora do loop (depois de ler todas as linhas) e retorne a lista com as strings.

Link para o comentário
Compartilhar em outros sites

def questao(arquivo,codigo):
  Arq = open(arquivo,'r')
  linha = Arq.readline()
  dre = linha[1]
  lista []
  
  while linha!='':
    if codigo in linha:
      lista.append(dre)
    linha = Arq.readline()
  Arq.close()
  return lista

@Midori agora ele tá retornando a quantidade certa, porém ainda n entendi porque ele ta pegando o 2 elemento ao invés de pegar a string inteira

['e','e','e','e','e',]

 

Link para o comentário
Compartilhar em outros sites

15 minutos atrás, Felipe2719 disse:

agora ele tá retornando a quantidade certa, porém ainda n entendi porque ele ta pegando o 2 elemento ao invés de pegar a string inteira

Ao atribuir readline o conteúdo será uma string da linha do arquivo, lembre-se que para pegar uma letra de uma string você só tem que colocar a posição da letra entre colchetes e é isso que você está fazendo na atribuição de dre. Essa variável não é necessária, se quiser retornar uma lista com a linha completa p.ex, apenas adicione a linha: lista.append(linha)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Midori Era isso mesmo, obrigado. Eu tinha visto esse método split mas não tinha entendido como funcionava direito.

Agr to com dificuldade em pegar somente os DRE dos alunos que tiraram notas iguais ou maiores que 5 nessa disciplina dada por argumento.

A nota vem logo em seguida da disciplina no arquivo . Se puder me ajudar de novo 🥺

meu código por enquanto ficou assim

def questao(arquivo,codigo):
  Arq = open(arquivo,'r')
  linha = Arq.readline()
  lista = []
  
  while linha!='':
    if codigo in linha:
      dre = linha.split(',')[1]
      lista.append(dre)
    linha = Arq.readline()
  Arq.close()
  return lista

 

Link para o comentário
Compartilhar em outros sites

@Midori eu cheguei a  fazer isso mas não dá certo porque a posição da nota varia de acordo com a disciplina dada por argumento. 

com esse float(linha.split(',')[3] só daria certo pra primeira matéria, que fica na posição 2.

nota = float(linha.split(',')[codigo]+1))

teria que ser a posição do código + 1, mas eu sei que isso que eu fiz não daria certo kkkk

Link para o comentário
Compartilhar em outros sites

  • Solução

@Felipe2719 Em uma linha tem várias disciplinas e a nota vem sempre na coluna seguinte. O split pode ser usado para criar uma lista da linha e assim fazer um loop nela e pegar sempre o elemento após o código. O append será nesse outro loop. Então seu código terá dois loops, um para a linha do arquivo e outro interno a esse referente a lista do split assim,

 

L = linha.split(',')
dre = L[1]
pos = 2
while pos < len(L):
    if L[pos] == codigo:
        nota = float(L[pos + 1])
        if nota >= 5:
            lista.append(dre)
    pos += 2

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Midori Novamente muito obrigado pela paciência.

Consegui terminar o código 🤗

toda vez que eu quiser acessar uma posição e o arquivo estiver separado por vírgulas, esse linha.split(',') vai servir. né ?

Obrigado.

Não entendi esse pos = 2 e o pos+=2 no final.

eu coloquei 0 e pos+=1 como você botou antes e retornou td certo

Link para o comentário
Compartilhar em outros sites

39 minutos atrás, Felipe2719 disse:

toda vez que eu quiser acessar uma posição e o arquivo estiver separado por vírgulas, esse linha.split(',') vai servir. né ?

O split é um método de strings, linha é apenas uma string, então serve para qualquer uma onde queira separar com o delimitador passado como argumento.

 

40 minutos atrás, Felipe2719 disse:

Não entendi esse pos = 2 e o pos+=2 no final.

Com 1 também dá certo, mas com 2 acho melhor porque o código começa da posição 2 e vai sempre de 2 em 2 na lista.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...