Jump to content

Recommended Posts

Posted (edited)

estou a tentar resolver correctamente este exercicio mas parace não estar correcto

segundo o wikipedia o ano de 2012 é um ano bissexto de 366 dias

e quando coloco no meu programa 2012 que foi feito segundo as edicações dadas no exercicio em questão indica que não é bissexto logo o programa não está bem.

enunciado / exercicio:

um ano é bissexto, isto é tem 366 dias se for divisivel por 4. existem no entanto exceções: se for divisivel por 100 então não é bissexto. mas se tambem esta exceção tem uma exceção: se forem tambem divisiveis por 400 são bissextos. escreva um programa que determine se um dado ano é bissexto ou não.

a minha resolução segundo aquilo que percebi do enunciado:

def bissexto():

   ano = input ('ano:')

   if ano/4 == True:
       if ano/100 == True:
           if ano/400 == True:
               print 'bissexto'
           else:
               print 'nao bissexto'
       else:
           print 'bissexto'
   else:
       print 'nao bissexto'

if __name__=='__main__':
   bissexto()

o quê que estou a fazer mal?

Edited by thoga31
GeSHi
Posted

Estás a comparar inteiros (o resultado das divisões que fazes no programa) com Booleanos (True).

Para saber se um número é divisível por outro (é o que pretendes) tens que verificar se o resto da divisão é 0. Para obter o resto da divisão de x por y em Python, fazes x%y.

Não respondo a dúvidas por mensagem.

Posted

So para acrescentar ao que disso o pedrosorio, por exemplo para 2012

2012 / 4 da 503

e estas a comparar este 503 com True

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted (edited)

E acrescento só mais uma pequena coisa:

@msmsms, tu escreveste literalmente o que pensaste ao ler o enunciado, contudo isso nem sempre acontece na programação, pelo contrário. Por exemplo, pensaste "Se o ano for divisível por quatro então..." e escreveste logo "if ano/4 == True".

O problema é este: o que significa, em termos de programação, "se o ano é divisível por 4"? Significa aquilo que o @pedrosorio disse: o ano é divisível por 4 se o resto da divisão for zero. O que tens de comparar é se ano%4 é nulo (% é o operador que devolve o resto de uma divisão).

Além disso, podes optimizar o teu código reduzindo tudo a, praticamente, uma linha. Pensa um pouco no assunto 😉

Edited by thoga31

Knowledge is free!

Posted (edited)

Estás a comparar inteiros (o resultado das divisões que fazes no programa) com Booleanos (True).

Para saber se um número é divisível por outro (é o que pretendes) tens que verificar se o resto da divisão é 0. Para obter o resto da divisão de x por y em Python, fazes x%y.

hum, ainda nao entendi muito bem como trabalha essa coisa do resto %

vou tentar ''de novo''

E acrescento só mais uma pequena coisa:

@msmsms, tu escreveste literalmente o que pensaste ao ler o enunciado, contudo isso nem sempre acontece na programação, pelo contrário. Por exemplo, pensaste "Se o ano for divisível por quatro então..." e escreveste logo "if ano/4 == True".

O problema é este: o que significa, em termos de programação, "se o ano é divisível por 4"? Significa aquilo que o @pedrosorio disse: o ano é divisível por 4 se o resto da divisão for zero. O que tens de comparar é se ano%4 é nulo (% é o operador que devolve o resto de uma divisão).

Além disso, podes optimizar o teu código reduzindo tudo a, praticamente, uma linha. Pensa um pouco no assunto 😉

nesta fase para mim o importante é resolver as coisas correctamente, fazer os programas devolverem resultados correctos

a dimensão do código não é significante e eu sempre prefiro código bem detalhado ''tem mais valor para mim como aprendiz''

Estás a comparar inteiros (o resultado das divisões que fazes no programa) com Booleanos (True).

Para saber se um número é divisível por outro (é o que pretendes) tens que verificar se o resto da divisão é 0. Para obter o resto da divisão de x por y em Python, fazes x%y.

voltei a fazer de novo e agora 2012 deu bissexto

está tudo correcto na vossa openião, os if estão todos correctos?

def bissexto():

   ano = input ('ano:')

   if ano%4 == 0:
       if ano%100 == 0:
           if ano%400 == 0:
               print 'bissexto'
           else:
               print 'nao bissexto'
       else:
           print 'bissexto'
   else:
       print 'nao bissexto'

if __name__=='__main__':
   bissexto()

Edited by thoga31
GeSHi
Posted (edited)

Resto da divisão inteira de um número pelo outro. Ex:

2012/100 = 20 (se não fosse divisão inteira tinhas 20.12)

2012%100 = 12 (resto de 2012/100 é 12 - isto também significa que 2012 não é divisível por 100)

Prova:

2012 = 20*100 + 12

Edited by KTachyon
  • Vote 1

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Posted (edited)

Resto da divisão inteira de um número pelo outro. Ex:

2012/100 = 20 (se não fosse divisão inteira tinhas 20.12)

2012%100 = 12 (resto de 2012/100 é 12 - isto também significa que 2012 não é divisível por 100)

Prova:

2012 = 20*100 + 12

se esta minha ultima resolução está correcta podem dar o topico como resolvido

eu entendi bem a resolução que eu fiz espero estar mesmo 100% correcta

def bissexto():

   ano = input('ano:')

   if ano%4==0:
       if ano%100==0:
           if ano%400==0:
               print 'bissexto'
           else:
               print 'nao bissexto'
       else:
           print 'bissexto'
   else:
       print 'nao bissexto'

if __name__=='__main__':
   bissexto()
Edited by brunoais
geshi
Posted

Acho que assim está correto. Não vejo erros (nota: não testei)

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted (edited)

Também não testei, mas vi o código e está correcto.

@msmsms, eu entendo perfeitamente que queiras manter as coisas mais "extendidas" e com total despreocupação quanto à dimensão do código. Mas espero que não mantenhas este método para sempre, faz parte de um programador procurar resolver os problemas propostos não só de forma eficaz mas também, e ainda mais importante, de forma eficiente.

Boa continuação na tua aprendizagem. 🙂

# Python 3.x
def bissexto(ano):
   return (ano % 4 == 0 and (ano % 400 == 0 or ano % 100 != 0))

if __name__ == '__main__':
   if bissexto(int(input("Ano? "))):
       print("Bissexto")
   else:
       print("Não bissexto")
Edited by thoga31

Knowledge is free!

Posted (edited)

Também não testei, mas vi o código e está correcto.

@msmsms, eu entendo perfeitamente que queiras manter as coisas mais "extendidas" e com total despreocupação quanto à dimensão do código. Mas espero que não mantenhas este método para sempre, faz parte de um programador procurar resolver os problemas propostos não só de forma eficaz mas também, e ainda mais importante, de forma eficiente.

Acho que o que queres dizer é de forma compacta 🙂 A eficiência neste caso vai ser praticamente a mesma.

Edited by Triton

<3 life

Posted

Acho que o que queres dizer é de forma compacta 🙂 A eficiência neste caso vai ser praticamente a mesma.

Não, não. Ele refere-se mesmo a eficiência. Uma avaliação booleana é feita cerca de 200x mais rápido que um if (claro que varia muito de computador para computador) em python.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted (edited)

Não, não. Ele refere-se mesmo a eficiência. Uma avaliação booleana é feita cerca de 200x mais rápido que um if (claro que varia muito de computador para computador) em python.

processo de aprendizagem:

seja como for um modo de resolução mais claro para o cerebro tem sempre maior valor na minha avaliação (será melhor explicado ou defendido oralmente)

pós aprendizagem:

essas formas alternativas (menos legiveis) acho que só devem ser aplicadas quando se resolver desenvolver um produto e não em problemas primários como é este onde a principal intenção é a ''compreensão'' e não a preocupação de ficar mais leve ou mais rápido.

desde que percebi que sem saber fazer o mais legivel menos conseguiria fazer o menos legivel (compreendendo).

vejo que quêm se encontra mais à frente na programação não se recorda mais dos seus primeiros passos dai principalmente ''professores em programação'' não conseguirem ter grande qualidade ''obtiveram manias''.

a primeira ideia a utilizar num processo de resolução a um problema têm de ser a mais simples é essa a mais eficaz para compreender e se o cerebro que fez o programa não estiver desenvolvido de forma organizada o que ele fará para o computador fazer será igual ''algo não funcional'' e isso não será nada eficiente.

tenho apreciado que existe uma mistura de aprendizem e pós aprendizagem no ensino prático da programação (em aulas) que é brutal ou então que não exista ''ensino nenhum'' (alunos sentados nas carteiras só a fazer asneiras) e por isso é normal que grande parte de alunos em primeiro ano nas faculdades não consigam evoluir tão bem, mas os burros não são eles mas podem tornar-se iguais aqueles que os ensinam ''sem capacidade de ensinar novatos e incompetentes se se tornarem também eles professores mais tarde porque não vai existir uma boa referência tudo foi uma aprendizagem para cada apenas pessoal.

eu quero-me preparar para daqui a alguns anos começar a ensinar programação no ensino primário pois acredito que vai ser preciso de futuro todos termos algum conhecimento ao nivel da programação.

um professor de português não deve dizer a uma criança que professor se pode escreve apenas prof e basta, sem lhe dizer que antes disso é preciso aprender a escrever professor completamente, embora com prof se gaste menos papel, caneta e tempo na leitura.

Edited by msmsms
Posted (edited)

Não há, em área alguma, uma fase pós-aprendizagem. Está-se sempre a aprender, pelo que não compreendo a tua resistência em ver e estudar as soluções mais compactas que te vamos dando. E essa lengalenga dos professores de programação e mais não sei quê não tem cabimento no contexto do presente tópico e te tudo o que aqui foi dito.

Repara: nós ajudá-mos-te na tua resolução mais "legível", e após isso demos-te uma proposta de solução mais compacta para tu, se quisesses, a estudares e apreciares, mesmo que não fosse a solução que fosses apresentar na aula perante o professor.

Se mantiveres sempre a ideia de "é mais legível assim" e não te interessares, entretanto, em investigar soluções mais compactas, então nunca sairás do mesmo patamar.

Caso continues a achar que somos "contra" a solução mais legível e estamos a "impor" a solução mais compacta:

1) Verifiquei o teu código, e confirmei que estava correcto.

Também não testei, mas vi o código e está correcto.

2) Mostrei compreensão perante a tua preferência pela solução mais "legível", e acrescentei um conselho.

@msmsms, eu entendo perfeitamente que queiras manter as coisas mais "estendidas" e com total despreocupação quanto à dimensão do código. Mas espero que não mantenhas este método para sempre, faz parte de um programador procurar resolver os problemas propostos não só de forma eficaz mas também, e ainda mais importante, de forma eficiente.

Boa continuação na tua aprendizagem. 🙂

Por isso pára lá com estes posts enormes sobre aprendizagem e pós-aprendizagem que já se estão a tornar uma tradição da tua pessoa, sê humilde e vê bem que ninguém está contra a tua opção de resolução.

Em suma: não sejas pobre e mal agradecido. Vêm aqui as pessoas ajudar, ainda te dão um conselho, e levam um discurso destes na volta?

Cumprimentos.

Edited by thoga31

Knowledge is free!

Posted (edited)

Não há, em área alguma, uma fase pós-aprendizagem. Está-se sempre a aprender, pelo que não compreendo a tua resistência em ver e estudar as soluções mais compactas que te vamos dando. E essa lengalenga dos professores de programação e mais não sei quê não tem cabimento no contexto do presente tópico e te tudo o que aqui foi dito.

Repara: nós ajudá-mos-te na tua resolução mais "legível", e após isso demos-te uma proposta de solução mais compacta para tu, se quisesses, a estudares e apreciares, mesmo que não fosse a solução que fosses apresentar na aula perante o professor.

Se mantiveres sempre a ideia de "é mais legível assim" e não te interessares, entretanto, em investigar soluções mais compactas, então nunca sairás do mesmo patamar.

Caso continues a achar que somos "contra" a solução mais legível e estamos a "impor" a solução mais compacta:

1) Verifiquei o teu código, e confirmei que estava correcto.

2) Mostrei compreensão perante a tua preferência pela solução mais "legível", e acrescentei um conselho.

Por isso pára lá com estes posts enormes sobre aprendizagem e pós-aprendizagem que já se estão a tornar uma tradição da tua pessoa, sê humilde e vê bem que ninguém está contra a tua opção de resolução.

Cumprimentos.

com pós aprendizagem quis referir-me ao após arranque ou ao após inicio das coisas ''base'' bem aprendidas, eu acredito que sim existe uma aprendizagem ponto de partida (ex: na programação, na matemática, etc) que se vai evoluindo ''mas aquilo que era programação já se tinha compreendido o que era''

o pós aprendizagem para mim é um momento em que já se pode criar coisas (através de bases já suficientes) com real utilizade, coisas que fossem necessária e pode-se ficar por ai ou não (acredito que exista quêm se contente com aquilo que já sabe e ponto final e no máximo ás vezes ficará a relembrar alguma coisa (através da informação que já tinha) mas não em aprendizagem (quando não busca ou não quer mais informação a respeito de).

um exemplo disso são os anos escolares:

- pós aprendizagem no ensino primário: a pessoa fica capaz de escrever palavras e frases

(a aprendizagem claro que tem uma quantidade de pós alguma coisa aprendida e dentro da aprendizagem também uma quantidade de etapas) após isto até podemos ficar a saber escrever essas palavras e frases noutras linguas para além da portuguesa ou podemos perfeitamente não ficar a saber e andar a escrever e a falar na mesma se quiser-mos ficar apenas dentro da nossa fronteira)

portanto é importante aqui na programação ir-se por etapas até chegar ao após aprendizagem na programação e as fronteiras só as atravessa quem quiser.

claro que eu agradeço o teu conselho e o teu trabalho com uma diferente proposta de resolução

(talvez se cada tópico estive-se classificado por graus: básico, médio e avançado estas discussões não existiam mas são positivas na minha forma de ver)

Edited by msmsms
Posted (edited)

eu quero-me preparar para daqui a alguns anos começar a ensinar programação no ensino primário pois acredito que vai ser preciso de futuro todos termos algum conhecimento ao nivel da programação.

Really?

um professor de português não deve dizer a uma criança que professor se pode escreve apenas prof e basta, sem lhe dizer que antes disso é preciso aprender a escrever professor completamente, embora com prof se gaste menos papel, caneta e tempo na leitura.

Esse exemplo em nada se aplica no mundo da programação. Sim, eu sei que foi uma metáfora.

com pós aprendizagem quis referir-me ao após arranque ou ao após inicio das coisas ''base'' bem aprendidas, eu acredito que sim existe uma aprendizagem ponto de partida (ex: na programação, na matemática, etc) que se vai evoluindo ''mas aquilo que era programação já se tinha compreendido o que era''

o pós aprendizagem para mim é um momento em que já se pode criar coisas (através de bases já suficientes) com real utilizade, coisas que fossem necessária e pode-se ficar por ai ou não (acredito que exista quêm se contente com aquilo que já sabe e ponto final e no máximo ás vezes ficará a relembrar alguma coisa (através da informação que já tinha) mas não em aprendizagem (quando não busca ou não quer mais informação a respeito de).

Ok, oficialmente desisto.

Continuas a ser arrogante com esse discurso todo. Ignoras que te ajudámos na tua solução "estendida e legível", e que apenas te demos um conselho, para continuares nesta onda que nem consigo bem descrever.

Boa sorte...

claro que eu agradeço o teu conselho e o teu trabalho com uma diferente proposta de resolução

Não parece nada. O discurso que conseguiste montar em nada demonstra isso.

Mas de nada, anyway. É para isso que estamos aqui, para ajudar e aconselhar quem quer ser ajudado e aconselhado. 😉

Edited by thoga31

Knowledge is free!

Posted

msmsms,

Logicamente, é importante que as pessoas aprendam os fundamentos antes de aprofundarem o seu conhecimento, nisso tens razão. Se calhar, no entanto, não reparaste que a forma mais compacta do thoga31 é bastante mais compreensível que a que originalmente programaste, mesmo conceptualmente. Traduzindo ambas para português, temos o seguinte:

msmsms:

1. Se for divisível por 4...
1.1. E divisível por 100
1.1.1. E divisível por 400, é bissexto.
1.1.2. E não divisível por 400, não é bissexto
1.2. E não divisível por 100 é bissexto
1. Não divisível por 4, não é bissexto

thoga31:

1. É bissexto se (e apenas se) for divisível por 4 *e além disso*, ou divisível por 400 ou então não divisível por 100.

Na realidade, um dos fundamentos da programação passa por saber conjugar expressões booleanas para evitar a criação de condições encadeadas que rapidamente saem fora do controlo e são mais propícias a erros.

Ou seja, não há mal nenhum em pensar como pensaste, mas deves logo que possível tentar simplificar a condição recorrendo aos operadores booleanos disponíveis; É como simplificar uma equação antes de a resolver.

Posted (edited)

msmsms,

Logicamente, é importante que as pessoas aprendam os fundamentos antes de aprofundarem o seu conhecimento, nisso tens razão. Se calhar, no entanto, não reparaste que a forma mais compacta do thoga31 é bastante mais compreensível que a que originalmente programaste, mesmo conceptualmente. Traduzindo ambas para português, temos o seguinte:

msmsms:

1. Se for divisível por 4...
1.1. E divisível por 100
1.1.1. E divisível por 400, é bissexto.
1.1.2. E não divisível por 400, não é bissexto
1.2. E não divisível por 100 é bissexto
1. Não divisível por 4, não é bissexto

thoga31:

1. É bissexto se (e apenas se) for divisível por 4 *e além disso*, ou divisível por 400 ou então não divisível por 100.

Na realidade, um dos fundamentos da programação passa por saber conjugar expressões booleanas para evitar a criação de condições encadeadas que rapidamente saem fora do controlo e são mais propícias a erros.

Ou seja, não há mal nenhum em pensar como pensaste, mas deves logo que possível tentar simplificar a condição recorrendo aos operadores booleanos disponíveis; É como simplificar uma equação antes de a resolver.

não me agrada o enrolar que foi feito com a condição if na resolução dele por isso prefiro a minha para o problema em questão

como estou em grau básico é normal que não compreenda ou ainda não tenha tido a experiência em obter os erros ou problemas que falas

ele faz uma função e depois faz a chamada dela com a condição if (isso é grau médio), este problema pode ser feito sem ''ainda'' se ter aprendido a fazer chamada de funções com controladores de fluxo tal como mostra a minha resolução.

contudo talvez a resolução dele possa servir de inspiração para resolver outros problemas maiores...

(neste momento já vou começando a fazer alguns exercicios onde preciso de fazer mais de uma função e chamar uma delas dentro de outra e se eu precisa-se de chamar uma função que disse-se se um ano é bissexto se eu chama-se a dele ela estaria tão espanhada ''exista aqui e ali'' que mesmo assim era mais confuso)

Edited by msmsms
Posted (edited)

Ok, se preferes menos compacto, que seja, mas é (quase) o mesmo. Aquilo que é essencial na simplificação mantém-se:

# Python 3.x
def bissexto():    
   ano = int(input("Ano? "))
   if (ano % 4 == 0 and (ano % 400 == 0 or ano % 100 != 0)):
       print("Bissexto")
   else:
       print("Não bissexto")


if __name__ == '__main__':
   bissexto()
Edited by thoga31
  • Vote 1

Knowledge is free!

Posted

(neste momento já vou começando a fazer alguns exercicios onde preciso de fazer mais de uma função e chamar uma delas dentro de outra e se eu precisa-se de chamar uma função que disse-se se um ano é bissexto se eu chama-se a dele ela estaria tão espanhada ''exista aqui e ali'' que mesmo assim era mais confuso)

Confuso é o teu discurso... Não entendi nada do que disseste.

Estás a fazer uns exercícios que precisam de funções dentro de outras que se utilizasses a minha dentro doutra a minha estaria... oi?

Knowledge is free!

Posted (edited)

Confuso é o teu discurso... Não entendi nada do que disseste.

Estás a fazer uns exercícios que precisam de funções dentro de outras que se utilizasses a minha dentro doutra a minha estaria... oi?

o que eu queria dizer é que a função:

def bissexto(ano):
return (ano % 4 == 0 and (ano % 400 == 0 or ano % 100 != 0))

não está com as ''tripas'' todas dentro dela

parte das suas ''tripas'' estão em:

if __name__ == '__main__':
if bissexto(int(input("Ano? "))):
    print("Bissexto")
else:
    print("Não bissexto")

a minha função tem as ''tripas'' todas

def bissexto():
ano = input('ano:')
if ano%4==0:
    if ano%100==0:
        if ano%400==0:
            print 'bissexto'
        else:
            print 'nao bissexto'
    else:
        print 'bissexto'
else:
    print 'nao bissexto'

é só ser chamada e se quiser-mos ver a olho o código dela no meio outras 1001 funções é só encontra-la e ela será muito clara, um corpo não ''estripado'' ou não ''repartido''

Edited by brunoais
geshi
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.