0

可能的重复:
Python 拆分字符串并混淆中间

我有一个 python 程序,我真的被困住了,我这样做的目的是从用户那里取一个句子,然后把单词的中间弄乱,让外面的字母保持完整......我的老师说我需要做点什么参数,但我真的不知道如何访问或使用我的功能......

import random


user_words = input("Enter a word or sentence: ") #Gets user input

word = list(user_words.split()) #Creating a word list of the user input


def Jumble_One_Word(x):

    if len(user_words) > 2: #Only need to change words longer than 2

      first_letter = user_words[0] #Takes the first letter out and defines it

      last_letter = user_words[-1] #Takes the last letter out and defines it

      letters = list(user_words[1:-1]) #Takes the rest and puts them into a list

      random.shuffle(letters) #shuffles the list above

      middle_letters = "".join(letters) #Joins the shuffled list

      final_word = "".join([first_letter, middle_letters, last_letter]) #Puts final      word all back  in place as a list

    print(final_word)#Prints out the final word all back together again


Jumbler_Count = -1

for i in range(len(word)):
    Jumbler_Count + 1
    Word1 = Jumble_One_Word(word[Jumbler_Count])

示例输入:HELLO MY NAME IS OUTPUT:HLELO MY NMAE IS RESULTED 输出:H leai El moymns Hoi ynmeEa lm ls Hiyn l oelEamms H naellmEyo m is

4

3 回答 3

2

你把一些事情混在一起,让另一些事情变得过于复杂。

首先,你应该把你的代码放在一个main()函数中,以明确它从哪里开始。

此外,在这段代码中:

Jumbler_Count = -1

for i in range(len(word)):
    Jumbler_Count + 1
    print Jumble_One_Word(word[Jumbler_Count])

Jumbler_Count在这里是不必要的,只需遍历单词列表本身。

所以让我们创建一个main()函数:

def main():
    user_words = raw_input("Enter a word or sentence: ") #Gets user input
    words = user_words.split() #Creating a word list of the user input    

    for word in words:
        print Jumble_One_Word(word)

if __name__ == '__main__':
    main()

这是你的函数的一个稍微改变的版本Jumble_One_Word

def Jumble_One_Word(word):
    if len(word) <= 2: #Only need to change words longer than 2
        return word

    first_letter = word[0] #Takes the first letter out and defines it
    last_letter = word[-1] #Takes the last letter out and defines it
    letters = list(word[1:-1]) #Takes the rest and puts them into a list
    random.shuffle(letters) #shuffles the list above
    middle_letters = "".join(letters) #Joins the shuffled list
    return "".join([first_letter, middle_letters, last_letter]) #Puts final      word all back 

请注意,在您的版本中,您实际上从不使用 parameter x。我将其重命名为word以使其更清楚它是什么,并且还使用它而不是user_words,这在这里是完全错误的。

我还删除了 print 语句并让函数返回混乱的单词,因为将数据处理和 IO 分开是一种很好的做法。

于 2012-10-31T15:59:40.103 回答
1

你需要x在函数内部工作,而你正在工作user_words

import random

user_words = input("Enter a word or sentence: ") #Gets user input

word = user_words.split()  #no need of list()

def Jumble_One_Word(x):

    if len(x) > 2: #Only need to change words longer than 2


      first_letter = x[0] #Takes the first letter out and defines it

      last_letter = x[-1] #Takes the last letter out and defines it

      letters = list(x[1:-1]) #Takes the rest and puts them into a list

      random.shuffle(letters) #shuffles the list above

      middle_letters = "".join(letters) #Joins the shuffled list

      final_word = "".join([first_letter, middle_letters, last_letter]) #Puts finalword all back  in place as a list

      return final_word # better return from function inste


for i in word:                 #you can iterate this way too
    print (Jumble_One_Word(i))

输出:

$ python3 abc.py
Enter a word or sentence: python guido spam
pyhton
giudo
sapm
于 2012-10-31T16:01:22.200 回答
0

符号右侧Word1 = Jumble_One_Word(word[Jumbler_Count])=赋值运算符)是函数调用。您将word[Jumbler_Count]作为参数传递给您的函数。

但是,在您的函数内部,您正在命名该参数x......然后不使用它!“乱一字”中的“一字”就是论据,x。但是您正试图直接从函数内部访问单词列表。

您不需要从函数内部进行操作user_words,而是需要操作x.

此外,在您的循环中,您将函数的每次迭代的结果分配给同一个变量。每次循环时,您都会覆盖之前的答案,因此一旦您的函数起作用,您将只能看到最后一个答案。尝试在循环之前创建一个results列表,results = []然后使用results.append(Jumble_One_Word(your_argument)),或者只是用print结果语句替换整个函数调用行,以便立即显示结果。

顺便说一句,您的循环可以大大简化(这是一个使用 print 语句策略的示例,但results.append()如果您创建该列表也可以这样做):

for item in word:
    print Jumble_One_Word(item)
于 2012-10-31T15:53:51.423 回答