-1

我正在研究一个接收输入字符串(st)和字符(ch)的函数。字符串 st 可以包含字母、数字和符号。该函数应返回一个新字符串,该字符串具有与原始字符串相同的元音('aeiou' 或 'AEIOU' 中的任何一个),并且位于与 st 中相同的位置,对于其他位置,它应该具有符号 ' $',但只包括这些字符,直到字符 ch 的第一次出现并且不包括字符 ch(即使 ch 是元音)。(返回的字符串可能比原始字符串短,也可能是空字符串)。

我已将字符串转换为列表,以便将不是元音的字符更改为符号“$”,但我不明白如何进行此更改。这是我尝试过的,

def vowels_or_not (st, ch)
    newst=list(st)
    n= st.find('ch')
    nt=n+1
    sign='$'
    con=list('bcdfghjklmnpqrstvwxyz')
    for con in newst:
        del con
        del newst[nt:]    
    return sign.join(newst)

但它不起作用。

我怎样才能做到这一点?

4

4 回答 4

2

一种不那么“循环”的方法:

def vowels_or_not(string, char):
    left, mid, right = string.partition(char)
    # left is now a string with everything BEFORE the first occurence of char

    left = [(c if (c.lower() in "aeiou") else '$')
            for c in left]
    # left is now a list of all characters in the original left with vowels 
    # replaced with $

    return ''.join(left)

print vowels_or_not('abcdefghijklmno', 'i') 
# => a$$$e$$$
于 2012-10-29T22:24:40.957 回答
0

您想选择一个不同的变量来遍历 for 循环,例如:con,然后选择常量列表,例如cons。我之所以选择这两个名称,是因为它们通过复数形式具有某些含义,暗示它是一个列表而不是单个元素。如果您选择相同的变量,那么您将重新定义 con 以等于字符串中的此元素,而不是辅音列表。

于 2012-10-29T22:18:08.477 回答
0

itertools是你的朋友。

使用 itertool 函数,它变成了一个简单的单行器,甚至不值得一个函数。

st = "printing until k and not over"
ch = "k"

from itertools import takewhile
"".join( c if c in 'aeiouAEIOU' else '$' for c in takewhile(lambda k: k!=ch,st) )

当字符与给定字符不同时,takewhile 遍历字符串,如果不是元音,则替换被迭代的字符。

于 2012-10-29T22:45:29.080 回答
0

一个简单的方法:

def func(st,ch):
   con='bcdfghjklmnpqrstvwxyz'
   vow="aeiou"
   sign="$"
   ans=""
   for x in st:
       if x !=ch:
           if x in con:
              ans+="$"
           else:
              ans+=x   
       else:
           break
   return ans

print func("abcdeefhkfgosdmvnsvh","k")
print func("adbfkjsdbksdbv","a")
print func("iduskjfhdrsqksd","j")

输出:

a$$$ee$$

i$u$$
于 2012-10-29T22:30:33.723 回答