以下の名前データがあります
python
1gname=["ジョージ","ジョン","ポール","リンゴ"] 2sname=["ハリスン","レノン","マッカートニー","スター"] 3beatles=["ジョン・レノン","ポール・マッカートニー","ジョージ・ハリスン","リンゴ・スター"]
gname,snameの要素を4個ずつランダムに抽出し、それらを組み合わせて名前を生成します。生成した名前がbeatlesに存在すれば正解とし、4人の名前が同時に全て正解になるまで繰り返すプログラムです。このプログラムですが、実行結果において名前が4つ表示されるはずが3つしか表示されなかったり、正誤の判定がおかしかったり(名前はあっているのに正解数にカウントされていなかったり、その逆もあり)します。プログラムを見直してみましたがわかりません。原因は何でしょうか?
※このプログラムは少し長いため、大まかな内容を理解するだけでもかなりの時間を要するかと思います。時間のある方は以下のプログラムを見て回答していただければ幸いです。
該当のソースコード
python
1import random 2gname=["ジョージ","ジョン","ポール","リンゴ"] 3sname=["ハリスン","レノン","マッカートニー","スター"] 4beatles=["ジョン・レノン","ポール・マッカートニー","ジョージ・ハリスン","リンゴ・スター"] 5g=random.sample(gname,4) #gnameから重複なく4つ選ぶ 6s=random.sample(sname,4) #snameから重複なく4つ選ぶ 7count=0 #正解数をカウントする変数 8b=[0,1,2,3] 9 10for x in range(0,3): 11 b[x]=str(g[x])+"・"+str(s[x]) #ランダムに選んだgとsを結合 12 13while count < 4: #4人正解するまで繰り返す 14 for x in range(0,3): 15 for y in range(0,3): 16 if b[x]==beatles[y]: #生成した名前とbeatlesが同じがチエック 17 count=count+1 #同じなら正解数を1増やす 18 print(b[x]) 19 if count==0: 20 print("不正解です\n") #一度も正解していなければ不正解と表示 21 else: 22 print(str(count)+"つ正解です\n") #正解していれば正解数を表示 23 g=random.sample(gname,4) 24 s=random.sample(sname,4) #新たに要素をランダムに抽出し、結合する 25 for i in range(0,3): 26 b[i]=str(g[i])+"・"+str(s[i]) 27
実行結果 (あくまで一例。出力される名前の組み合わせは毎回変わる)
python
1ポール・レノン 2リンゴ・マッカートニー 3ジョン・スター 4不正解です 5 6ポール・マッカートニー 7ジョージ・ハリスン 8ジョン・レノン 93つ正解です 10 11ジョン・ハリスン 12ポール・スター 13リンゴ・レノン 143つ正解です 15 16ジョン・ハリスン 17ジョージ・レノン 18ポール・マッカートニー 194つ正解です
# 私が望む実行結果 (あくまで一例。出力される名前の組み合わせは毎回変わる)
上の実行結果との違い
・名前の組み合わせは3つではなく4つ表示されている
・正誤の判定がちゃんとしている
python
1ジョージ・レノン 2ジョン・ハリスン 3ポール・スター 4リンゴ・マッカートニー 5不正解です 6 7ジョージ・ハリスン 8ジョン・マッカートニー 9ポール・スター 10リンゴ・レノン 111つ正解です 12 13ジョージ・ハリスン 14ジョン・レノン 15ポール・スター 16リンゴ・マッカートニー 172つ正解です 18 19ジョージ・ハリスン 20ジョン・レノン 21ポール・マッカートニー 22リンゴ・スター 234つ正解です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/20 07:51