78302


特殊なアルファベット文字を使った外国人名を一般的なアルファベットに置き換えたいと思っています。例えばBjörn BorgをBjorn Borgに、Emily
Brontëに、というようにです。

このようなコードを書きました。

[code]

    import re
    specials = "ëö"
    name = input()
    for i in name:
        if i == specials:
            name = name.replace('ë', 'e').replace('ö', 'o')
        else:
            break
    print(name)
    
[/code]

その結果、エラーメッセージは出ないのですが、名前は元のままです。どのように改善すれば良いでしょうか。よろしくお願いいたします。


CC BY-SA 4.0
2021-07-19T14:21:14.447
78300
2021-07-19T23:52:44.043
47136
question
python python3
特殊なアルファベット文字の置換


「特殊な文字か」はあまり関係がなく、かつ `for` ループの処理が不要な気がします。

恐らく置換対象の文字を含むかを事前にチェックしつつ処理しようとしているのかと思われますが、`replace` 等は置換対象の文字を含まなければそのまま
"何もしない" だけので、素直に呼び出すだけで済みそうです。

[code]

    import re
    name = input()
    name = name.replace('ë', 'e').replace('ö', 'o')
    print(name)
    
[/code]


CC BY-SA 4.0
2021-07-19T16:14:18.977
78302
2021-07-19T23:52:44.043
2021-07-19T23:52:44.043
3060
3060
78300
answer


以下は
[str.maketrans()](https://docs.python.org/3/library/stdtypes.html#str.maketrans)
と
[str.translate()](https://docs.python.org/3/library/stdtypes.html#str.translate)
を使う方法です。

[code]

    specials = ('ëö', 'eo')
    name = input()
    name = name.translate(str.maketrans(*specials))
    print(name)
    
[/code]

`input()` ではなくテストデータで確認してみます。

[code]

    specials = ('ëö', 'eo')
    names = ('Björn Borg', 'Emily Brontë')
    
    for name in names:
      trans = name.translate(str.maketrans(*specials))
      print(f'{name} => {trans}')
    
    ## 実行結果
    Björn Borg => Bjorn Borg
    Emily Brontë => Emily Bronte
    
[/code]


CC BY-SA 4.0
2021-07-19T17:52:39.447
78303
2021-07-19T17:52:39.447
47127
78300
answer