Python,定义一个函数并访问它

时间:2012-10-31 15:43:53

标签: python list function parameters

  

可能重复:
  Python splitting strings and jumbling the middle

我在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])

示例输入:你好我的名字是 预期产量:我的NMAE很高兴 结果输出:H leai El moymns Hoi ynmeEa lm ls Hiyn l oelEamms H naellmEyo m是

3 个答案:

答案 0 :(得分: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 

请注意,在您的版本中,您实际上从不使用参数x。我将其重命名为word以使其更清晰,并使用它代替user_words,这在这里完全错误。

我还删除了print语句并让函数返回混乱的单词,因为最好分开数据处理和IO。

答案 1 :(得分: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

答案 2 :(得分: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)