2012-01-06 109 views
0

之間的所有中間字母我需要拿出一個文件並洗牌每個單詞的中間字母,但我無法洗牌第一個和最後一個字母,而且我只能洗牌超過3個字符的單詞。我想我可以找出一種方法來打亂他們,如果我可以把每個單詞放在他們自己的單獨列表中,所有的字母都是分開的。任何幫助,將不勝感激。謝謝。接收文件並洗牌

+5

那麼你嘗試過什麼呢?你究竟在哪裏遇到問題?分解它,嘗試編碼 - 因爲它沒有真正的問題需要回答。 – Yuushi 2012-01-06 01:06:37

回答

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 2012-01-06 01:21:57

+0

@Makoto,來自這個問題:「我認爲如果我可以把每個單詞放在各自單獨的列表中,所有的字母都是分開的,我想我可以找出一種方法來洗牌。」 我不想解決完整的問題。 :-) – 2012-01-06 01:24:10

+1

夠公平(並且完全合理)。在你的回覆中編輯一些內容,這樣我就可以撤消這個退步了。 – Makoto 2012-01-06 01:26:57

0

看看random.shuffle。它將一個列表對象洗牌,這似乎是你正在瞄準的目標。你可以做這樣的事情洗牌周圍

`

def scramble(word): 

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

字母只記得導入隨機

+0

謝謝。 Random.shuffle非常有用=) – Albo 2012-01-06 01:44:16

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() – 2012-01-06 01:51:15