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 EXPECTED OUTPUT: HLELO MY NMAE IS RESULTED OUTPUT: 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 

お使いのバージョンでは、実際にはパラメータを使用しないことに注意してくださいxwordそれが何であるかを明確にするために名前を に変更し、 の代わりに使用していますがuser_words、これはここでは完全に間違っています。

データ処理と 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 に答える