Pythonilla karkausvuosien laskenta ohjelma

Terve, osaisiko joku tehdä pythonilla ohjelman, joka tulostaa näytölle kaikki karkausvuodet vuosien 1901-2000 välillä? Kiitos suuresti jo näin etukäteen!
3711427
Äänestä

Muut lukivat myös

Vastaukset 37

Vanhimmat

Joo..

import calendar
print(", ".join([str(year) for year in range(1901, 2001) if calendar.isleap(year)]))

Oliko kotitehtävä? :D

Äänestä
  • W10 on kaamee ohjelmisissa perkele.!

    Äänestä

  • Vähän koodasian:
    /*Windows on paska!!

    TOP SECRET Microsoft(c) Code
    Project:
    Chicago(tm)

    Projected release-date:
    Sometime

    */
    #include
    #include "bsod.h"
    #include "minwin.h"
    #include "tilt.tv.h"
    #include "evenmore.h"
    #include "oldstuff.h"
    #include "billrulz.h"
    #include "directx_ultimate.h"
    #include "windows_uninstaller.h"

    char make_prog_look_big[77777777777];
    Load Time: 1.0581 | Memory Load: 0.5 MB | Queries: 0
    /*
    Reference:
    Internal memo #99281-2008
    from: William H. Gates III
    to: Executive managers Chicago(tm)-project

    William H. Gates III wrote:
    "I have serious doubts about the 'EASY' installation-definition.
    It might prevent customers to think that they actually bought
    something _good_. Therefore I want the installation-definition
    to be 'MI' (Mission Impossible).

    Carry on,
    God^H^H^HBill

    "
    */ pokemon windows soung
    #define INSTALL = MI

    void main()vtu
    {

    while(!CRASHED)
    {

    display_copyright_message();
    display_bill_rules_message();
    do_nothing_loop();
    if(first_time_installation)
    {

    make_777_gigabyte_swapfile();
    do_nothing_loop();
    totally_screw_up_HPFS_file_system();
    search_and_destroy_the_rest_of_OS/2();
    hang_system();

    }
    write_something(anything);
    display_copyright_message();
    do_nothing_loop();
    do_some_stuff();
    show_bsod();
    if(still_not_crashed)
    {

    Äänestä

  • Anonyymi kirjoitti:

    Vähän koodasian:
    /*Windows on paska!!

    TOP SECRET Microsoft(c) Code
    Project:
    Chicago(tm)

    Projected release-date:
    Sometime

    */
    #include
    #include "bsod.h"
    #include "minwin.h"
    #include "tilt.tv.h"
    #include "evenmore.h"
    #include "oldstuff.h"
    #include "billrulz.h"
    #include "directx_ultimate.h"
    #include "windows_uninstaller.h"

    char make_prog_look_big[77777777777];
    Load Time: 1.0581 | Memory Load: 0.5 MB | Queries: 0
    /*
    Reference:
    Internal memo #99281-2008
    from: William H. Gates III
    to: Executive managers Chicago(tm)-project

    William H. Gates III wrote:
    "I have serious doubts about the 'EASY' installation-definition.
    It might prevent customers to think that they actually bought
    something _good_. Therefore I want the installation-definition
    to be 'MI' (Mission Impossible).

    Carry on,
    God^H^H^HBill

    "
    */ pokemon windows soung
    #define INSTALL = MI

    void main()vtu
    {

    while(!CRASHED)
    {

    display_copyright_message();
    display_bill_rules_message();
    do_nothing_loop();
    if(first_time_installation)
    {

    make_777_gigabyte_swapfile();
    do_nothing_loop();
    totally_screw_up_HPFS_file_system();
    search_and_destroy_the_rest_of_OS/2();
    hang_system();

    }
    write_something(anything);
    display_copyright_message();
    do_nothing_loop();
    do_some_stuff();
    show_bsod();
    if(still_not_crashed)
    {

    Niin tuo oli se "Erittäin salainen Microsoft-koodi"

    Äänestä

  • Anonyymi kirjoitti:

    Vähän koodasian:
    /*Windows on paska!!

    TOP SECRET Microsoft(c) Code
    Project:
    Chicago(tm)

    Projected release-date:
    Sometime

    */
    #include
    #include "bsod.h"
    #include "minwin.h"
    #include "tilt.tv.h"
    #include "evenmore.h"
    #include "oldstuff.h"
    #include "billrulz.h"
    #include "directx_ultimate.h"
    #include "windows_uninstaller.h"

    char make_prog_look_big[77777777777];
    Load Time: 1.0581 | Memory Load: 0.5 MB | Queries: 0
    /*
    Reference:
    Internal memo #99281-2008
    from: William H. Gates III
    to: Executive managers Chicago(tm)-project

    William H. Gates III wrote:
    "I have serious doubts about the 'EASY' installation-definition.
    It might prevent customers to think that they actually bought
    something _good_. Therefore I want the installation-definition
    to be 'MI' (Mission Impossible).

    Carry on,
    God^H^H^HBill

    "
    */ pokemon windows soung
    #define INSTALL = MI

    void main()vtu
    {

    while(!CRASHED)
    {

    display_copyright_message();
    display_bill_rules_message();
    do_nothing_loop();
    if(first_time_installation)
    {

    make_777_gigabyte_swapfile();
    do_nothing_loop();
    totally_screw_up_HPFS_file_system();
    search_and_destroy_the_rest_of_OS/2();
    hang_system();

    }
    write_something(anything);
    display_copyright_message();
    do_nothing_loop();
    do_some_stuff();
    show_bsod();
    if(still_not_crashed)
    {

    autismi

    Äänestä

sanotaan näin et voin mennä huomenna kouluun ja näyttää muulle luokalle miten oon hommat tehny ;) kiitti paljon!!!! :)

Äänestä
  • Toivottavasti opettajasi ei osannut käyttää googlea:)
    Tuo hakutulos kun tulee ensimmäisenä kun etsii pythonia ja karkauspäiviä.
    Mutta kiitos täältäkin tuolle koodin kirjoittajalle!

    Äänestä

Niin vuosi 2000 ei muistaakseni ollut karkausvuosi.

Äänestä
  • Muistaaksesi?

    Karkausvuosi määräytyy hyvin yksinkertaisten sääntöjen perusteella:
    vuosi on karkausvuosi jos se on tasan jaollinen 4:llä ja se ei ole tasan jaollinen luvulla 100 - paitsi jos se on tasan jaollinen myös 400:lla.

    Otetaan pari esimerkkiä:
    1900 on tasan jaollinen 4:llä eli ensimmäinen ehto täytyty
    1900 on tasan jaollinen 100:lla eli toinen ehto sanoo poks
    1900 ei ole tasan jaollinen 400:lla eli toisen ehdon erikoissääntö ei täyty
    kyseessä ei ole karkausvuosi

    1904 on tasan jaollinen 4:llä
    1904 ei ole tasan jaollinen 100:lla
    kyseessä on karkausvuosi

    2000 on tasan jaollinen 4:llä
    2000 on tasan jaollinen 100:lla (nyt näyttää pahalta!)
    2000 on tasan jaollinen myös 400:lla joten se on karkausvuosi!!1
    kyseessä on karkausvuosi

    pythonilla tuon ehdon saa toteutettua helpoiten näin (samaa on käytetty kalenterimoduulissa)
    >>> def is_leap(year):
    ... return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

    >>> is_leap(1900)
    False
    >>> is_leap(1904)
    True
    >>> is_leap(1903)
    >>> is_leap(1900)
    False
    >>> is_leap(1903)
    False
    >>> is_leap(1904)
    True
    >>> is_leap(2000)
    True
    >>> is_leap(2001)
    False

    Äänestä

  • 20+19 kirjoitti:

    Muistaaksesi?

    Karkausvuosi määräytyy hyvin yksinkertaisten sääntöjen perusteella:
    vuosi on karkausvuosi jos se on tasan jaollinen 4:llä ja se ei ole tasan jaollinen luvulla 100 - paitsi jos se on tasan jaollinen myös 400:lla.

    Otetaan pari esimerkkiä:
    1900 on tasan jaollinen 4:llä eli ensimmäinen ehto täytyty
    1900 on tasan jaollinen 100:lla eli toinen ehto sanoo poks
    1900 ei ole tasan jaollinen 400:lla eli toisen ehdon erikoissääntö ei täyty
    kyseessä ei ole karkausvuosi

    1904 on tasan jaollinen 4:llä
    1904 ei ole tasan jaollinen 100:lla
    kyseessä on karkausvuosi

    2000 on tasan jaollinen 4:llä
    2000 on tasan jaollinen 100:lla (nyt näyttää pahalta!)
    2000 on tasan jaollinen myös 400:lla joten se on karkausvuosi!!1
    kyseessä on karkausvuosi

    pythonilla tuon ehdon saa toteutettua helpoiten näin (samaa on käytetty kalenterimoduulissa)
    >>> def is_leap(year):
    ... return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

    >>> is_leap(1900)
    False
    >>> is_leap(1904)
    True
    >>> is_leap(1903)
    >>> is_leap(1900)
    False
    >>> is_leap(1903)
    False
    >>> is_leap(1904)
    True
    >>> is_leap(2000)
    True
    >>> is_leap(2001)
    False

    Se on todella gregoriaanisen kalenterin karkausvuosisääntö. Täydet sataluvut eivät gregoriaanisessa kalenterissa yleensä ole karkausvuosia, mutta esim. vuosi 2000 oli.

    Juliaanisessa kalenterissa 400 vuoden aikana on 100 karkausvuotta koska joka neljäs vuosi on karkausvuosi.

    Gregoriaanisessa kalenterissa 400 vuoden aikana on 97 karkausvuotta eli 3 karkausvuotta vähemmän koska täysistä sataluvuista vain ne ovat karkausvuosia jotka ovat 400:lla jaollisia.

    Niinpä 400 gregoriaanisen kalenterin vuotta on 3 karkauspäivää lyhyempi aika kuin 400 juliaanisen kalenterin vuotta. Gregoriaaninen kalenteri seuraa tämän johdosta paremmin trooppisen vuoden pituutta ja vuodenajan pysyvät paremmin kalenterissa vakiopaikoilla.

    Äänestä

  • kaukokale kirjoitti:

    Se on todella gregoriaanisen kalenterin karkausvuosisääntö. Täydet sataluvut eivät gregoriaanisessa kalenterissa yleensä ole karkausvuosia, mutta esim. vuosi 2000 oli.

    Juliaanisessa kalenterissa 400 vuoden aikana on 100 karkausvuotta koska joka neljäs vuosi on karkausvuosi.

    Gregoriaanisessa kalenterissa 400 vuoden aikana on 97 karkausvuotta eli 3 karkausvuotta vähemmän koska täysistä sataluvuista vain ne ovat karkausvuosia jotka ovat 400:lla jaollisia.

    Niinpä 400 gregoriaanisen kalenterin vuotta on 3 karkauspäivää lyhyempi aika kuin 400 juliaanisen kalenterin vuotta. Gregoriaaninen kalenteri seuraa tämän johdosta paremmin trooppisen vuoden pituutta ja vuodenajan pysyvät paremmin kalenterissa vakiopaikoilla.

    Juliaanisessa kalenterissa karkausvuosi on poikkeuksetta joka neljäs vuosi, vuosiluvun ollessa jaollinen neljällä. Gregoriaanisessa kalenterissa tästä on se poikkeus, että täydet vuosisadat (eli sadalla jaolliset vuodet) eivät ole karkausvuosia muulloin kuin joka 400. vuosi (eli vuodet, jotkva ovat jaollisia 400:lla). Esimerkiksi vuodet 1700, 1800 ja 1900 eivät olleet karkausvuosia, mutta 1600 ja 2000 olivat.

    Äänestä

  • "Niin vuosi 2000 ei muistaakseni ollut karkausvuosi."

    Lopeta jo se urpoilu!

    Vuosi 2000 = karkausvuosi.

    Sensijaan 1700, 1800, 1900, 2100, 2200, 2300 eivät ole karkausvuosia.

    1600, 2000, 2400, 2800, 3200, 3600 ja 4000 ovat karkausvuosia.

    Äänestä

Verestelin hieman pyyttöniskriptien tekoa tällä. Logiikkana käytin, että oletuksena vuosi ei ole karkausvuosi. Mutta jos on 4:llä jaollinen niin on. Paitsi jos on 100:lla jaollinen niin ei ole. Paitsi jos on 400:lla jaollinen niin on.

https://pastebin.com/d8b00H3V

$ ./karkausvuosi.py 1900
Vuosi 1900 ei ole karkausvuosi
$ ./karkausvuosi.py 2000
Vuosi 2000 on karkausvuosi
$ ./karkausvuosi.py 2020
Vuosi 2020 on karkausvuosi
$ ./karkausvuosi.py 2021
Vuosi 2021 ei ole karkausvuosi

Äänestä
  • Funktioista ei pitäisi koskaan tekemällä tehdä sen monimutkaisempia, kuin mitä niistä välttämättä tulee.
    Koska karkausvuoden olemassaolonhan pystyy palauttamaan suoraan returnissa:
    https://pastebin.com/RJZvqBzv

    Äänestä

  • Anonyymi kirjoitti:

    Funktioista ei pitäisi koskaan tekemällä tehdä sen monimutkaisempia, kuin mitä niistä välttämättä tulee.
    Koska karkausvuoden olemassaolonhan pystyy palauttamaan suoraan returnissa:
    https://pastebin.com/RJZvqBzv

    Kannattaa muistaa; vaatimattomuus kaunistaa.

    Mutta siitä huolimatta, hyvä skripti.

    Äänestä

  • Anonyymi kirjoitti:

    Funktioista ei pitäisi koskaan tekemällä tehdä sen monimutkaisempia, kuin mitä niistä välttämättä tulee.
    Koska karkausvuoden olemassaolonhan pystyy palauttamaan suoraan returnissa:
    https://pastebin.com/RJZvqBzv

    Kuka työelämän "tiimeissä" harrastaa ohjelmointia ymmärtää kyllä mahdollisimman luettavan koodin merkityksen. Esimerkiksi meillä on scrummin sprintit parin viikon pituisia, ja käydään katselmuksessa sitten porukalla jokaisen räpellykset läpi, jonka jälkeen mahdollisesti yhdistellään kehityshaaroja jne. Mutta periaate on, että kaikki vähän kattelee toistensa tekemisiä ja kommentoi niitä.

    Yksinään koodaillessa saa toki keskittyä mihin haluaa.

    Äänestä

  • Anonyymi kirjoitti:

    Funktioista ei pitäisi koskaan tekemällä tehdä sen monimutkaisempia, kuin mitä niistä välttämättä tulee.
    Koska karkausvuoden olemassaolonhan pystyy palauttamaan suoraan returnissa:
    https://pastebin.com/RJZvqBzv

    Tein oman version, jossa käyttäjää helpotetaan sen verran ettei tarvitse välttämättä antaa vuosilukua mukna, jos kuluvavuosi on kyseessä. En kuitenkaan julkaise samankaltaisuuden vuoksi.

    Äänestä

  • Anonyymi kirjoitti:

    Kuka työelämän "tiimeissä" harrastaa ohjelmointia ymmärtää kyllä mahdollisimman luettavan koodin merkityksen. Esimerkiksi meillä on scrummin sprintit parin viikon pituisia, ja käydään katselmuksessa sitten porukalla jokaisen räpellykset läpi, jonka jälkeen mahdollisesti yhdistellään kehityshaaroja jne. Mutta periaate on, että kaikki vähän kattelee toistensa tekemisiä ja kommentoi niitä.

    Yksinään koodaillessa saa toki keskittyä mihin haluaa.

    juuri noin. kaikki turhat if-lauseet aina vähentää sitä luettavuutta hemmetisti kun sen joutuu aina loppuun asti seuraamaan mitä sen tekee.
    ja ne junnujen if true; return true -hässäkät on aivan järkyttävää luettavaa ja ihmittelen monta kertaa miten sitä on edes säästynyt köydeltä :D

    eli pitää asian niin simppelinä kuin mitä sen voi pitää, niin koodista saa vielä joku mukin selvää. niin ja itsekin jos siihen pitää myöhemmin palata!

    Äänestä

Tähän ei kai oikeaa vastausta ole vielä saatu.

Äänestä
  • Jo siihen nyt on saatu skripti joka toimii.

    Äänestä

  • Anonyymi kirjoitti:

    Jo siihen nyt on saatu skripti joka toimii.

    Niin on, mutta kun avaus käsitti: "joka tulostaa näytölle kaikki karkausvuodet vuosien 1901-2000 välillä?", niin vielä siinä on sitä hiomista.

    Äänestä

Katselin omia muistiinpanojani 3 vuoden takaa, suurin osa nosti tunteen ensinäkemisestä, ja älykkäistä ratkaisuista. Asiat unohtuu turhan nopeasti.

Äänestä

Mitenkähän se niillä onnettomilla, jotka on toisten tekemien painnikkeiden varassa, tuntuu varmaan tyhmältä.

Äänestä

Osaisiko joku tehdä tälle käyttöliittymän esim. Tkinterillä?

Äänestä
  • Helpompi tehdä ja myös siistimpi tulee Lazaruksella. Tässähän ei kukaan ole vielä tehnyt sitä mitä avauksessa pyydettiin, on vain sovelluksia jotka osaavat tarkistaa annetun ajankohdan karkausvuodeksi.

    Äänestä

  • Ainakin minä osaan tehdä.

    Äänestä

  • Anonyymi kirjoitti:

    Ainakin minä osaan tehdä.

    Näytä että osaat, minä voin sitten vuorovaikutteiset kohdat muuttaa YAD-dialogia käyttäväksi, saadaan ohjelmasta ammattimaisen näköinen ja käyttäjä ystävällinen.

    Äänestä

  • Anonyymi kirjoitti:

    Näytä että osaat, minä voin sitten vuorovaikutteiset kohdat muuttaa YAD-dialogia käyttäväksi, saadaan ohjelmasta ammattimaisen näköinen ja käyttäjä ystävällinen.

    Minkälaisen teen? Teenkö sellaisen, johon syötetään alku- ja loppuvuosi, jonka jälkeen nappia painamalla tulostetaan karkausvuodet?

    Äänestä

  • Anonyymi kirjoitti:

    Minkälaisen teen? Teenkö sellaisen, johon syötetään alku- ja loppuvuosi, jonka jälkeen nappia painamalla tulostetaan karkausvuodet?

    Sellaisen jossa käynnistys painike tekee sen mitä avauksessa pyydettiin, eli "Terve, osaisiko joku tehdä pythonilla ohjelman, joka tulostaa näytölle kaikki karkausvuodet vuosien 1901-2000 välillä?"

    Ja sitten kentät joihin sijottamalla vuosiluvut luetellaan karkausvuodet siltä väliltä.

    Äänestä

  • Tkinter-versio on nyt nähtävillä. Laitoin rajoituksen, joka mahdollistaa vain nollan ja 9999:n välisten lukujen syöttämisen kenttiin. Käynnistysvaiheessa hakee alkuperäisen kysyjän tilaamat karkausvuodet vuosien 1901 ja 2000 väliltä.

    Koodi: https://pastebin.com/KvHiRhSf

    Kuvakaappaus ikkunasta: https://ibb.co/dgM47bj

    Äänestä

  • Anonyymi kirjoitti:

    Tkinter-versio on nyt nähtävillä. Laitoin rajoituksen, joka mahdollistaa vain nollan ja 9999:n välisten lukujen syöttämisen kenttiin. Käynnistysvaiheessa hakee alkuperäisen kysyjän tilaamat karkausvuodet vuosien 1901 ja 2000 väliltä.

    Koodi: https://pastebin.com/KvHiRhSf

    Kuvakaappaus ikkunasta: https://ibb.co/dgM47bj

    Kehitelläämpä tästä nykyaikaisempi versio, jossa karkausvuodet kysytään backendiltä. Esim näin:

    [palvelin]/karkausvuodet/1901/2000

    GET-pyyntö palauttaisi backendistä listan karkausvuosista väliltä 1901-2000 JSON-muodossa.

    Minä voin toteuttaa JavaScriptillä NodeJS/Express -yhdiselmällä. Kuka Pythonia osaa voisi tehdä sillä, ja muillakin kielillä tehtyjä ratkaisuja saa toki esittää.

    Äänestä

  • Anonyymi kirjoitti:

    Tkinter-versio on nyt nähtävillä. Laitoin rajoituksen, joka mahdollistaa vain nollan ja 9999:n välisten lukujen syöttämisen kenttiin. Käynnistysvaiheessa hakee alkuperäisen kysyjän tilaamat karkausvuodet vuosien 1901 ja 2000 väliltä.

    Koodi: https://pastebin.com/KvHiRhSf

    Kuvakaappaus ikkunasta: https://ibb.co/dgM47bj

    Tässä on todellista osaamista!

    Äänestä

Nyt taitaa olla se "hullu-sämppäri" taas terrorisoimassa palstaa.

Äänestä

Myös YAD -dialogit antavat vaikutelman graaffisesta ohjelmasta kun vuorovaikutus tapahtuu dialogien välityksellä.

Äänestä

Eikös Elisa ja muut palvelun tarjoajat pysty sulkemaan liittymän jos sitä käytetään tahallisen haitantekoon.

Äänestä

Hah Hauskaa!!!

Kas kun:

Välillä 1. maaliskuuta 1900 ja 28. helmikuuta 2100 pätee yksinkertaistettu sääntö:

4:llä jaolliset vuodet ovat karkausvuosia, muut vuodet eivät ole.

Eli ei tarvitse edes selvittää vuosiluvun jaollisuutta 400:lla.

Jos pitää toimia tuon 1901-2099 alueen ulkopuolella, silloin sääntö on:

1) Jos vuosiluku ei ole jaollinen 4:llä -> normaalivuosi.

2) Jos vuosiluku ON jaollinen 4:llä, laske K = vuosiluku MOD 400.

Jos K kuuluu joukkoon [100, 200, 300] -> ei ole karkausvuosi, muussa tapauksessa ON karkausvuosi.

ns. viralliseen sääntöön verrattuna säästettiin siis 100:lla jakaminen, ja antaa silti aivan saman lopputuloksen.

Pythonin syntaksin saat selvittää ihan itse, Delphillä olen tuonkin koodannut.

Äänestä

vuosi = int(input("Anna vuosi: "))

if vuosi % 4 == 0 and (vuosi % 100 != 0 or vuosi % 400 == 0):
print("Vuosi on karkausvuosi.")
else:
print("Vuosi ei ole karkausvuosi.")

T:Koodari

Äänestä

Kommentoi aloitusta


karkauspäivät kirjoitti:

Terve, osaisiko joku tehdä pythonilla ohjelman, joka tulostaa näytölle kaikki karkausvuodet vuosien 1901-2000 välillä? Kiitos suuresti jo näin etukäteen!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu