我在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是
答案 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)