Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

3. Lendo, escrevendo em arquivos e entendendo a pilha de execução

Na Aula 3 o Guilherme fala sobre um for onde contamos da linha ate o numero escolhido, que foi randomizado apartir da leitura da primeira linha de um arquivo texto.

for linha in 1..(numero_escolhido -1) arquivo.gets end palavra_escolhida = arquivo.gets.strip.downcase

Senao me engamo era algo assim mencionado acima, mas minha duvida é por que devo começar em 1, e depois inserir -1 ?

Este 1 nao seria nosso 8 no arquivo ? e incluido -1 caso eu tenha sortedado a palavra na linha 4, este -1 nao me retornaria da linha 3 ?

8
alura
casa do codigo
caelum
desenvolvedor
programador
software
refatorar
code smell
Após ler o número de linhas existentes:

arquivo = File.new("dicionario", "r")
total_de_palavras = arquivo.gets.to_i
Agora podemos sortear um número:

arquivo = File.new("dicionario", "r")
total_de_palavras = arquivo.gets.to_i
aleatoria = rand(total_de_palavras)
Agora vamos até a linha adequada, ignorando diversas delas:

arquivo = File.new("dicionario", "r")
total_de_palavras = arquivo.gets.to_i
aleatoria = rand(total_de_palavras)
for i = 1..aleatoria
    arquivo.gets
end
Finalmente lemos a palavra secreta, limpando ela, e fechamos o arquivo:

arquivo = File.new("dicionario", "r")
total_de_palavras = arquivo.gets.to_i
aleatoria = rand(total_de_palavras)
for i = 1..aleatoria
    arquivo.gets
end
palavra_secreta = arquivo.gets.strip.downcase
arquivo.close
5 respostas

Oi Eduardo,

Tiramos esse "-1" porque não queremos descartar a palavra escolhida.

O for só serve pra descartarmos as palavras anteriores.

#Descarta as linhas anteriores:
for i in 1..aleatoria -1
    arquivo.gets
end

#Pega a linha da palavra escolhida:
palavra_secreta = arquivo.gets.strip.downcase

Abraço!

Mas e se meu aleatória for linha 7, ele nao irá pegar a linha 6 ?

arquivo = File.new("dicionario", "r")
total_de_palavras = arquivo.gets.to_i
aleatoria = rand(total_de_palavras)
for i = 1..aleatoria
    arquivo.gets
end
solução!

Oi Eduardo,

Se o seu aleatória for na linha 7, o arquivo.gets de dentro do for pegará até a linha 6, descartando-as.

Quando saímos do for, rodamos mais uma vez o método arquivo.gets que assim pega a palavra certa:

palavra_secreta = arquivo.gets.strip.downcase

Abraço!

Entra em questão topicos de intervalo abertos e fechados, certo ?

No caso ele irpa randomizar um numero maximo para iterar, e irá pegar a ultima palavra dessa iteração, e colocar =1 seria para incluir esta ultima posição ?

Eduardo,

Exatamente! Se tiver mais alguma dúvida só falar.

Abraço!