-1

入力文字列 (st) と文字 (ch) を受け取る関数に取り組んでいます。文字列 st には、文字、数字、および記号を含めることができます。この関数は、元の文字列と同じ母音 ('aeiou' または 'AEIOU' のいずれか) を持ち、 st と同じ位置にある新しい文字列を返す必要があります。 $'、ただし、これらの文字のみを含み、文字 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

簡単なアプローチ:

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 に答える
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) )

文字が指定された文字と異なる間、時間がかかると文字列が繰り返され、母音でない場合は繰り返される文字が置き換えられます。

于 2012-10-29T22:45:29.080 に答える
0

for ループを反復処理するために別の変数を選びたいとしconますcons。私がこれら 2 つの名前を選んだのは、cons の複数形によって何らかの意味があり、単一の要素ではなくリストであることを暗示しているからです。同じ変数を選択すると、con が子音のリストではなく、文字列内のこの要素と等しくなるように再定義されます。

于 2012-10-29T22:18:08.477 に答える