2

現在形の動詞を過去形に変えるフランス語のプログラムを書いています。問題は、文字を置き換える必要があることですが、それらはユーザー入力であるため、行末からの文字を置き換える必要があります。これが私がこれまでに持っているものですが、それは文字を変更せず、エラーを出すだけです:

word = raw_input("what words do you want to turn into past tense?")
word2= word

if word2.endswith("re"):
 word3 = word2.replace('u', 're')
 print word3

elif word2.endswith("ir"):
 word2[-2:] = "i"
 print word2

elif word2.endswith("er"):
 word2[-2:] = "e"
 print word2

else:
 print "nope"

単語置換を試しましたが、それも機能しません。同じ文字列が返されるだけです。誰かが私に例を挙げて、それを少し説明してくれるとしたら、それは素晴らしいことです。:/

4

5 に答える 5

2

IMO 置換の使用方法に問題がある可能性があります。replace の構文について説明します。ここ

string.replace(s, old, new[, maxreplace])

この ipython セッションが役立つかもしれません。

In [1]: mystring = "whatever"

In [2]: mystring.replace('er', 'u')
Out[2]: 'whatevu'

In [3]: mystring
Out[3]: 'whatever'

基本的に、置き換えたいパターンが最初に来て、次に置き換えたい文字列が続きます。

于 2013-03-20T15:54:34.687 に答える
0

すみません

word3 = word2.replace('u', 're')


上記の行コードは、単語に別の「er」が存在する可能性があるため、誤った結果になる可能性があります

于 2013-03-20T15:57:39.510 に答える
0

ここでは正規表現、特にsubnメソッドがより良い解決策になると思います。

import re

word = 'sentir'

for before, after in [(r're$','u'),(r'ir$','i'),(r'er$','e')]:
    changed_word, substitutions  = re.subn(before, after, word)
    if substitutions:
        print changed_word
        break
else:
    print "nope"
于 2013-03-20T16:30:27.907 に答える
0

文字列は不変であるため、最後の 2 文字だけを置き換えることはできません。既存の文字列から新しい文字列を作成する必要があります。

そしてMM-BBが言ったように、replaceは文字のすべての出現を置き換えます...

試す

word = raw_input("what words do you want to turn into past tense?")
word2 = word

if word2.endswith("re"):
    word3 = word2[:-2] + 'u'
    print word3

elif word2.endswith("ir"):
    word3 = word2[:-2] + "i"
    print word3

elif word2.endswith("er"):
    word3 = word2[:-2] + "e"
    print word3

else:
    print "nope"

例 1 :

what words do you want to turn into past tense?sentir
senti

例 2 :

what words do you want to turn into past tense?manger
mange
于 2013-03-20T16:06:42.797 に答える