单个字符输出没有返回任何内容

时间:2012-11-01 05:29:10

标签: python

这应该是一个函数的一部分,该函数用'$'替换辅音,直到达到"ch"字符,然后它将停止。

示例:

vowels_or_not(‘abcdeAghi’, ‘A’)应该返回‘a$$$e’

vowels_or_not(‘aaaaA’, ‘A’)应该返回‘aaaa’

我的问题是,如果输入字符串只有一个字符长,它就没有做任何事情。 vowels_or_not(a, X)应该返回avowels_or_not(x, A)应该返回$。其他一切都很好。我尝试修复它,但我仍然没有看到代码有什么问题,但我又是一个初学者!任何帮助将不胜感激。

def vowels_or_not (st, ch)
    vowels = ('a','e','i','o','u','A','E','I','O','U')
    flag = True
    a = 0
    aux = ''
    while flag is True:
        for i in range(len(st)):        
            if (st[i] == ch):
                flag = False
                break
            else:
                if (st[i] in vowels):
                    aux = aux + st[i]
                    a = a + 1
                if (st[i] not in vowels):
                    aux = aux + '$'
                    a = a + 1
    return aux

3 个答案:

答案 0 :(得分:1)

您的代码在这些情况下不起作用,因为您的while循环永远不会结束。一旦for循环退出,while循环就会永远持续下去。

要修复代码,只需在flag = False循环结束后设置for

def vowels_or_not (st, ch):
    vowels = ('a','e','i','o','u','A','E','I','O','U')
    flag = True
    a = 0
    aux = ''
    while flag is True:
        for i in range(len(st)):        
            if (st[i] == ch):
                flag = False
                break
            else:
                if (st[i] in vowels):
                    aux = aux + st[i]
                    a = a + 1
                if (st[i] not in vowels):
                    aux = aux + '$'
                    a = a + 1

        flag = False   # <-- Right here
    return aux

一个例子:

>>> vowels_or_not('a', 'x')
'a'
>>> vowels_or_not('x', 'a')
'$'

为了使您的代码更好一些,请不要使用索引。 Python允许您直观地迭代字符串:

def vowels_or_not(word, character):
    vowels = 'aeiou'
    output = ''

    before, middle, after = word.partition(character)

    for letter in before:
        if letter.lower() in vowels:
            output += letter
        else:
            output += '$'

    return output + middle + after

答案 1 :(得分:0)

如果st中的最后一个字符与ch不同,那么你的问题就是你的while循环永远不会结束。

但是你并不需要while循环,因为它是多余的,你只需要for循环:

def vowels_or_not(st, ch):
    vowels = ('a','e','i','o','u','A','E','I','O','U')
    a = 0
    aux = ''
    for i in range(len(st)):
        if (st[i] == ch):
            break
        else:
            if (st[i] in vowels):
                aux = aux + st[i]
                a = a + 1
            if (st[i] not in vowels):
                aux = aux + '$'
                a = a + 1
    return aux

>>> vowels_or_not('a', 'X')
'a'
>>> vowels_or_not('aaaAX', 'X')
'aaaA'
>>> vowels_or_not('aaabX', 'X')
'aaa$'

答案 2 :(得分:0)

import functools # for python3 reduce (working under python2 too)

vowels = 'aeiouAEIOU'

def vowels_or_not (st, ch):
    return functools.reduce(lambda a,b:a+(b in vowels and b or '$'), st.partition(ch)[0],'')

或更长版本

vowels = 'aeiouAEIOU'

def vowels_or_not_longer_version (st, ch):
    ret=''
    for i in st.partition(ch)[0]:
        ret+= i in vowels and i or '$'
    return ret