2016-05-09 3 views
-1

ここでこの問題について助けが必要です。すべての詳細は下記の質問にあります。私は解決策を実行しましたが、私はこの1つのことに固執しています、誰かが私を正しい方向に導くことができたら本当に感謝します。リストをパラメータとして受け取るPython関数を書いて、リストが任意の数/秒を繰り返す場合にカウントしてください。

問題:私のプログラムを実行するたびに、3回繰り返した数字が5ではないにもかかわらず、「あなたは:3つの5つ」と表示されます。私のプログラムは質問の下にあります。

リスト3を持っている場合は、上記グリッドはパラメータとしてリストと

を受信するPythonの関数pokieTester(リスト)を書くカウントgrid = [2,2,1,3,2]

ようなリスト変数としてPythonで表すことができます。

o The first item will be the number of repeated numbers 
o The second item will be the value of repeated numbers 

令状:それは2つの項目を含むリストを戻します同じ

あり、4つのまたは5つの数字eパラメータを持たず、5つの乱数のリスト(1から5までの数字を含む)を返すPython関数makeList()

あなたの関数を、適切なテキストを表示するプログラムに結合します。

は(あなたは3、4または5つの数字と同じを持っていない場合は、失われます。)

例えば: あなたが勝ちます!またはあなたを失うことを残して申し訳ありません

彼らが勝った場合、それはいくつの繰り返し番号とその値を表示する必要があります。

例:

YOU WIN!あなたは、常にので、5になりますループnumのための最後に、私のプログラムの===== pokieTester()

import random 

def pokieTester(countList): 

    count = countList.count(0) 

    for num in [1,2,3,4,5]: 
     if count < 3: 
      count = countList.count(num) 
    demoList = [count, num]   
    return demoList 


def makeList(): 

    numList = [] 

    for count in [0,1,2,3,4]: 
     a = random.randint(1,5) 
     numList.append(a) 
    return numList 

gameList = makeList() 

print (gameList) 

matches = pokieTester(gameList) 

count = matches[0] 

num = matches[1] 


num_List = ['three','four','five'] 

if count > 2: 

     print ("You win") 
     print ("You have: " , end = '') 

     if count == 3: 
      print (num_List[0], num, end = '') 

     elif count == 4: 
      print (num_List[1], num, end ='') 

     elif count == 5: 
      print (num_List[2], num, end ='') 

else: 

    print ("Sorry, You lose") 

答えて

0
import random 
from collections import Counter 
from operator import itemgetter 

numerals = ('one', 'two', 'three', 'four', 'five') 

numbers = [random.randint(1, 5) for x in range(5)] 
print(numbers) 

matche = max(Counter(numbers).items(), key=itemgetter(1)) 
count = matche[1] 
number = matche[0] 

if count > 2: 
     print("You win!\nYou have: {} {}".format(numerals[count-1], number)) 
else: 
    print("Sorry, You lose") 
+0

:その後、キーとしてcountを使用して番号のテキストバージョンを取得することができます明らかに宿題)がうまくいかず、どのようにして既存のコードを修正することもできません。説明なしでコードをダンプすることは役に立ちません。 – mhawke

+0

お世話になりましたが、私が学生なので、collections.counterやoperator itemgetterを使用することはできません。基本的なものを使用するだけです。 – Zubin

+0

@mhawkeあなたが正しいです。しかし、私はPythonが英語よりはるかに優れていることを知っています。したがって、コードに答えるのが簡単なこともあります。 –

1

HERE 3 2の

====== ISを持っていますループは常に5回実行されます。

def pokieTester(countList): 
    for num in [1,2,3,4,5]: 
     count = countList.count(num) 
     if count >= 3: 
      # there are 3, 4 or 5 instances of num 
      return [count, num] 
    return [0, 0] 

スペックは、任意の数の3以上が存在しない場合は、戻り値がどうあるべきか緩いWRTである、:あなたはcount> = 3がこれを試してみてくださいことを検出した場合は、初期のループから抜け出す必要があります上記の関数はただ[0, 0]を返しますが、間違いなくNoneを返す可能性があります。

リストnum_Listの代わりに辞書を使用すると、呼び出しコードを簡略化できます。である(これは間違いなくそれを行うには良い方法ですが、それはなぜ彼らのコードを理解するためにOPを助けない

num_text = {3: 'three', 4: 'four', 5: 'five'} 
count, num = pokieTester(gameList) 
if count >= 3: 
    print("You win") 
    print("You have: {} {} s".format(num_text[count], num) 
+0

ねえ、私は "def pokieTester"をあなたが提供したものと置き換えました。それはうまく動作します。それであまりにも多くのトラブルがなければ、私は2番目の部分が何を意味するのか尋ねてもいいですか?申し訳ありませんが、私はPythonにはまだ新しい、まだすべてを理解しようとしています。 2番目の部分は必要ですか?ありがとう – Zubin

+0

2番目の部分は 'pokieTester()'を呼び出すコードを書くための単なる簡単な方法です。辞書は、キー値(この場合はカウント)を値(この場合はカウントのテキスト)にマッピングするためのより良いデータ構造です。いったんそれを持っていれば、カウントからテキスト表現に直接行くことができます。 – mhawke

+0

ああ、それを理解し始めた。私は自分のコードに2番目の部分を入れる必要があるのでしょうか、それとももっと簡単なので、はるかに理にかなっています。 – Zubin

0
import random 

randlist = [random.randint(1,5) for i in range(5)] 

def pokieTest(randlist): 
    num_List = {3: 'three', 4: 'four', 5: 'five'} 
    for i in randlist: 
     count = randlist.count(i) 
     if count in num_List.keys(): 
      return [num_List[count], i] 


print randlist 

result = pokieTest(randlist) 

if result: 
    print "You win!" 
    print "You have: ", result 
else: 
    print "Sorry, you lose" 
関連する問題