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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

670閲覧

どちらのコードが優れているか?

Tay99301

総合スコア1

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/08 11:50

前提・実現したいこと

python3を勉強しています。
python3で2種類のコードを書きました。
どちらも期待している出力をします。
2種類のコードを比べて、良い点と悪い点を教えてください。
また、どちらのコードを書けるように練習した方がいいかアドバイスを下さい。

ご回答よろしくお願いします。

該当のソースコード

python3

1class Enemy: 2 def __init__(self, name): 3 self.name = name 4 5 def attack(self): 6 print(self.name + "は勇者を攻撃した") 7 8enemies = ["スライム","モンスター","ドラゴン"] 9enemies_num = [] 10 11for i,j in enumerate(enemies): 12 #オブジェクト名を作る 13 a = "number" + str(i) 14 enemies_num.append(a) 15 #enemies_numリストにnumber0、number1・・・と格納されていく 16 17 #オブジェクト名を与える、メソッドで出力する 18 enemies_num[i] = Enemy(j) 19 enemies_num[i].attack()

該当のソースコード2

python3

1class Enemy: 2 def __init__(self, name): 3 self.name = name 4 5 def attack(self): 6 print(self.name + "は勇者を攻撃した") 7 8enemies = [] 9enemies.append(Enemy("スライム")) 10enemies.append(Enemy("モンスター")) 11enemies.append(Enemy("ドラゴン")) 12 13for enemy in enemies: 14 enemy.attack()

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

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

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

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

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

hentaiman

2021/08/08 12:00

2つ目のコードでモンスター数が1000匹いたらソース直書きで1000行書く事になるけどそれは想定済みですか?ドラクエで300~500のようですけど
tmp

2021/08/10 03:22

優秀とか曖昧で条件が書いてないので希望する回答が得られないかもしれないですね。 個人的には、プログラム内にモンスター名は、書きたくないですね。
Tay99301

2021/08/12 06:49

○この投稿の内容について  ソースコード2が模範解答になっている問題を解いていて、模範解答を見たときに違和感を感じました。ソースコード1は自分で書いたものです。私からすると、モンスター名を一度リストに入れてしまえば次から書かなくて済むためソースコード1の方が便利だと思いました。なんでソースコード2が模範解答になっているんだろうと気になったので、質問を投稿させてもらいました。  初心者向けに分かりやすいコードを模範解答にしたのかもしれません。 ○投稿について  なぜこの質問を投稿したのかもっと書けばよかったです。  プログラムが動作していないというわけではないので、そもそもこのサイトを利用する以外で解決するべきでした。  質問、意見をしていただき、感謝します。  回答者のかたもありがとうございました。
hentaiman

2021/08/12 07:05

なるほど オブジェクト指向の概念を学習させる為でしょうね たしかに質問に至った背景を書いていればスマートな回答を得られたかもしれませんね 学習中なら、これ無駄じゃないか?という疑問は持ったまま次に進むといいかもしれません 何故かって言うと次のステップの学習内容では模範解答のやり方をベースにしている可能性があるからです とはいえ教材によるけど
guest

回答1

0

ベストアンサー

1つめのコードの、

Python

1 a = "number" + str(i) 2 enemies_num.append(a)

は、その直後に上書きされて消え去るので無意味です。
また、"number" + str(i)という文字列を作るという処理も目的不明です。

比べるとしたら、下記と2つ目のコードですが、

Python

1enemy_names = ["スライム","モンスター","ドラゴン"] 2enemies = [] 3 4for name in enemy_names: 5 enemy = Enemy(name) 6 enemy.attack() 7 enemies.append(enemy)

これは、名前がどこから来るのかに依るでしょう。

投稿2021/08/08 12:06

otn

総合スコア84806

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問