2012-10-31 65 views
0

可能重複:
Python splitting strings and jumbling the middlePython中,定義函數和訪問它

我有蟒蛇,我真的被困在一個程序,我的這個目的是採取從一個用戶的句子,混亂中間的字留下的外部信件完好無損...我的老師說我需要做一些參數,但我真的不知道如何訪問或使用我的功能...

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

輸入樣例:我的名字是 預期輸出:HLELO MY NMAE IS 導致OUTPUT:H leai埃爾moymns 海ynmeEa流明LS Hiyn升oelEamms ħnaellmEyo m是

+0

沒有,這是相同的程序,但我有不同的錯誤/障礙。 – Magpy

+0

'list(user_words.split())'是多餘的,只需使用'user_words.split()'。 –

+0

如果出現錯誤,請發佈完整回溯。否則,發佈一個示例輸入和期望的輸出 – inspectorG4dget

回答

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 
+0

我很喜歡你的方式...但我得到你好 無 名稱 無當我輸入:你好我的名字是 – Magpy

+0

Nvm我只是要扭轉lex(x)> 2:並讓它返回單詞...然後它能正常工作。謝謝 – Magpy

+0

@Magpy很高興幫助。 –

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) 
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是一種很好的做法。

+0

剛剛花了2分鐘寫了一個像你這樣的代碼,然後返回看到一堆答案:( –