2014-03-04 47 views
0

我已經創建了以下代碼來打亂單詞中的字母(第一個和最後一個字母除外),但是如何拼寫一個句子中單詞的字母;因爲輸入要求輸入一個句子而不是一個單詞。感謝您的時間!如何拼寫一個句子中的單詞 - Python

import random 

def main(): 
    word = input("Please enter a word: ") 
     print(scramble(word)) 

def scramble(word): 
    char1 = random.randint(1, len(word)-2) 
    char2 = random.randint(1, len(word)-2) 
    while char1 == char2: 
     char2 = random.randint(1, len(word)-2) 
    newWord = "" 

    for i in range(len(word)): 
     if i == char1: 
      newWord = newWord + word[char2] 
     elif i == char2: 
     newWord = newWord + word[char1] 

     else: 

      newWord = newWord + word[i] 

    return newWord 

main() 
+0

懷疑副本o f [有沒有什麼辦法在Python中爭奪字符串?](https://stackoverflow.com/questions/6181304/are-there-any-way-to-scramble-strings-in-python)。 – CyanCoding

回答

1

拆分句子譯成單詞列表(和一些標點符號)與split方法:

words = input().split() 

,然後做幾乎你以前是幹什麼的,只是用列表,而不是一回事一個字符串。

word1 = random.randint(1, len(words)-2) 

... 

newWords = [] 

... 

newWords.append(whatever) 

有更有效的方式做掉比你在做什麼,但:

def swap_random_middle_words(sentence): 
    newsentence = list(sentence) 

    i, j = random.sample(xrange(1, len(sentence) - 1), 2) 

    newsentence[i], newsentence[j] = newsentence[j], newsentence[i] 

    return newsentence 

如果你真正想要做的是應用你一個字搶一個句子的每個單詞,你可以做到這一點與循環或列表理解:

sentence = input().split() 
scrambled_sentence = [scramble(word) for word in sentence] 

如果你想完全隨機的順序中間的字母(或單詞),而不是僅僅交換兩個隨機字母(或單詞),random.shuffle函數可能是有用的。

1

我可以建議random.shuffle()

def scramble(word): 
    foo = list(word) 
    random.shuffle(foo) 
    return ''.join(foo) 

爲搶奪詞的順序:

words = input.split() 
random.shuffle(words) 
new_sentence = ' '.join(words) 

爲了爭奪每個單詞在句子中,保存的順序:

new_sentence = ' '.join(scramble(word) for word in input.split()) 

如果保持第一和最後一個字母是非常重要的原樣:

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

我也想到了第一件事,但OP的代碼只交換了單詞中的兩個隨機字母,限於第一個或最後一個字母。假設這是所需的行爲,「shuffle」不適合該任務。 – user2357112

+0

D'oh,我錯過了。 –

相關問題