2014-03-25 12 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,但是我没有看到这些值在循环内部发生了任何变化,除非我错过了明显的东西。我不认为这是一个问题。 –

相关问题