Index() Metodu Hatası

Merhaba.
Linux Mint Ulyana işletim sisteminde Python3.8 ile İstihza Python 3 Belgeleri’nden Python öğrenmeye çalışıyorum. index() metodunu çalışırken karşılaşmış olduğum problemi internetten aradım ancak bir sonuç elde edemedim.
Kodlar şöyle:

kardiz = input("Metin girin: ")
aranacak = input("Aradığınız harf: ")

for i in range(len(kardiz)):
    if i == kardiz.index(aranacak, i):
        print(f"{i}. sırada 1 adet {aranacak} harfi bulunuyor.")

Bu kodlara göre “adana” girip “a” harfini arayınca kodlar düzgün çalışıyor. Ancak “adıyaman” girip “a” harfini arayınca aşağıdaki gibi bir çıktı ile karşılaşıyorum.

Metin girin: adıyaman
Aradığınız harf: a
0. sırada 1 adet a harfi bulunuyor.
4. sırada 1 adet a harfi bulunuyor.
6. sırada 1 adet a harfi bulunuyor.
Traceback (most recent call last):
  File "/home/aakmaz/python/deneme.py", line 5, in <module>
    if i == kardiz.index(aranacak, i):
ValueError: substring not found

Bu problemi nasıl çözebilirim?
Teşekkür ederim.

1 Beğeni
else:
      pass

deneyin bi.

i 0’dan string uzunluguna giderken n kere arama yapiyoruz. Bu aramalar i’den basliyor:

"adiyaman".index("a")
"diyaman".index("a")
"iyaman".index("a")
...
"n".index("a")

index, aradigini bulamadiginda ValueError throw ediyor.

Bu durumda girdideki son a’dan sonraki her harf hata verir.

2 Beğeni

Verdiğiniz kodlar belgelerde bulunuyorsa linkini verin, hata varsa düzeltilir.

1 Beğeni

String uzunluğuna göre arama yapılmasını nasıl sağlayabiliriz?

else:
    pass

yapınca değişen bir şey olmadı.

Karakter dizisi üzerinden bir for döngüsü ile geçip aradığınız karakter olup olmadığına bakabilirsiniz:

sayaç = 0
for i in "adıyaman":
  if i=="a":
    print(sayaç)
  sayaç += 1

Olmaz zaten, döngüler ile kullanılan else’nin yükseltilen hatalar ile alakası yok.

Sayın EkremDincel,
Önce teşekkür ederim. Dediğiniz gibi kodları şu şekilde düzenledim.

kardiz = input("Metin girin: ")
aranacak = input("Aradığınız harf: ")
sayac = 0

for i in kardiz:
    if i == aranacak:
        sayac += 1
        print(f"{sayac}. sırada 1 adet {aranacak} harfi bulunuyor.")

İstediğim gibi sonuç aldım ancak ben, bunu index() metodu ile yapmak istiyorum.
Sizin dediklerinizi de dikkate alarak şu şekilde bir kod yazdım.

kardiz = input("Metin girin: ")
aranacak = input("Aradığınız harf: ")
sayac = ""

for i in kardiz:
    if i not in sayac:
        sayac += i
for i in range(len(sayac)):
    if i == kardiz.index(aranacak, i):
        print(f"{i}. sırada 1 adet {aranacak} harfi bulunuyor.")

Burada da aranan harfin sonuncusunu vermiyor.
“adıyaman” örneğinde çıktı şu şekilde:

Metin girin: adıyaman
Aradığınız harf: a
0. sırada 1 adet a harfi bulunuyor.
4. sırada 1 adet a harfi bulunuyor.

str.index metodu bir karakter dizisi içinde bir harfin kaç defa ve nerelerde geçtiğini bulmak için kullanılmıyor. Algoritmayı boşuna karmaşıklaştırıyorsunuz.

İllaki str.index kullanmak istiyorsanız str.count ile birlikte yapılabilir. Döngü, aranan harf karakter dizisinin içinde kaç defa geçiyorsa o kadar tekrar edilir.

Ben olsam, aranan harfin bir karakter dizisi içinde hangi indislerde yer aldığını öğrenmek için aşağıdaki yöntemi kullanırdım.

kardiz = input("Metin girin: ")
aranacak = input("Aradığınız harf: ")

for i in range(len(kardiz)):
    if kardiz[i] == aranacak:
        print(f"{i}. sırada 1 adet {aranacak} harfi bulunuyor.")

Teşekkür ederim, dildeolupbiten. Böyle böyle öğreneceğiz.

1 Beğeni

Teşekkür ederim. Yavaş yavaş öğreniyoruz.

2 Beğeni