質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1896閲覧

ポケモンしりとりのコードを作りました。もっと綺麗にならないでしょうか…?

0910pass.py

総合スコア33

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/08/15 16:06

編集2019/08/16 06:28

前回の質問(https://teratail.com/questions/205731) からポケモンのデータをリストに整理し、以下のプログラムを製作してみました。

python3.x

1from pokemon_name import num_set 2import random 3import re 4 5print("ポケモンのしりとりだよ!") 6print("ーには、その1つ前のカタカナから始めてね!") 7print("ーが最後に付くポケモンは、母音で代替してね!") 8 9 10list_nihon = ['ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 11 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 12 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 13 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ヤ', 'ユ', 'ヨ', 'ワ'] 14 15fin = 0 16 17f = random.choice(list_nihon) 18print(str(f) + "からはじめてね") 19 20def poke_s(): 21 global fin 22 global d 23 num_set.remove(pokemon)#入力したポケモンをリストから消す 24 dine = 0#入力にあったポケモンを探す 25 draw = 0 26 while dine <= 0: 27 dime = random.choice(num_set) 28 B = list(dime) 29 if(dime.startswith(POKEMON[-1]) == True and B[-1] !="ン"):#存在するとき 30 print(dime) 31 d =B[-1] 32 dine += 1 33 elif draw ==950:#存在しない (限りなく存在しない)とき 34 print("負けました") 35 dine += 1# 探索の終了 36 fin += 1#ゲームの終了 37 else:#未だ探索中のとき 38 dine += 0 39 draw += 1#もう一度繰り返す 40 41 print("次は"+ str(d) + "だよ") 42 num_set.remove(dime)#パソコンが出力したポケモンをリストから消す 43 44def fin_game(): 45 global fin 46 print("そのポケモンいないか、もう使ったよ") 47 fin += 1#ゲームの終了 48 49 50 51 52 53while fin <= 0: 54 pokemon =input("カタカナで入力してね") 55 POKEMON = list(pokemon) 56 D = POKEMON[0] 57 N = POKEMON[-1] 58 if N =="ァ":#小文字から大文字への変換① 59 POKEMON[-1] = "ア" 60 if pokemon not in num_set: 61 fin_game() 62 else: 63 poke_s() 64 65 elif N =="ィ":#小文字から大文字への変換② 66 POKEMON[-1] ="イ" 67 if pokemon not in num_set: 68 fin_game() 69 else: 70 poke_s() 71 72 73 74 elif N =="ゥ":#小文字から大文字への変換③ 75 POKEMON[len(POKEMON)-1] = "ウ" 76 if pokemon not in num_set: 77 fin_game() 78 else: 79 poke_s() 80 81 elif N == "ェ":#小文字から大文字への変換④ 82 POKEMON[len(POKEMON)-1] = "エ" 83 84 if pokemon not in num_set: 85 fin_game() 86 else: 87 poke_s() 88 89 elif N == "ォ":#小文字から大文字への変換⑤ 90 91 POKEMON[len(POKEMON)-1] = "オ" 92 93 if pokemon not in num_set: 94 fin_game() 95 else: 96 poke_s() 97 98 elif N =="ン":#最後がンの場合の対応 99 print("ダメです") 100 fin += 1#ゲームの終了 101 102 else: 103 if pokemon not in num_set: 104 fin_game() 105 else: 106 poke_s() 107 108print("また遊ぼうね!") 109 110quit()#ゲームの終了

いくつかのご指摘から、コードを単純化することに成功しました!
ありがとうございました!

暇なときにでも遊んでいただけたらうれしいです。

補足情報(FW/ツールのバージョンなど)

製作したパソコンの状況:
windows7

なお、pokemon_name.py は
プログラム上部にあるnum_set とは、ポケモンの名前のリストです。情報はwikipediaから引用しました。ありがとうございます~!
https://docs.google.com/document/d/1R6kg2uf2Qw6s__rhvjJ7arWnGI9OoL_uWUjoMX4ikrA/edit?usp=sharing
こちらでpokemon_name.pyは配布しています!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/15 16:17

同じ処理は共通化しよう
gentaro

2019/08/15 16:18

> そのため大変恐縮なのですが、皆さんに是非このゲームを遊んで頂き、ゲームへの不満やコードの無駄だと思われる部分を書き込んでいただきたいのです。 いやそういうサイトじゃねーから。前も指摘したけどガイドライン読もう。 https://teratail.com/help/avoid-asking 「低評価」とする際の理由に「広告と受け取られるような投稿」ってのもある。
0910pass.py

2019/08/15 17:12

asahina1979さん< 共通化…ですか。 そういったこともpythonはできるんですね。面白いなぁ… コメントありがとうございます!
0910pass.py

2019/08/15 17:18

gentaroさん< お叱りの言葉ありがとうございます。 たしかにこれは広告と受け止められる質問ですね…。 気づきませんでした。申し訳ない。 これからは質問の内容に応じてサイトを使い分けるようにします。失礼しました。
guest

回答1

0

ベストアンサー

よくできていると思います。
ただ teratail は具体的な問題を質問して回答を貰う QA サイトという性質上、作ったコードを遊んでもらう目的で投稿するなら、QiitaGitHub のほうが向いていると思います。


コードの無駄だと思われる部分を書き込んでいただきたいのです。

  1. カタカナの大文字、小文字は区別しないようにしているのだと思いますが、ァの場合、ィの場合、... と文字ごとに同じ処理が条件分岐で書かれているのが気になります。

  2. 文字列の最後の文字の取得は s[len(s) - 1] ではなく、s[-1] でよいと思います。

投稿2019/08/15 16:30

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0910pass.py

2019/08/15 17:10

コメントありがとうございます! Qiita,GitHubというサイトがあるのですね…。知りませんでした。 今度使ってみます。 1,2のご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問