EP0

EP0

por Marcelo Queiroz -
Número de respostas: 9

Boa tarde, pessoal!

Como mencionei na aula de hoje, o Enunciado do EP0 está no PACA, e a entrega deve ser realizada até as 23:55 desse domingo, 18/3/2018, no link que está disponível no bloco Exercício-Programa 0. Vocês podem realizar quantos envios quiserem até o prazo limite, e apenas a última versão será corrigida. Leiam com atenção o enunciado, e as Instruções para envio dos EPs (que são bem mais complicadas do que o enunciado, mas em compensação serão as mesmas para todos os EPs).

Aproveito para convidá-l@s a utilizar o fórum para postar quaisquer dúvidas que aparecerem. O uso do fórum é LIVRE! A única restrição que devemos sempre obedecer é não postar trechos de código do nosso próprio EP. Códigos relativos às aulas, exercícios do Coursera ou das aulas interativas, e em geral códigos não relacionados com tarefas que valem nota podem ser postados sem qualquer problema. Dúvidas sobre o EP também podem ser postadas, especialmente aquelas que surgirem por problemas no enunciado, interpretação de texto, etc.

Bom trabalho!

Marcelo

 

Em resposta à Marcelo Queiroz

Re: EP0

por Marcelo Queiroz -

P.S.: Ah, em tempo: para a realização do EP0 só poderão ser usados os recursos vistos em aula até hoje (13/3). Em particular, nada de "while"s ou outras coisas mais complicadas... basta int(), input(), print(), if...else... e expressões.

Em resposta à Marcelo Queiroz

Re: EP0

por Marcelo Queiroz -

Olás!

Pelo que pude perceber na aula de ontem, surgiram muitas estratégias diferentes para resolver o EP0, o que é ótimo! Gostaria de propor uma reflexão sobre as estratégias de solução, pois vejo que há aí também uma oportunidade boa de aprendizado.

A reflexão parte da seguinte pergunta: "se ao invés de números de 0 a 10 o computador tivesse que adivinhar números de 0 a 20, como eu adaptaria meu programa a esse novo cenário? e se os números fossem de 0 a 100?"

Pensem nessa pergunta da perspectiva de resolver o problema sem laços (while), como vocês já estão fazendo no EP0. Em particular, tentem imaginar:

  • quantas perguntas/instruções a mais seriam colocadas para o usuário?
  • quantas linhas de código extra seriam necessárias?
  • quão mais complexo ficaria o fluxo de execução (caminhos alternativos entre if's e else's)?

Não se preocupem: vocês não precisam alterar o que já fizeram no EP0 em função dessa reflexão. Aliás, o EP0 continua sendo para números de 0 a 10, seu foco não é nem eficiência nem concisão, não vale para a nota, etc, etc.

Boa reflexão e boa programação!

Marcelo

Em resposta à Marcelo Queiroz

Re: EP0

por Marcelo Queiroz -

Bom dia, pessoal! Espero que todos tenham conseguido fazer e entregar o EP0 ontem. Em breve receberemos comentários do monitor.

Dando sequência à reflexão que eu propus, segue uma possibilidade de solução do EP0. Essa foi a implementação usada para gerar as saídas que estão no enunciado, e foi acrescida de algumas linhas para permitir ao computador adivinhar números entre 0 e 127 (estão comentadas, basta descomentar).

print("Pense em um número n entre 0 e 10.")
# pede ao usuário o bit menos significativo de n
b0=int(input("O número é par (digite 0) ou ímpar (digite 1)? "))
# pede para o usuário fornecer os próximos bits da representação binária de n
if b0==1:
    print("Subtraia 1 do número.")
print("Divida o resultado por 2.")
b1=int(input("O número resultante é par (digite 0) ou ímpar (digite 1)? "))
if b1==1:
    print("Subtraia 1 do número.")
print("Divida o resultado por 2.")
b2=int(input("O número resultante é par (digite 0) ou ímpar (digite 1)? "))
if b2==1:
    print("Subtraia 1 do número.")
print("Divida o resultado por 2.")
b3=int(input("O número resultante é par (digite 0) ou ímpar (digite 1)? "))
n = b3*2**3+b2*2**2+b1*2+b0
# para fazer o programa funcionar para n=0,1,...,127, descomente abaixo:
# if b3==1:
#     print("Subtraia 1 do número.")
# print("Divida o resultado por 2.")
# b4=int(input("O número resultante é par (digite 0) ou ímpar (digite 1)? "))
# if b4==1:
#     print("Subtraia 1 do número.")
# print("Divida o resultado por 2.")
# b5=int(input("O número resultante é par (digite 0) ou ímpar (digite 1)? "))
# if b5==1:
#     print("Subtraia 1 do número.")
# print("Divida o resultado por 2.")
# b6=int(input("O número resultante é par (digite 0) ou ímpar (digite 1)? "))
# n = b6*2**6+b5*2**5+b4*2**4+b3*2**3+b2*2**2+b1*2+b0
print("O número que você pensou é",n,"?")
x=int(input("Digite 1 para sim, 0 para não: "))
if x==0:
    print("Até parece! Você que errou nas contas... kkkk")
else:
    print("Já consigo ler mentes... agora só me falta dominar o mundo! huahuahua")

Uma sugestão de exercício interessante é tentar reescrever esse mecanismo usando while. Por um lado, a repetição de linhas quase exatamente iguais sugere que esse mecanismo possa ser refatorado. Por outro lado, essa refatoração exigirá a solução de um outro desafio: ir construindo a resposta iterativamente, sem armazenar todas as respostas em variáveis diferentes (quem pensou que o desafio envolve usar vetores ainda não entendeu bem o espírito da brincadeira: é pra usar só o que vimos em aula piscando).

Boa programação!

Marcelo

Em resposta à Marcelo Queiroz

Re: EP0

por Pedro Gigeck Freire -

Gente, olá :D

To fazendo o ep e o funcionamento tá correto, só que estou tendo um problema com a quebra de linha que receio que atrapalhará a correção automática.
O que acontece é que o print quebra a linha e o input também quebra, então ao invés de printar, por exemplo:

O número resultante é par (digite 0) ou ímpar (digite 1)?1
Subtraia 1 do número.
Divida o resultado por 2.
O número resultante é par (digite 0) ou ímpar (digite 1)?0
Divida o resultado por 2.
(...)

O programa printa:

O número resultante é par (digite 0) ou ímpar (digite 1)?1
Subtraia 1 do número.
Divida o resultado por 2.

O número resultante é par (digite 0) ou ímpar (digite 1)?0
Divida o resultado por 2.

Quando termina o print ("Divida o resultado por 2.") Há uma quebra de linha e quando começa o input("O número resultante...") meio que quebra denovo todas as vezes que isso aparece

Não sei se fui muito claro mas queria saber se devo me preocupar para resolver isso / deveria saber como resolver isso.

Agradecidamente, eu ;D

Tags:
Em resposta à Pedro Gigeck Freire

Re: EP0

por André Shumhei Kato -

Passe o argumento end na função print.

e.g.: print("Divida o resultado por 2", end="")

O end permite você setar uma ending específica pra função print. O padrão é o newline (\n). Acredito que isso resolva o problema...

 

Em resposta à Pedro Gigeck Freire

Re: EP0

por Marcelo Queiroz -

Olá, Pedro!

Não há nenhum problema em você utilizar a solução sugerida pelo André. De fato há casos em que precisamos controlar melhor tanto o caractere separador entre expressões (com sep="" como postei no exemplo do Fibonacci) quanto o terminador (end=""). Isso dito, devo acrescentar que esse não é um desses casos... aquela saída do enunciado foi gerada por um programa em Python que só usa o que vimos em classe até a última 3a-feira. O problema do seu código (que sugere que haveria um print("") vazio antes da frase "O número resultante...") certamente pode ser corrigido sem o end="", caso você esteja no espírito de "caçador de bugs". Você também pode levar seu código na aula de 3a-feira e eu ou o Roberto te ajudamos.

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: EP0

por Daniela Gonzalez Favero -

Olá!

A linha "$ python3 ep0.py" colocada no exemplo deve estar no meu programa?  Porque se eu coloco e tento executar no terminal, dá SyntaxError...

Em resposta à Daniela Gonzalez Favero

Re: EP0

por Andrew Ijano Lopes -

Olá Daniela!

O trecho "$ python3 ep0.py" na verdade representa o comando que você usaria para executar o seu código em um terminal.

A primeira linha que o seu programa deve imprimir mesmo é "Pense em um número entre 0 e 10."

Abraços,

Andrew

Em resposta à Daniela Gonzalez Favero

Re: EP0

por Marcelo Queiroz -

Olá, Daniela!

Complementando a resposta do Andrew, se você estiver usando aquela interface "Idle" que eu mostrei na aula então você consegue rodar o seu código Python com a tecla F5 (enquanto estiver no editor de texto do Idle). Aprender a executar um programa Python no terminal é bem útil também, mas pode variar um pouquinho de um sistema operacional para o outro. No terminal do linux ou mac basta você ir até a pasta onde está o seu programa (com o comando "cd pastadoep0") e então rodar aquele comando "python3 nomedoseuep0.py" que aparecia no enunciado (ficou parecendo parte da saída, desculpe por isso!).

Abraço,

Marcelo