Re: [python-brasil] Descobrir se o ano é bissexto

1,093 views
Skip to first unread message

Luciano Ramalho

unread,
Jan 7, 2007, 7:59:42 AM1/7/07
to python...@yahoogrupos.com.br
On 1/5/07, Marcelo <mar...@afasistemas.com.br> wrote:
> na empresa onde eu trabalho não tenho
> permissão para ficar acessando a net e tb não possuo net em ksa.

Procure outro emprego, porque o atual está atrasando a sua vida, Marcelo!

> Bom, digamos que tenho um programa onde a entrada de dados será um ano
> em 4 digítos e preciso mostrar na tela se o ano informado é bissexto ou não.
> A dúvida é: Tem como fazer o usuário digitar somente 4 digítos?

Para responder isso, precisaremos saber que tipo de interface de
usuário seu programa vai ter. É uma interface gráfica com janelas ou
será um script na linha de comando, ou ainda uma interface modo texto
de tela cheia como aquelas em Clipper?

> Como eu faço para descobrir se esse ano informado é ou não bissexto.

Outros colegas já deram o algoritmo. Aqui vai uma solução baseada na
módulo datetime que faz parte da biblioteca padrão de Python:

####################################
from datetime import date

def bissexto(ano):
try:
date(ano,2,29)
return True
except ValueError:
return False
####################################

Basicamente, a gente tenta criar um objeto date com o dia 29/fev do
ano em questão. Se der certo, é porque é bissexto; se uma exceção
ValueError for levantada, é porque o tal ano não tem dia 29/fev.

Para testar experimente isso:

####################################
for ano in range(1999,2013):
print ano, bissexto(ano)
####################################

O motivo de usar o módulo datetime é mostrar que na biblioteca padrão
do Python tem muita coisa pronta para usar. Por exemplo, se está
interessado em saber se um ano é bissexto, possivelmente precisará
fazer outras operações com datas, e o módulo datetime tem várias
classes e funções para este fim.

Ainda no tema datas, outro módulo muito bacana é o calendar.
Experimente digitar isso no interpretador interativo de python:

####################################
>>> import calendar
>>> calendar.prcal(2007)
>>> help(calendar)
####################################

Feliz 2007* para todos!

[ ]s
Luciano

* um ano não bissexto


========================================================
Antes de enviar sua mensagem dê uma lida em:
http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar
========================================================
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Rodrigo Cacilhas

unread,
Jan 7, 2007, 6:39:51 AM1/7/07
to Python Brasil
from calendar import isleap

if isleap(ano):
print "Ano %d é bissexto" % ano


Observação: O último ano de séculos ímpares (1700, 1900, 2100, etc.) são
múltiplos de quatro mas não são bissextos.

[]'s
Rodrigo Cacilhas


> On 1/6/07, Deocleciano Maranhao Neto <ntde...@gmail.com
> <mailto:ntdeocle%40gmail.com>> wrote:
> >
> >
> > if (ano%4==0 and ano%100 != 0) or (ano%4==0 and ano%100==0 and
> > ano%400==0):
> >
> Na verdade, se o ano é múltiplo de 400, com certeza é múltiplo de
> 4 e de 100
> também, portanto poderia ficar assim
>
> if (ano%4==0 and ano%100 != 0) or (ano%400==0):
>
> :-)
> --
> Renato Besen
> Graduando em Ciências da Computação
> Centro Tecnológico - CTC
> Departamento de Informática e Estatística - INE
> renat...@gmail.com <mailto:renatobesen%40gmail.com>

Reply all
Reply to author
Forward
0 new messages