2012-01-06 8 views
0

ファイルを取り出して各単語の中文字をシャッフルする必要がありますが、最初と最後の文字をシャッフルすることはできません。 。すべての文字が区切られた別々のリストに各単語を入れることができれば、それらをシャッフルする方法を見つけ出すことができると思います。どんな助けもありがとう。ありがとう。ファイルを取り込んで中間の文字をシャッフルする

+5

ランダムにインポートすることを忘れないでください

'

def scramble(word): output = list(word[1:-1]) random.shuffle(output) output.append(word[-1]) return word[0] + "".join(output)' 

の周りに文字をシャッフルするために、このような何かを行うことができますか?正確にどこに問題がありますか?それを打ち砕いて、それをコードしようとする - 本当の質問に答えるのは立っているからです。 – Yuushi

答えて

3
text = "Take in a file and shuffle all the middle letters in between" 

words = text.split() 

def shuffle(word): 
    # get your word as a list 
    word = list(word) 

    # perform the shuffle operation 

    # return the list as a string 
    word = ''.join(word) 

    return word 

for word in words: 
    if len(word) > 3: 
     print word[0] + ' ' + shuffle(word[1:-1]) + ' ' + word[-1] 
    else: 
     print word 

シャッフルアルゴリズムは意図的に実装されていません。

+0

私は少し混乱しています。それは実際に何かをシャッフルしませんが、単語自体にスペースを作成します。 – Makoto

+0

@Makoto:「各単語を別々のリストに入れて、すべての文字が分かれば、それらをシャッフルする方法を見つけ出すことができると思う」 私は完全な問題を解決したくありませんでした。 :-) –

+1

十分に公正な(そして完全に正当な)。私はそのdownvoteを元に戻すことができるようにあなたの返信で何かを編集します。 – Makoto

0

random.shuffleを見てください。あなたが目指すもののように見えるリストオブジェクトをシャッフルします。あなただけだから、あなたがしようとしたものを

+0

ありがとう。 Random.shuffleはとても役に立ちました=) – Albo

0
#with open("words.txt",'w') as f: 
# f.write("one two three four five\nsix seven eight nine") 

def get_words(f): 
    for line in f: 
     for word in line.split(): 
      yield word 

import random 
def shuffle_word(word): 
    if len(word)>3: 
     word=list(word) 
     middle=word[1:-1] 
     random.shuffle(middle) 
     word[1:-1]=middle 
     word="".join(word) 
    return word 

with open("words.txt") as f: 
    #print list(get_words(f)) 
    #['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] 
    #print map(shuffle_word,get_words(f)) 
    #['one', 'two', 'trhee', 'four', 'fvie', 'six', 'sveen', 'eihgt', 'nnie'] 
    import tempfile 
    with tempfile.NamedTemporaryFile(delete=False) as tmp: 
     tmp.write(" ".join(map(shuffle_word,get_words(f)))) 
     fname=tmp.name 

import shutil 
shutil.move(fname,"words.txt") 
+0

改行文字を保存したくないと思っていました。あなたがした場合は、単純にget_words() –

関連する問題