👩‍💻

言語処理100本ノック 2020 (Rev 2) 第1章: 準備運動 09. Typoglycemia

2023/01/06に公開約1,300字

問題

09. Typoglycemia

スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする.適当な英語の文(例えば”I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .”)を与え,その実行結果を確認せよ.

solution09.py
import random

def typoglycemia(word):
    if len(word) <= 4:
        return word
    else:
        start = word[0]
        end = word[-1]
        others = random.sample(list(word[1:-1]), len(word[1:-1]))
        return ''.join([start] + others + [end])

text = 'I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .'
ans = [typoglycemia(word) for word in text.split()]
print(' '.join(ans))
output
I coundl’t bvileee that I cluod aautlcly ueanndtsrd what I was rdieang : the peaenmnohl pweor of the haumn mind .

この問題では、randomモジュールの関数sample()を使います。リストやタプル、文字列などのシーケンスオブジェクトからランダムに要素を選択して取得(ランダムサンプリング)できます。

ランダムに並び替えられた新たなリストを返す関数sample()や元のリストをランダムに並び替える関数shuffle()もあります。

https://github.com/kurokawa5/nlp100_2020/blob/main/chapter01/solution09.py

参考記事

第1章: 準備運動
Pythonでリストからランダムに要素を選択するchoice, sample, choices
Pythonでリストの要素をシャッフル(random.shuffle, sample)

Discussion

ログインするとコメントできます