Codewars'ta doğru yanıtın çıktı ekranında gözükmesine rağmen doğru kabul edilmemesi

Merhaba,
CodeWars adlı bir site varmış buradaki arkadaşlar konularında tartışırlarken görmüştüm merak edip girmek istedim. İşin açıkçası ilk kez böyle bir siteyle karşılaştım. Neyse kayıt oldum kata diye bir sistemi var sanırım bu soru çözme kısmı iyi güzel çok hoş. seviyemi belirledim (orta seviye seçtiğimi hatırlıyorum) pek hakim olmadığım için ve ingilizcem çok iyi olmadığından ötürü soruları translate den çevirip anlamaya çalışıyorum. buraya kadar da bir sorun yok… sorun şurda başlıyor arkadaşlar, Hocalarım, bilir kişiler aranızda daha önce bu sitede tecrübesi olan varsa bana burda nerede hata yaptığımı söyleyebilir mi çünkü ben bir hata göremiyorum…

Hemen soruyu ve ardından cevabımı atıyorum…

İşte Soru:

Welcome.
In this kata you are required to, given a string, replace every letter with its position in the alphabet.
If anything in the text isn’t a letter, ignore it and don’t return it.
"a" = 1, "b" = 2, etc.
Example

alphabet_position("The sunset sets at twelve o' clock.")

Should return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11" (as a string)

=============================================================

Türkçe çevirisi :

Hoş geldin.
Bu kata’da, bir dize verilmiş, her harfi alfabedeki konumuyla değiştirmeniz gerekir.
Metindeki herhangi bir şey harf değilse, görmezden gelin ve iade etmeyin.
"a" = 1, "b" = 2 vb.
Örnek

alphabet_position("The sunset sets at twelve o' clock.")

Should return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11" (as a string)

Cevabım:

def alphabet_position(text):
  alphabet = {
    "a" : 1,"b" : 2,"c" : 3,"d" : 4,"e" : 5,
    "f" : 6,"g" : 7,"h" : 8,"i" : 9,"j" : 10,
    "k" : 11,"l" : 12,"m" : 13,"n" : 14,"o" : 15,
    "p" : 16,"q" : 17,"r" : 18,"s" : 19,"t" : 20, 
    "u" : 21,"v" : 22,"w" : 23,"x" : 24,"y" : 25,
    "z" : 26
  }

  for i in text.lower():
    if i in alphabet.keys():
      print(str(alphabet[i]),end=" ")
      
alphabet_position("The sunset sets at twelve o' clock.")

istenen çıktı = 20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11
bendeki çıktı = 20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11
ama bunu kabul etmiyor. (SS ile izah edeyim)


Aydınlatırsanız çok sevinirim.

Merhaba.
CodeWars’ta cevapları return ile döndürmeniz gerekiyor. Malesef print() ile yazılan çıktılar kabul edilmiyor.
İstenen cevabı bir string içerisine kaydettikten sonra onu return etmelisiniz. Tavsiyem şudur ki çıktıları test etmek istiyorsanız kendi bilgisayarınızdan print() kullanarak test edin. Ardından doğruluğundan eminseniz print()'i return ile değiştirip cevabı kaydedin.

Bu soru için tavsiye: her bir harf için sözlükte yer ayırmak yerine şöyle bir liste kullanabilirsiniz.
alphabet = list("abcdefghijklmnopqrstuvwxyz")
Eğer herhangi bir harfin sırasını almak isterseniz de
indeks = alphabet.index(harf) + 1
yapabilirsiniz. indeks üzerine 1 ekleme sebebimiz soruda indeks numarasının 1 ile başlatılmış olması. Fakat .index() bize 0’a göre olan indeksi verecek. Bu yüzden 1 ekliyoruz.

İyi çalışmalar.

1 Beğeni

Açık bir şekilde return anahtar kelimesi ile geriye dönmeyen ve içerisinde yield barındırmayan her fonksiyon, çağrıldığında geriye dolaylı (implicit) olarak None değerini döndürüyor. Sizdeki fonksiyonda herhangi bir return ifadesi yok, yield da yok; dolayısıyla None dönüyor ve None should equal … diyor. Dolayısıyla hesapladığınız sonucu döndürmeniz gerekiyor.

Ayriyeten eğlenmek için string modülüne, itertools.count, ord ve zip fonksiyonlarına, dict sınıfına ve sözlük üreteçlerine bakıp bir de bunların bazılarını kullanarak çözmek isteyebilirsiniz.

2 Beğeni

Size teşekkür ederim ayrıntılı cevaplarınız için (yalnızca buraya verdiğiniz cevaptan ötürü değil :slight_smile: )

@anon18277073 size de teşekkür ederim bilgilendirdiğiniz için.

yazdığım kodun üstünden biraz geçip birazda eskiye dönerek hangi terimin ne anlama geldiğine tekrar baktım ve kodu şöyle modifiye ederek çözdüm:

def alphabet_position(text):
    string = ""
    alphabet = {
    "a" : "1","b" : "2","c" : "3","d" : "4","e" : "5",
    "f" : "6","g" : "7","h" : "8","i" : "9","j" : "10",
    "k" : "11","l" : "12","m" : "13","n" : "14","o" : "15",
    "p" : "16","q" : "17","r" : "18","s" : "19","t" : "20", 
    "u" : "21","v" : "22","w" : "23","x" : "24","y" : "25",
    "z" : "26"
  }
    if type(text) == str:
        for i in text.lower():
            if i in alphabet.keys():
                string += f"{alphabet[i]} "
    return string.strip()

Herkese İyi geceler…

1 Beğeni