2016-11-23 4 views
0

ランダムな選択肢を辞書に追加しようとしていますが、コードが機能していないようです。ランダムな要素を辞書にソートする? Python

私が使用していたファイル(mood.txt):

happy, Jennifer Clause 
happy, Jake Foster 
sad, Jonathan Bower 
mad, Penny 
excited, Logan 
awkward, Mason Tyme 

私のコード:

def theFile(): 
    moodFile = open("mood.txt") 
    theMood = moodFile.readlines() 
    moodFile.close() 
    return(theMood) 

def makeTheDict(myFile): 
    moodDict = {} 

    for lines in myFile: 
     (mood, name) = lines.split(",") 

     moodDict[mood] = name.strip() 

    return(moodDict) 


def randomMood(name, mood, moodDict): 

if mood in moodDict: 
    randomMood = random.choice(mood) 

    moodDict[mood] = randomMood 
    moodDict.append(name, randomMood) 

    print(name, "has been put in the", randomMood, "group") 


def main(): 

    moodFile = theFile() 

    moodDict = makeTheDict(moodFile) 


    name = input("Choose a name: ") 

    newMood = input("Choose a mood: ") 

    randomMood(name, newMood, moodDict) 

は、例えば、私は、ランダムなグループに "ジェイミー・グリーン" を追加したいとそれがランダムに「悲しい」を選択した場合 -

これをランダムに辞書に追加するにはどうすればよいですか?

ありがとうございました!

+0

何を試しましたか?これは「コード」サイトではありません。あなたは 'ランダム'モジュールについて読んだことがありますか? –

+0

辞書やファイルに書きたいですか? – ettanany

+0

はい、私はそれについて読んできました。誰も私のためにコードすることを期待していません。説明やリードが十分にあるでしょう! – naraemee

答えて

2

文字列を文字列のリストにマップすると思われますが、その代わりに文字列を文字列にマッピングしているようです。この行で

ルック:

moodDict[mood] = name.strip() 

ここでは、文字列に文字列name.strip()moodをマッピングしています。この時点で、現在の気分にマッピングされている名前が既に存在していた場合、古い値は置き換えられ失われます。あなたのファイルサンプルでは、​​JenniferとJakeの両方が満足しています。 forループの最初の反復では、次のようになります。

moodDict["happy"] = "Jennifer Clause" 

次に、2番目のステップでは、次のようになります。

moodDict["happy"] = "Jake Foster" 

ここでは、「Jake Foster」が「Jennifer Clause」を置き換えます。

if mood in moodDict: 
    moonDict[mood].append(name.strip()) 
else: 
    moonDict[mood] = [name.strip()] 

この方法で、あなたが名前の値のリストを持っているそれぞれの気分キー用:気分を繰り返すことができるので、あなたはおそらくしたいことは、このようなものです。

randomMood機能については、5月のものがあります良い見ていない:

  • の機能の一部であるため、文はインデントするかどうザ・。これはIndentationErrorをスローするはずですが、コードをStackOverflowにコピーしたときに発生したと想定します。
  • 気分は文字列なので、random.choice(mood)で実際にやっていることは、その文字列から任意の文字を選択することです。意味はありません。気分のリストから選択したいと思うかもしれません。これは、randomMood = random.choice(moodDict.keys())のようなものです。
  • 私が前のポイントで説明したことから、次の行はムードキーの値をムードのランダムな文字に置き換えます。これは意味をなさないものです。
  • 辞書にはappendという名前のメソッドはありませんが、これもエラーになります。最後に、ランダムに選択されるはずの気分入力をユーザーに求める理由がわかりません。

あなたはPython辞書が何であるか、それがどのように動作するか混乱しているようです。キーを値にマップすることを忘れないでください。あなたのコードでは、キーは気分で、値は文字列で表される名前です。キーはユニークです。つまり、既存のキーに新しい値を割り当てると、そのキーの下にマップされた古い値が失われます。同じキーの下にある複数の値を処理する場合は、単一の値ではなく、リストのような値のコレクションにキーをマップする必要があります。

+0

おっと私は間違って入力を求められたようです!また、すべてをコーディングするのではなく、私にコンセプトを説明してくれてありがとう!それはもっと役立ちます! – naraemee

+0

また、私のコードの他の問題を明確にしてくれてありがとう! – naraemee

関連する問題