ana sayfa > Python > Acaba nedir, nedir?

Acaba nedir, nedir?

Çarşamba, 01 Ara 2010

Geçen gün bir arkadaşım, belirli bir ay içindeki Pazar günlerini Python yardımıyla nasıl bulabileceğimizi sordu e.posta aracılığıyla. Ben de şu betiği yazıp gönderdim ona:

# -*- coding: utf-8 -*-
 
import datetime, calendar
 
#0 = Pazartesi
#1 = Salı
#2 = Çarşamba
#3 = Perşembe
#4 = Cuma
#5 = Cumartesi
#6 = Pazar
 
def gun_bul(yil, ay, gun):
    for i in range(1, calendar.monthrange(yil, ay)[1]):
        if datetime.date(yil, ay, i).weekday() == gun:
            print datetime.date(yil, ay, i)
 
#2010 yılı Aralık ayı içindeki Pazar günleri
gun_bul(2010, 12, 6)

Ancak daha sonra tekrar bakınca bu betikte bir hata yaptığımı farkettim. Bulun bakalım buradaki hata nedir…

Python

  1. Feyyaz
    Çarşamba, 01 Ara 2010 zamanında 12:52 | #1

    Kodlar Python 2.x’te gayet güzel çalışıyor. Python 3.x’te 16. satırda “print” kodundan sonra gelen karakter dizilerini parantez içerisine almak gerekiyor. Başka hata(?) göremiyorum fakat incelemeye devam ediyorum…

  2. Çarşamba, 01 Ara 2010 zamanında 12:56 | #2

    Dediğim gibi, çok basit bir hata var kodlarda. İncelemeye devam… :)

  3. Çarşamba, 01 Ara 2010 zamanında 14:59 | #3

    calendar.monthrange()’in döndürdüğü değer ayın gün sayısı. range() işlevi ayın son gününü döndürmüyor, bu yüzden de for döngüsü ayın son gününü dikkate almıyor, mu?

  4. Çarşamba, 01 Ara 2010 zamanında 15:08 | #4

    İşte bu kadar basit bir hata. :) range() fonksiyonu içinde, monthrange()’in verdiği değerin bir fazlasını kullanmamız gerekiyor. Bu haliyle, bir ayın son gününe denk gelen Pazar günleri liste dışı kalır.

  5. Pazartesi, 03 Oca 2011 zamanında 15:12 | #5

    yani tam bulmuştum ,cevabı görünce birazcık genişleteyim dedim ,
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import datetime, calendar
    sozluk={“Pazartesi”:0,
    “Salı”:1,
    “Çarşamba”:2,
    “Perşembe”:3,
    “Cuma”:4,
    “Cumartesi”:5 ,
    “Pazar”:6}

    def gun_bul(yil, ay, gun):
    for i in range(1, calendar.monthrange(yil, ay)[1]):
    if datetime.date(yil, ay, i).weekday() == gun:
    print datetime.date(yil, ay, i+1),
    for x in sozluk:
    if sozluk[x] == gun:
    print x +”\n”,
    def sor():
    y= raw_input(“Yıl\t:”)
    a= raw_input(“Ay\t:”)
    g= raw_input(“Gün\t:”)
    try: isinstance(int(y), int) , isinstance(int(a), int)
    except ValueError:
    print “Ay ve yıl rakamsal olarak belirtilmeli \n’%s’ veya ‘%s’ kullanımı uygun değil” %(a,y)
    return
    try:isinstance( int(g), int)
    except ValueError:pass
    else:
    print “Gün belirteçi için ‘%s’ kullanımı uygun değil” %(g)
    return
    try:g = sozluk[g]
    except KeyError:
    print “Gün belirteçi için \n’”,
    for x in sozluk :print x,
    print “‘\nöğelerden hiçbiri eşleşmedi..”
    return
    gun_bul( int(y),int(a),g )
    sor()
    Düzgün oldu galiba olmamışta olabilir ama olsun paylaşayım :)

  6. Cem GÜLER
    Perşembe, 20 Oca 2011 zamanında 01:47 | #6

    Güzel beyin jimnastiği olmuş, ben de şöyle düşündüm:

    import calendar
    c = calendar.Calendar()
    def gun_bul(yil, ay, gun_no):
    for i in c.itermonthdates(yil, ay):
    if i.weekday() == gun_no and i.month == ay:
    print i

    gun_bul(2010, 12, calendar.SUNDAY)

  1. şimdilik geri bağlantı yok