python 言語処理100本ノック -第1章: 準備運動- 09. Typoglycemia

設問

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

ポイントは「先頭と末尾の文字は残す」「文字の順序をランダムに並び替える」の2点でしょうか。
まず「先頭と末尾の文字は残す」ですが、これはpython標準の文字列操作の仕組みで実現できます。
wrk = val[1:len(val) – 1]
とすることで、2文字目~最後の文字の1つ前の文字までを取り出せます。
「文字の順序をランダムに並び替える」はrandom.sample()関数を使えば実現できます。
random.sample()は第1引数に並び替え対象の文字列、第2引数に取得する文字数を設定します。
今回は事前に先頭と末尾の1文字を取り除いた文字列、とその全文字数を抽出対象としています。

#coding: utf-8
import random


def random_sort(targetArray):
    result = ''
    for val in targetArray:
        if len(val) < 4:
            result += val + ' '
        else:
            wrk = val[1:len(val) - 1]
            wrk2 = val[0] + ''.join(random.sample(wrk, len(wrk))) + val[-1:]
            result += wrk2 + ' '
    print(result)

target = 'I couldn\'t believe that I could actually understand what I was reading : the phenomenal power of the human mind .'
targetArray = target.split(' ')

random_sort(targetArray)


実行結果


I culn'odt bevliee that I could aucaltly uansetdrnd waht I was rneiadg : the poaennheml pwoer of the hamun mind .

開発環境

Windows10
Python 3.7.3
Visual Studio Code 1.33.1

言語処理100本ノック公式

言語処理100本ノック 2015