Python dize dizini

Python işlevleri ve meth

Listeler gibi, Python dizeleri dizine eklenir. Bu, bir dizedeki her değerin, o değere erişmek için kullanabileceğiniz kendi dizin numarasına sahip olduğu anlamına gelir. Bir dizede olmayan bir dizin değerine erişmeye çalışırsanız, “TypeError: dize dizini aralık dışında” error.

Bu kılavuzda, bu hatanın ne anlama geldiğini ve neden ortaya çıktığını tartışıyoruz. Nasıl çözeceğinizi anlamanıza yardımcı olmak için bu hatanın bir örneğini uygulamalı olarak inceliyoruz.




TypeError: string index out of range

Python'da, stringler 0'dan başlayarak indekslenir. . “Pineapple”:

dizesine bir göz atın
Pineapple
123
td>45678

“Ananas” dokuz harf içerir. Dizeler 0'dan dizine alındığından, dizimizdeki son harfin dizin numarası 8'dir. Dizimizdeki ilk harfin dizin numarası 0'dır.

Konumdaki bir öğeye erişmeye çalışırsak. Listemizde 9 hatasıyla karşılaşacağız. Bunun nedeni, dizin 9 konumunda Python'un okuyabileceği bir harf olmamasıdır.

“TypeError: dize dizini aralık dışında” dizelerin 0'dan dizine eklendiğini hesaba katmayı unutursanız hata yaygındır. range() ifadesi kullanan for döngülerinde de yaygındır.< /p>


Örnek Senaryo: Diziler 0'dan Dizine Alındı

Bir dizideki tüm harfleri yeni bir satıra yazdıran bir programa bakın:

81 Katılımcıların yüzdesi, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. Bugün bir eğitim kampına katılın.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan daha az zaman harcadı.

Kodumuz bir while döngüsü. Her döngü yürütüldüğünde, değişkenimiz “count” 1 artar. Bu, döngümüz devam ederken bir sonraki harfe geçmemizi sağlar.


Örnek bir cümle ile fonksiyonumuzu çağıralım:

print_string("String")

Kodumuz şunu döndürür:

 Geri İzleme (en son çağrı son): Dosya "main.py", satır 8,  print_string("test") Dosya "main.py", satır 5, print_string print(cümle[sayı]) IndexError: string index out of range

Kodumuz, stringimizdeki her karakteri yazdırır. Her karakter yazdırıldıktan sonra bir hata oluşur. Bunun nedeni, while döngümüzün “count&rdquo kadar devam etmesidir. ; artık “cümlenin” uzunluğundan küçük veya ona eşit değildir.

Bu hatayı çözmek için, while döngümüzün yalnızca “count” dizemizin uzunluğu. Bunun nedeni, dizelerin 0'dan dizine eklenmesi ve len() yönteminin bir dizenin tam uzunluğunu döndürmesidir. Böylece, “string” 6. Ancak, dizimizde dizin 6 konumunda bir karakter yok.

Döngümüzü revize edelim:

sayım < len(cümle):

Bu döngü yalnızca “count” “cümlenin” uzunluğundan daha az.

Kodumuzu çalıştırın ve ne olduğunu görün:

S trin g

Kodumuz başarıyla çalışıyor!




Örnek Senaryo: Hamming Mesafe Programı

Burada yazıyoruz iki dizi arasındaki Hamming Mesafesini hesaplayan bir program. Bu bize iki karakter dizisi arasında ne kadar fark olduğunu söyler.

Hamming mesafesini hesaplayan bir fonksiyon tanımlayarak başlayın:

def hamming(a, b): aralıkta c için farklar = 0 (0, len(a)): if a[c] != b[c]: farklar += 1 dönüş farkı

Fonksiyonumuz iki argümanı kabul eder: a ve b. Bu bağımsız değişkenler, karşılaştırmak istediğimiz dize değerlerini içerir.

Fonksiyonumuzda, bir for döngüsü kullanırız. o konumdaki karakterlerin aynı olup olmadığını görmek için dizilerimizdeki her konumu gözden geçirin. Aynı değilse, “farklılıklar” sayaç bir artar.


Fonksiyonumuzu çağırın ve iki dizeyle deneyin:

answer = hamming("Tess1", "Test") print(answer)

Kodumuzu çalıştırın ve ne olduğunu görün:

İzleme (en son çağrı son): Dosya "main.py", satır 10,  answer = hamming("Tess1" , "Test") Dosya "main.py", satır 5, eğer a[c] != b[c]: IndexError: string index out of range

Kodumuz döner bir hata. Bunun nedeni, “a” ve “b”nin aynı uzunlukta olmamasıdır. “a”nın “b”dan bir fazla karakteri vardır. Bu, döngümüzün “b”da başka bir karakter bulmaya çalışmasına neden olur. bu, tüm karakterleri aradıktan sonra bile mevcut değil. “b”.

Bu hatayı önce dizelerimizin geçerli olup olmadığını kontrol ederek çözebiliriz:

def hamming(a, b): farklar = 0 if len(a) != len(b): print("Dizeler aynı uzunlukta olmalıdır.") aralıkta c için dönüş( 0, len(a)): if a[c] != b[c]: farklar += 1 dönüş farkları

Bir “if” kullandık. dizelerimizin aynı uzunlukta olup olmadığını kontrol etmek için ifade. Eğer öyleyse, programımız çalışacaktır. Değillerse programımız konsola bir mesaj yazdıracak ve fonksiyonumuz ana programımıza boş bir değer döndürecektir. Kodumuzu tekrar çalıştırın:

"Python.Engineering hayatıma en ihtiyacım olduğu anda girdi ve hızlı bir şekilde bir bootcamp ile eşleşmeme yardımcı oldu. Mezun olduktan iki ay sonra, değerlerime uygun hayalimdeki işi buldum ve hayattaki hedefler!"

Venus, Rockbot'ta Yazılım Mühendisi

Kodumuz artık hata döndürmüyor. Algoritmamızı aynı uzunluğa sahip dizeler üzerinde deneyin:

answer = hamming("Test", "Tess") print(answer)

Kodumuz şunu döndürür: 1. Kodumuz, “Test” ve “Tess”.




Sonuç

“TypeError: dize dizini aralık dışında” var olmayan bir dizin konumundaki bir öğeye erişmeye çalıştığınızda hata oluşur. Bu hatayı, kodunuzun dizelere 0 konumundan dizine alınmış gibi davrandığından emin olarak çözersiniz.


Artık, profesyonel bir kodlayıcı!





Python dize dizini: StackOverflow Questions

Tutorials