heiltöludeiling

72 views
Skip to first unread message

siggi

unread,
Oct 23, 2007, 1:46:15 PM10/23/07
to Reykjavik Python User Group
Sælir,
Er að reyna við forrit sem er á þessa leið:

# Búið til forrit sem spyr um ártal en forritið svarar til baka hvort
# viðkomandi ár er hlaupaár eða ekki.
# Ár er hlaupaár ef talan 4 gengur upp í árinu,
# nema ef 100 gengur upp og ekki 400.
# Hlaupár samkvæmt okkar tímatali eru alltaf þegar 4 ganga upp í
ártalinu,
# að undanskildum aldamótaárum þegar 4 ganga ekki upp í öldinni.
# Þannig eru árin 1700, 1800 og 1900 ekki hlaupár en árið 2000 er
hlaupár.
# Árin 2100, 2200 og 2300 verða ekki hlaupár en árið 2400 verður það
aftur
# á móti.
# Dæmi:
# 1900 ekki hlaupaár
# 1996 hlaupaár
# 1997 ekki hlaupaár
# 2000 hlaupaár

Fyrsti vandinn er að finna hvort talan sem deilt er í sé heiltala. Í
öðru lagi að finna út undantekningarnar s.s. hlaupár á 100 ára fresti
en ekki hlaupár á 400 ára fresti.

ar = input("Sláðu inn ár: ")
deiling = ar / 4
if deiling == type(int): # Er eitthvað til sem segir hvort útkoman sé
heiltala?
print "Árið " +str(ar) + " er hlaupár."

Myndi þiggja alla hjálp eins og sést er ég algjör byrjandi í Python.

Hafsteinn Halldórsson

unread,
Oct 23, 2007, 1:53:30 PM10/23/07
to rp...@googlegroups.com
Skoðaðu %(modulus) virkjan , hann ætti að geta komið þér á rétt spor.

kv

Hafsteinn

Arnar Birgisson

unread,
Oct 23, 2007, 1:59:15 PM10/23/07
to rp...@googlegroups.com
On 10/23/07, siggi <sigg...@yahoo.com> wrote:
> Myndi þiggja alla hjálp eins og sést er ég algjör byrjandi í Python.

Jább, kíktu á %. Í stuttu máli er (x % y) afgangurinn af deilingunni
x/y (heiltöludeiling). T.d. geturðu tékkað hvort tala gengur upp í 8
með:

if x % 8 == 0:
print "x gengur uppí átta"
else:
print "x gengur ekki uppí átta"

kv,
Arnar

Dagur Ammendrup

unread,
Oct 23, 2007, 2:10:12 PM10/23/07
to rp...@googlegroups.com
Sammála fyrri ræðumönnum. En bara til fróðleiks, ef þú vilt athuga týpu á breytu þá notar þú types módúlinn



from types import IntType

if type(3) is IntType:
  print "int"

Geir Gunnarsson

unread,
Oct 23, 2007, 6:22:39 PM10/23/07
to rp...@googlegroups.com
Sæll siggi og annað python-f´ólk,

ég er líka nýliði í python og datt strax í hug að kannski værir þú að lenda í sömu gryfju og ég að skrifa sjálfur rútínur sem eru þegar til staðar í library-inu. En kannski viltu bara æfa þig með þessu dæmi.
En til vonar og vara vil ég benda þér á calendar.isleap(<year>) svarar þér um hæl með réttu svari fyrir hvaða ár sem er. Og einnig er hægt að svindla og kíkja á hvernig þessi einnar-línu rútína er útfærð í libraryinu.

kveðja,
-geir

Sigurdur Jonsson

unread,
Oct 24, 2007, 9:07:12 AM10/24/07
to rp...@googlegroups.com
Takk fyrir ábendinguna. Tókst það á þennan hátt:
 
artal = input("Sláðu inn ártal: ")
if artal % 400 == 0:
    print "Árið " +str(artal) + " er hlaupár."
elif artal % 4 == 0 and artal % 100 != 0:
    print "Árið " +str(artal) + " er hlaupár."
else:
    print "Árið " +str(artal) + " er ekki hlaupár."
 
Hefði verið flottara að vera með eina if-else setningu en náði ekki að koma lógíkinni á eina línu.
 
Bestu kveðjur/Best regards,
 
Sigurður Jónsson

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

Bjorn Swift

unread,
Oct 24, 2007, 9:15:23 AM10/24/07
to rp...@googlegroups.com
Sæll Sigurður

On 10/24/07, Sigurdur Jonsson <sigg...@yahoo.com> wrote:
> Hefði verið flottara að vera með eina if-else setningu en náði ekki að koma
> lógíkinni á eina línu.

Hvað með (til að koma þessu í eina línu):

if artal % 4 == 0 and (artal % 100 != 0 or artal % 400 == 0):
print "hlaupar"
else:
print "ekki hlaupar"

Kveðja,
Björn Swift

Matthías A. Stefánsson

unread,
Oct 24, 2007, 9:17:27 AM10/24/07
to rp...@googlegroups.com
if artal % 400 == 0 or artal % 4 == 0:

    print "Árið " +str(artal) + " er hlaupár."
else:
    print "Árið " +str(artal) + " er ekki hlaupár."


or og and geta tengt saman mörg skilyrði. Mæli með því að þú skoðir það.
--
kv.
Matthías Arnalds Stefánsson
matti...@gmail.com

Tryggvi Björgvinsson

unread,
Oct 24, 2007, 9:38:50 AM10/24/07
to rp...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Matthías A. Stefánsson wrote:
> if artal % 400 == 0 or artal % 4 == 0:
> print "Árið " +str(artal) + " er hlaupár."
> else:
> print "Árið " +str(artal) + " er ekki hlaupár."

Þetta gengur ekki upp, því miður. Aldamótaárin fara í klessu. 4 verður
að ganga upp í öldinni (það er í 1900 þá verður 4 að ganga upp í 19),
þannig að þig vantar að tjékka hvort að 100 gangi upp í tölunni. Prófaðu
til dæmis að setja inn 1900 sem á ekki að vera hlaupár. 4 gengur upp í
1900 (=475) en 400 ekki.

Aðferðin hjá Birni Swift gengur upp því þar tekur hann 100 með inn í
myndina þegar hann reiknar þetta út. Mér sýnist það nú vera lausnin í
libraryinu (sem er bara hið fínasta mál).

/Tryggvi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

iD8DBQFHH0rqTfUwC3N5Fj0RAmRPAJ9ShxRM+XjnGNUAcJEjhGXxM/MrrgCgvnM4
AWDSkXWZBAuSaUwwW9lrcJo=
=Y+7v
-----END PGP SIGNATURE-----

Matthías A. Stefánsson

unread,
Oct 24, 2007, 9:56:37 AM10/24/07
to rp...@googlegroups.com
Já, ég hljóp aðeins á mig. En dæmið hans Björns negglir þetta.


Arnar Birgisson

unread,
Oct 24, 2007, 10:19:59 AM10/24/07
to rp...@googlegroups.com
On 10/24/07, Bjorn Swift <bjorn...@gmail.com> wrote:
> Hvað með (til að koma þessu í eina línu):
>
> if artal % 4 == 0 and (artal % 100 != 0 or artal % 400 == 0):
> print "hlaupar"
> else:
> print "ekki hlaupar"

Mér dettur í hug tengt þessu kóði sem ég þarf oft að nota til að
ákveða hvort nota eigi fleirtölu á íslensku eða ekki:

def fleirtala(n, et, ft):
if n % 10 == 1 and n % 100 != 11:
return "%d %s" % (n, et)
else:
return "%d %s" % (n, ft)

>>> for i in (1,2,10,11,12,50,51,100,101,111,120,121):
... print fleirtala(i, u"brók", "brækur")
...
1 brók
2 brækur
10 brækur
11 brækur
12 brækur
50 brækur
51 brók
100 brækur
101 brók
111 brækur
120 brækur
121 brók


kv,
Arnar

Halldór

unread,
Oct 24, 2007, 11:54:42 AM10/24/07
to rp...@googlegroups.com
Mínar stuttu tilraunir gefa til kynna að eftirfarandi virki:

#!/usr/bin/env python
# ~*~ coding: utf-8 ~*~

def is_leap(year):
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
else:
return False

if __name__ == '__main__':
import calendar
ii = 0
for i in range(1, 10000):
if( is_leap(i) != calendar.isleap(i)):
print "o-óh, %i er fönkí" % i
else:
ii += 1


On 10/24/07, Sigurdur Jonsson <sigg...@yahoo.com> wrote:
>
>


--
kv. Halldór Rúnarsson

Einar Bergmundur

unread,
Oct 24, 2007, 1:41:27 PM10/24/07
to rp...@googlegroups.com
hér er smá lógík í þetta mál:
import sys
import string
def julian_leap(y=2000):
    if (y%4) == 0:
        return 1
    return 0
def gregorian_leap(y=2000):
    if (y%400) == 0:
         return 1
    elif (y%100) == 0:
         return 0
    elif (y%4) == 0:
         return 1
    return 0

 years = [1999,2000,2001,1900]
 print julian_leap()
 print gregorian_leap()
 if julian_leap():
     print "Julian 2000 yes"
 if gregorian_leap():
     print "Gregorian 2000 yes"
 for x in years:
     if julian_leap(x):
         print "Julian", x, "is leap"
     else:
         print "Julian", x, "is not leap"
     if gregorian_leap(x):
         print "Gregorian", x, "is leap"
     else:
         print "Gregorian", x, "is not leap"



Einar Bergmundur
Tækniþróunarstjóri
Náttúran er ehf.
4831500 - 8925657 


Reply all
Reply to author
Forward
0 new messages