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!
Pythonilla karkausvuosien laskenta ohjelma
karkauspäivät
3711427
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 37
Vanhimmat
Joo..
import calendar
print(", ".join([str(year) for year in range(1901, 2001) if calendar.isleap(year)]))
Oliko kotitehtävä? :D
W10 on kaamee ohjelmisissa perkele.!
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"
autismi
sanotaan näin et voin mennä huomenna kouluun ja näyttää muulle luokalle miten oon hommat tehny ;) kiitti paljon!!!! :)
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!
Niin vuosi 2000 ei muistaakseni ollut karkausvuosi.
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.
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.
"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.
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
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.
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.
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.
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!
Tähän ei kai oikeaa vastausta ole vielä saatu.
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.
Katselin omia muistiinpanojani 3 vuoden takaa, suurin osa nosti tunteen ensinäkemisestä, ja älykkäistä ratkaisuista. Asiat unohtuu turhan nopeasti.
Mitenkähän se niillä onnettomilla, jotka on toisten tekemien painnikkeiden varassa, tuntuu varmaan tyhmältä.
Osaisiko joku tehdä tälle käyttöliittymän esim. Tkinterillä?
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.
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.
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ä.
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ää.
Tässä on todellista osaamista!
Nyt taitaa olla se "hullu-sämppäri" taas terrorisoimassa palstaa.
Myös YAD -dialogit antavat vaikutelman graaffisesta ohjelmasta kun vuorovaikutus tapahtuu dialogien välityksellä.
Eikös Elisa ja muut palvelun tarjoajat pysty sulkemaan liittymän jos sitä käytetään tahallisen haitantekoon.
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.
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