2014-03-25 32 views
-2

我試着運行句子......「你能說拉丁語嗎?我運行的這個python代碼在我運行時只會返回空白字符串

def igpay(sentence): 
    alist = sentence.split(" ") 
    NewSentence = "" 
    vowels = "aeoiu" 
    cons = "qwrtypsdfghjklzxcvbnm" 
    for i in range(len(alist)): 
     c = alist[i] 
     if c[0] in vowels: 
      a = c + "way" 
      NewSentence += a 
     elif c[0] not in vowels: 
      for j in range(len(c)): 
       f = c[j] 
       if f in cons: 
        o = c.replace(c[j],"") 
        a = c[j:j+1] 
        b = o + a 
        if f in vowels: 
         v = b + "ay" 
         NewSentence += v 
    return(NewSentence) 
+1

請修復代碼的縮進。您必須在代碼前加上四個空格,以便將問題識別爲代碼。 – sabbahillel

+0

請解釋你的代碼應該做什麼,它是如此的混亂,很難猜到 –

+0

對不起,這是我第一次,但我試圖將這句話翻譯成簡單的拉丁使用這兩個規則... 1. For任何以一個或多個輔音開始的單詞(y被認爲是輔音): 將輔音移動到單詞的結尾並附加字符串'ay'。 2.對於所有其他單詞,將字符串'way'追加到最後。 – byrneout64

回答

2

你什麼都看不到的原因是,NewSentence +=這兩行都沒有達到。

第一行永遠不會到達,因爲沒有以元音開頭的單詞。

第二行永遠不會到達,因爲您的測試if f in vowels從未執行,除非if f in cons已知爲真。我想你可能在這裏有一個縮進錯誤。

其他一些注意事項:

  • 您的兩個for語句可以更清楚地寫for word in alist:for ltr in word:(我用的變量word代替c,因爲我覺得它更清晰)。你不需要循環一個整數值,然後根據該變量進行索引。
  • 您最外層的if/elif對可以更清晰地寫成if/else。沒有其他可能的執行路線。
  • 您的陳述測試in vowelsin cons將失敗的大寫字母。
  • 您的替換()調用將取代所有元音的實例,而不僅僅是第一個。 (我不完全確定你要在這裏做什麼,它是剝離最初的輔音並將其放到底?)
+0

爲什麼不能達成,因爲他們是如果陳述,所以如果第一個字母不是元音,那麼它會移動到ELIF語句? – byrneout64

+0

因爲Python通過縮進來組織代碼塊。如果發佈的問題正確地反映了你的代碼,那麼如果條件爲真,那麼在'if f in cons:'中只縮寫*。 –

+0

代碼遍歷alist和c,但是我沒有看到這些值在循環內部發生了任何變化,除非我錯過了明顯的東西。我不認爲這是一個問題。 –

相關問題