Olá,
O enunciado do EP diz que devemos ler os Pokémons e o ataque desejado, durante a batalha, pela entrada padrão.
Para facilitar a execução do programa, redirecionei a entrada para arquivos contendo as informações sobre os Pokémons, mas ocorre um EOFError quando o primeiro input de ataque é pedido por conta da entrada ter ficado vazia.
Há algum modo de retornar a entrada padrão para o teclado após terminar de ler os arquivos? Ou devo pressupor que redirecionamento não deve ser usado?
A única solução que pensei foi passar os arquivos contendo os dados dos Pokémons por linha de comando, mas isso iria contra o que é pedido no enunciado.
Re: EOF obtido através de redirecionamento
Bom, eu fiz algo diferente.
Coloquei um diretório chamado billpc/ que contém todos os arquivos que fiz e quando a batalha começa mostra uma lista com todos os arquivos já carregados na forma:
N - [HP] Nome
Onde N é o número pra escolha, exemplo:
Temos os seguintes pokemons disponíveis:
1 - [8001] Chuck Norris
2 - [9] Rattata
3 - [5] Metapod2
4 - [5] Metapod
5 - [60] Charizard
Pode isso, Alfredo?
Re: EOF obtido através de redirecionamento
Oi André,
Mais uma vez legal a solução, mas de novo foge do nosso padrão. Note que na fase final é possível que você receba um pokémon que não esteja no seu billpc e isso tornaria impossível do seu programa batalhar.
O que acha de no seu menu que lista todos os conhecidos adicionar uma opção "Outros" que permite fazer a entrada como descrita no enunciado?
Re: EOF obtido através de redirecionamento
Posso modificar para trabalhar com arquivos, mas como ao menos dois arquivos são necessários usar um "< blastoise" não resolveria o problema. Assim como não gostaria de ficar digitando o caminho completo ao arquivo todas as vezes que fosse testar.
Então posso colocar pra ele carregar também dois arquivos passados por linha de comando e juntar no meu billpc?
Re: EOF obtido através de redirecionamento
O que te sugeri foi colocar uma opção do menu que siga o enunciado: (a entrada) "se
dará de forma linear pela entrada padrão, seguindo a ordem dos atributos (...)". Então seria um único arquivo com os dois pokémons para fazer o redirecionamento de entrada como você mencionou.
Eu entendo que isso pode ser chato, mas infelizmente se cada um implementar as mecânicas como quiser ignorando o enunciado, além de ficar impossível de corrigir os trabalho de uma turma com mais de 50 alunos, fica impossível realizar batalhas entre os programas já que cada um vai estar em uma regra diferente.
Então considere a sugestão, uma forte sugestão
Re: EOF obtido através de redirecionamento
Oi Leonardo,
O que acha de não redirecionar a entrada pelo Python e deixá-la sempre pelo teclado? Dessa forma, você ainda pode carregar os arquivos facilmente redirecionando eles pelo bash (http://www.gnu.org/software/bash/manual/bashref.html#Redirections) e ter a liberdade de usar o teclado caso queira.
Re: EOF obtido através de redirecionamento
Oi Rafael,
Obrigado pela dica. Até agora eu estava fazendo o seguinte para ler os arquivos:
cat pokemon1.txt pokemon2.txt | ./main.py
Para contornar o EOF que mencionei, a solução que meu grupo encontrou foi adicionar um '-' no final do cat, para que o stdin volte a ser o teclado:
cat pokemon1.txt pokemon2.txt - | ./main.py
Re: EOF obtido através de redirecionamento
Legal, só não esqueça de colocar isso no relatório para sabermos como rodar seu programa na hora de corrigir
Eu estou com o mesmo problema, mas pra mim isso n resolve pois o stdin.readlines() espera por um EOF para prosseguir com o programam as se eu mando o EOF no input() gera o erro.
Também não entendi direito como usar o bash no redirecionamento...
Alguem pode me ajudar?