Neden 7000. Sayı çıkmıyor?

Merhabalar arkadaşlar umarım doğru yere konu açmışımdır.

Ben hobi niyetine python ile uğraşıyorum. Kendimce bir takvim yapmaya çalıştım ama 7000. Gün listede gözükmüyor. Range değerini 7010 yapsam bile 7000. Gün çıkmıyor… Ayrıca 70-700 günler çıkıyor ama neden 7000 sayısı çıkmıyor çok merak ettim.



sayac = 0
say = 0
a = ['pazartesi','salı','çarşamba','perşembe','cuma','cumartesi','pazar']

for i in range(7003):
    say +=1

    if sayac >= 7:
        sayac =0
    else:
        print(say,a[sayac])
        sayac +=1

Merhaba, editörünüzde yazdığınız kodu kopyalayıp burada anlatılan yollardan biriyle buraya aktarabilir misiniz? Veya şurada formatlayıp sonucu buraya tekrar yazabilirsiniz. Gönderiyi edit’leyebilirsiniz veya olmadı bir gönderi daha yazabilirsiniz. Böylelikle size yardım edilme ihtimalini artırabilirsiniz.

7000’i 70 ve 700’den ayıran özelliklerinden birisi 8’e kalansız bölünmesidir… Tıpkı 6992 gibi.

2 Beğeni

Cevabınız için teşekkür ederim… konuyu editledim.

1 Beğeni

Allah Allah 6992’yi farketmedim. 8’e bölünüp bölünmemesinin sebebi nedir acaba? Neden böyle olmuştur?

8’in katlarının yazdırılmadığında hemfikir olduğumuzu varsayarsak (nedeni konusunda olmasak da) 7003 yerine şimdilik 10 diyebiliriz, değil mi? Sonrasında bir kalem kağıt üzerinden programı ilerletseniz ve for’un 10 dönüşünün her birinde elinizdeki say ve sayac değişkenlerinin değerlerini ve çıktı olarak yazdırılanları bir kenara kaydederek ilerleseniz, gizemi çözersiniz diye düşünüyorum :d Olmadı şurada bu kağıt-kalem işini aşağı yukarı yapan bir yer var, “Next>” diyerek programın akışını gözlemleyebilirsiniz. Yine buradan sorabilirsiniz herhangi bir durumu.

2 Beğeni

Hocam güzel cevaplarınız için çok teşekkür ederim. Bugün değişik şeylerle karşılaştım. İkincisi bana vermiş olduğunuz sitede kendi kodumu görmek. Link’te her hangi bir id görmemek beni biraz şaşırttı. Sanki kendi sitenizde benim için paylaşmış gibisiniz. Umarım anlatabilmişimdir.

Ve benim kodum da sayac değişkeni sifirlanirken birşeyler oluyor.
7. Rakam pazar gününe denk geliyor ve yediden sonra sayaç değişkeni sıfır oluyor ama say degiskeni durmadan devam ediyor. Bunu biraz daha kurcalamam gerek.

Ayrıca yorumlarınız beni daha iyi motive ediyor çok teşekkür ederim…

1 Beğeni

Evet, o ilgili sitenin marifeti, normalde link https://pythontutor.com/visualize.html#code=sayac%20%3D%200 say%20%3D%200 a%20%3D%20[‘pazartesi’,‘salı’,‘çarşamba’,‘perşembe’,‘cuma’,‘cumartesi’,‘pazar’] for%20i%20in%20range(10)%3A %20%20%20%20say%20%2B%3D1 %20%20%20%20if%20sayac%20>%3D%207%3A %20%20%20%20%20%20%20%20sayac%20%3D0 %20%20%20%20else%3A %20%20%20%20%20%20%20%20print(say,a[sayac]) %20%20%20%20%20%20%20%20sayac%20%2B%3D1&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=[]&textReferences=false şeklinde :d (Site benim değil ama.)

Evet, sorunu saptamışsınız! Belki programınızın yapması gerekeni normal yazı ile, nam-ı diğer pseudocode ile yazıp programınızın şimdiki haliyle karşılaştırmanız da size yardımcı olabilir.

Rica ederim, kolaylıklar dilerim. Yine buradan sorabilirsiniz herhangi bir durumu.

1 Beğeni

sayac 7 den büyük veya 7 ye eşit olduğunda sadece sayac ı 0 yapıyor ancak ekrana herhangi bir şey yazdırmıyor bu yüzden her 8 tekrarlamadan 1 inde ekrana hiçbir şey yazdırmıyor. Ben sorunu şöyle çözdüm:

sayac = 0
say = 0
a = ['pazartesi','salı','çarşamba','perşembe','cuma','cumartesi','pazar']

for i in range(7003):
    say += 1

    if sayac >= 7:
        sayac = 0
        print(say,a[sayac])
        sayac += 1
    else:
        print(say,a[sayac])
        sayac += 1

3 Beğeni

Bir işi yapmanın birden çok yolu vardır, aslında kolayca sistem saat ve takviminden ilgili zaman ve tarih bilgisi ileri dönük çekilebiliyor.

Fakat bu tür takvim soruları genelde 7 nin katları olan modül aritmetiğini öğrenmek için kullanılır.

Bu nedenle bu kadar karar yapısına if falan gerek olmadan da kolayca çözebilirsin.

a = ['pazartesi','salı','çarşamba','perşembe','cuma','cumartesi','pazar']

for i in range(7000):
        print((i+1),a[i%7])

a içinde pazartesi sıfırıncı sırada.

Bu nedenle i de sıfırdan başladığı için modülde her seferinde 7 de sıfırıncı sıradaki pazartesi görünür.

For döngüsünde, i ise hep sıfırdan başlar, ama listelerken ilk sırada 0 görmek istemzsiniz bu neden i yi yazdırırken +1 ile 1 den başlatmış oluyoruz.

Kodu daha da kısaltabilirsiniz.

Dediğim gibi yanlış diye bir şey yok, her yol bir çözümdür. Sadece modül operatörü % kullanarak çözülebilsin diye bu tür ay yıl gün soruları verilir aslında. Altını çizmek istedim.

İlave yapayım. Madem sistem tarihi alıp takvim oluşturmaktan da bahsettim.

Onunla ilgili bir kod da ilave edeyim.

import calendar

print ("2022 Takvimi : ")
print (calendar.calendar(2022, 2, 1, 6))

Kaynak:

Python | Calendar Module - GeeksforGeeks

calendar — General calendar-related functions — Python 3.10.2 documentation

2 Beğeni

@Then_Shiffman
@Furkan3
@semtex

çok değerli bilgileriniz için çok teşekkür ederim. Gerçekten kaliteli cevaplar.
bende şöyle bir ol buldum.

liste = list(["pazaresi", "salı", "çarşamba", "perşembe", "cuma", "cumartesi", "pazar"])
sayac = 0
while sayac < 31:
    for x in range(7):
        sayac += 1
        if sayac == 31:
            break
        print(sayac,liste[x])

benimcçözümlerim her zaman uzun oluyor :smiley:

3 Beğeni

Bir işlemi hem if’te hem de else’de yapıyorsanız o işlemi ne if’te ne de else’de yapmalısınız zira işlemi “koşulsuz” çalıştırıyorsunuzdur.

3 Beğeni

Zaten print i koşulsuz çalıştırmak istiyorum “sayaç = 0” koşullu çalışacak. Tabii böyle uzun bir yol yerine if ve else bittiken sonra print i koyabilirdim. Kodu öyle düzenleyecektim aslında ama bilgisayar kapalıydı.
Edit: else koyulmayabilir bile.

1 Beğeni

Elseyi kaldır

sayac = 0
say = 0
a = ['pazartesi','salı','çarşamba','perşembe','cuma','cumartesi','pazar']

for i in range(7003):
    say +=1

    if sayac >= 7:
        sayac =0
    print(say,a[sayac])
    sayac +=1

Her zaman yazdırman lazım. Yazdırmazsan eğer atlar o sayıyı.

2 Beğeni

@Empera0
Gerçekten bu konuda çok şey öğrendim. Allah hepinizden razı olsun.

3 Beğeni