Dize

2014-11-15 7 views
6
Başlangıçta değer atamak için = operatörünü kullanarak çalıştı

çalışıyor gibi görünmüyor ama kullanan bir hata, sonra denedim string.replace() döndürdü:Dize

encrypted_str.replace(encrypted_str[j], dec_str2[k], 2) 

ve

encrypted_str.replace(encrypted_str[j], unichr(ord(dec_str2[k]) - 32), 2) 

Ama orignal değerini döndürüyor. doğru sonucu verecek şekilde doğru değiştirmek API nasıl kullanılacağı konusunda

Yardım dışarı Ayrıca yerine unichr() arasında kullanılabilecek başka API yoktur.

encrypted_str

encrypted_str = raw_input() dec_str2 kullanıcıya alınmaktaysa kullanıcı tarafından giriş olarak frekans dizisidir. konu pek değişken Ben biz encrypted_str[j] kullanabilir miyim encrypted_str bana değişmeden çıkış veriyor gibi alt dizesi tanımlamak için dize bir karakter dönecekti yanlış replcae() API kullanıyorum bilmek istiyorum ilgilidir replace() API. encrypted_str.replace(encrypted_str[j], unichr(ord(dec_str2[k]) - 32), 1) max değerini kullanıyorum, 2 yerine (yalnızca bir tane de yedeğe ihtiyacım var) yerine 1 kullanın.

ben şöyle C olacak yapılması gereken fiili çalışma: encrypted_str[j] = dec_str2[k] -32.

Python'a yeni olduğum için bir yedek bulmaya çalışıyorum.

+1

"şifreli_str" ve "dec_str2" hakkında bilmeden ve aslında kodunuzun ardındaki mantığın ne olduğunu bilmeden nasıl yardımcı olabileceğimizi düşünüyorsunuz? – Kasramvd

+0

Bunun çok önemli olduğunu düşünmüyorum Ama mantık, Cinser Cipher şifresi çözülmüş freq dize –

+0

kullanarak deşifre etmektir. Lütfen açıklamanızı soruya ve verilerinize veya birazına ekleyin! – Kasramvd

cevap

19

Python'daki dizeler değişmezdir. Bu, belirli bir string nesnesinin, oluşturulduktan sonra asla değerinin değişmeyeceği anlamına gelir. Bu nedenle, some_str[4] = "x" gibi bir öğe ataması bir istisna oluşturacaktır.

Benzer bir nedenle, str sınıfı tarafından sağlanan yöntemlerin hiçbiri dizgiyi değiştiremez. Yani, str.replace yöntemi, beklediğiniz gibi çalışmaz. Dizeyi yerinde değiştirmekten ziyade, istenen değiştirmelerle yeni bir dize döndürür.

Dene:

encrypted_str = encrypted_str.replace(encrypted_str[j], dec_str2[k], 2) 

birçok tür değiştirmeler yapma gibi gidiyoruz, o zaman için str.join kullanın, karakterlerin bir liste halinde dize açmak için mantıklı birer modifikasyonlar bir sonuca varabilir İşiniz bittiğinde listeyi tekrar bir dizeye dönüştürün.

+0

Bu çalışmalara teşekkürler :) –

3

Python dizeleri değişmezdir. Bu, bir dizenin yayınınızda açıklandığı gibi bir yöntem çağrısı ile değiştirilemeyeceği anlamına gelir. İade edilen dizeyi yöntem çağrınızdan kullanmak için bir ödev kullanmalısınız. Örneğin

:

encrypted_str = encrypted_str.replace(encrypted_str[j], dec_str2[k], 2) 

Şimdi encrypted_str yeni değeri içerir.