alves077 Posted October 1, 2013 at 11:19 PM Report #527108 Posted October 1, 2013 at 11:19 PM Boa noite, Sou iniciado em python, alguém me sabe dar uma ideia como leio um input até EOF em python com scanf? Com o scanf ou com qualquer função equivalente. Já fiz algumas experiencia mas não correram muito bem.. Obrigado pela atenção, alves077
thoga31 Posted October 1, 2013 at 11:23 PM Report #527110 Posted October 1, 2013 at 11:23 PM Até EOF? Isso é de um ficheiro. Explica melhor o que pretendes. Não estou a perceber a ideia de "ler até EOF". E não existe um scanf em Python. Knowledge is free!
Pedro C. Posted October 2, 2013 at 01:50 PM Report #527214 Posted October 2, 2013 at 01:50 PM End Of File (EOF). É possível e muito utilizado se não encontrares uma função de alto nível que o faça automáticamente. Também o scanf (estou a assumir o paralelo com o scanf do C++) pode ser feito (de maneira mais simples que o C). Dado que essa é uma pergunta muito recorrente nos foruns a resposta aparece muitas vezes. Vou seguir o exemplo deste: linha = [] # Estou a declarar uma lista vazia with open('caminho_do_ficheiro.ext') as ficheiro: # Estou a abrir uma variável (classe) de ficheiro for linha in ficheiro: # Este é um ciclo para fazer o loop sobre todas as linhas de ficheiro. a.append(linha) # Estou a acrescentar a linha (literalmente toda a informação dessa linha) à minha lista Com este código ficarias com um objecto lista (é como um array em C mas mais flexivel pois pode guardar informações de vários tipos no mesmo array alem de ter funções de pop, remove, etc.; ah, é também bastante mais pesado na memória portanto se o teu ficheiro for extenso avisa pois convem ter outro tipo de soluções). Cada posição da lista é uma string com tudo o que está nessa linha. Agora é importante perceber como funcionam os ciclos em Python. O ciclo "for" é diferente do "while", por exemplo. Repara neste seguinte exemplo: lista = ['a','b','c','d','e'] # lista com strings de letras for i in lista: # ciclo que tem uma variável "i" que não é um contador mas sim o próprio elemento da lista. print i # fazer o print (cout) para ver o que é o "i". O resultado do "print i" seria: a b c d e Isto implica que o "i" é na verdade o equivalente ao "lista" se o "i" fosse um contador (que não é...). Para usar um "for" com contador teriamos de fazer: for i in xrange(10): # o 10 é só para exemplo print i Este código faria print de numeros de 0 até 9 (o limite superior não pertence à contagem). Ou então utilizar o mais que comum ciclo "while": i=0 while i<10: print i i = i + 1 Isto tudo para se perceber como o código deste post está a funcionar. Outros comandos que te possam interessar são conversões de string (o que vai esta na lista são strings) para números. Para fazer a conversão de uma string de inteiro para um inteiro utiliza o comando "int" ( int(linha) ). Isto se apenas houver um inteiro por linha. Para doubles (float em Python) farias float(linha). E o mesmo para qualquer outro tipo de dados. Se tiveres mais um número por linha tens de fazer uma lista de listas onde a cada linha farias isto: linha.split(' ') (estou a separar uma string numa lista de strings separadas por whitespace), e depois converteres cada um individualmente. Se saires do Python nativo estas operações já estão feitas automaticamente em inúmeras bibliotecas (ver: http://www.numpy.org/). Qualquer dúvida avisa.
alves077 Posted October 3, 2013 at 09:39 PM Author Report #527549 Posted October 3, 2013 at 09:39 PM Boas, thoga31 o que queria dizer, se calhar não expliquei lá muito bem, fazendo a analogia com C, posso fazer um input até uma linha em branco por exemplo. Em C podia fazer um ciclo que percorre-se as linhas preenchidas até EOF. Sendo ficheiro ou não, por exemplo podia chegar a linha de comandos e com o executável de um ficheiro fazer teste > teste.txt. Onde o ficheiro teste.txt têm casos de input para o programa em C em questão. Basicamente é um input para o programa até uma linha em branco, até não encontrar mais nada, por isso chamei pelo EOF. Obrigado pela atenção, alves077
thoga31 Posted October 3, 2013 at 09:49 PM Report #527553 Posted October 3, 2013 at 09:49 PM Não sei se entendi bem o que queres, mas para ler o conteúdo de um ficheiro tens isto: f = open("directório", "r") # se já abriste o ficheiro e fizeste coisas com ele, tens de voltar ao início: f.seek(0) conteudo = [line[:-1] for line in f.readlines()] Knowledge is free!
alves077 Posted October 3, 2013 at 09:59 PM Author Report #527556 Posted October 3, 2013 at 09:59 PM Acho que com um exemplo explico melhor. Por exemplo quero ler uma sequencia do tipo 1 2 3 4 5 6 7 8 Até ele deixar uma linha em branco.
thoga31 Posted October 3, 2013 at 10:04 PM Report #527557 Posted October 3, 2013 at 10:04 PM Acho que com um exemplo explico melhor. Por exemplo quero ler uma sequencia do tipo 1 2 3 4 5 6 7 8 Até ele deixar uma linha em branco. Para facilitar a interpretação da tua última frase, podias dizer qual ser o resultado da leitura. De repente vejo duas leituras possíveis: lia apenas "1 2" ou lia tudo até ao fim, altura em que encontrava uma linha desprovida de conteúdo. Para quem está do lado de lá as coisas parecem simples e bem explicadas, mas o problema é que do lado de cá a cabeça não é a mesma e a sua actividade não é a mesma, e podem-se gerar várias interpretações, todas elas fundamentadas. Knowledge is free!
alves077 Posted October 3, 2013 at 10:12 PM Author Report #527558 Posted October 3, 2013 at 10:12 PM (edited) Tens razão, tenho explicado um bocado mal... O que o programa têm que fazer é simples, verificar sempre qual a diferença entre no número da coluna da esquerda com o número da coluna da direita. O que queria é que ele inseri-se a primeira linha e eu dentro de um ciclo lê-se o input tratando essa linha e desse logo o ouput e assim sucessivamente. E o programa acabava com uma linha em branco. Por exemplo 1 2 < 3 4 < 5 6 < 7 8 < (linha em branco) E acaba-se. Os simbolos é o output do programa e os números são o input. Obrigado pela atenção, alves077 Edited October 3, 2013 at 10:13 PM by alves077
thoga31 Posted October 3, 2013 at 10:18 PM Report #527560 Posted October 3, 2013 at 10:18 PM Isto para começar, a partir daqui deverás ser capaz de terminar. s="1 2\n3 4\n5 6\n7 8" linhas = s.split("\n") # linhas = ["1 2", "3 4", "5 6", "7 8"] Knowledge is free!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now