5
8
前置き
現在高校三年です。パソコンを触るのがとにかく好きで将来はプログラミング関係の仕事をしたいと考えています。(大学も関係のところに向けて検討中です。)
高校に入ってから学校配布のPCがあるためパソコンに触る機会が増えて簡単なプログラミングはできるようになりました。そこで、そろそろ本を買って本格的にやっていきたいと考えてます(受験勉強の合間にw)。なので、初心者でも始めやすいおすすめのプログラミングの本を紹介してほしいです!
背景、状況
現在使えるのは、pythonでAnaconda Promptやgoogle Colaboratoryなどで、ほんとにめちゃくちゃ基礎しかできないと思っていただけると助かります。(多少のExcelの自動化や指スマ、じゃんけんなどの簡単なゲームくらいは作れます)
pythonメインで勉強していけたらと考えています。
どちらかというとゲーム開発系が好きなのですがパソコン触れたらなんでも好きなのでこれからプログラミング関係に進むなら知っておきたいこととかをまとめた本などがいい気がします。(プログラミングマスターにお任せします。)
正直、これだけの情報でおすすめできるかー!って感じだと思うのですが、不明な点がないよう、できるだけ書いたつもりなので何かあれば返信お願いします。
皆さんのおすすめを待ってます!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答23件
#1
総合スコア28662
投稿2023/06/21 08:12
コピペでなく自分で簡単なものが作れるなら、必要なのは言語とライブラリのリファレンスマニュアルだと思います。
どちらもネット上にあるでしょう。
GoF のデザインパターンについて書いてある本とリーダブルコードはバイブルとしている人も多いので読んでおくと良いかもしれません。
また、単体自動テストはできるようになっておきましょう。
仮にテスト駆動開発をしなかったとしても、自動テストを知る知らないでモダンな開発の考え方の理解度が違ってきます。
「なぜこんなことをしなきゃいけないんだろう」と思ったときには、そこに「自動テストのしやすさ」というものが関与していることが多いです。
そして Git は「知っていた方がいい」ではなく「必須」です。
複雑な使い方やフローの詳細、コミットコメントの付け方は知らなくても、Git の簡単な使い方ができるだけで大きな恩恵が受けられます。
#2
総合スコア18716
投稿2023/06/21 08:23
どちらかというとゲーム開発系が好きなのですがパソコン触れたらなんでも好きなのでこれからプログラミング関係に進むなら知っておきたいこととかをまとめた本などがいい気がします。(プログラミングマスターにお任せします。)
ということであれば、出来るだけ大きな書店に行くかAmazonで「Python アルゴリズム 入門」あたりで調べてみて伝統的なアルゴリズムを学習する
という事をお勧めします。
書籍にあるキーワードをベースにして探せば、詳細に解説しているサイトにもたどり着けることでしょう。
初心者でも始めやすいおすすめのプログラミングの本を紹介してほしいです!
書籍には合う合わない/独習が得意か否か/周囲に質問出来る人が居るかいないかなどがあるので、
何冊か買うつもりで実際に使ってみることを強くお勧めします。
基礎的なアルゴリズムは、それ自体で何か具体的なアプリケーションを作ることに役立つという事はほぼ無い(言語標準の関数やメジャーなライブラリの方が優秀なため)のですが、
具体的なアプリケーション開発だけでは理解しにくい、データ構造やその取り回しの基礎について学習できますし、
情報系の教育機関では最初に学習する事なので、その予習になるのも励みになるかと思いますよ。
この辺は独習でモチベーションを保つのは中々難しいところではあるものの、問題の粒度と完成の確認は学習教材としてはちょうどいいので、受験勉強の合間にパズル感覚で取り組んでみると良いかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#4
総合スコア58
投稿2023/06/27 09:57
編集2023/06/27 10:31私には、質問文から質問者様の理解度を測る事ができませんでした。
これは私の理解度の問題でもあると思います。
まあ知らないことは調べるしかない。
質問者様の状況を推察する試み
Anaconda Prompt知らなかったので検索したらpathを通せなくても簡単にpythonが使えるぜなPython用コンソールみたいな情報を見かけました。
とあるサイトでは面倒な設定と一蹴されている部分について、何故そのような仕組みになっているかを調べてみるのも楽しいかもしれませんよ。
Google Colaboratoryも知らなかったので検索するとブラウザ上でPythonを実行できる環境ということで、何にせよ環境構築はしたくない、事情があってできない方向けのものなのだと判断します。
まあWidowsに興味がなくてもいいかもね!
Python初心者、コンピュータを知りたい人向け、で考える
Pythonは公式ドキュメントが優れていると聞き及んでいるので一通りそれに目を通すのは実際Pythonを「やっていく」なら有益そうです。
でもまあ確かに、そういうのが初心者にとって堅っ苦しくて難解に見えるって気持ちもわかる。わかるナァ。
簡単に説明してくれてるwebサイトとか本が欲しいのかもしれない。求めてるのかもしれない。
ただし、そういうのって噛み砕いて言う為に必要な部分を削ぎ落としてる可能性があって、後々変なところでハマる原因になるかもしれないんですよね。ほんと。
さて。
質問者様が求めてる情報がなんなのか私には不明なので、ナレッジとして考えた時一般に「コンピュータを知りたい人」「Python初心者」におススメそうな本の線で考えます。
質問者様も「パソコン触れたらなんでも」ということなので。
とは言え難しい。
特にPython関係は。
Pythonで何をしたいかにもよるやろがい!
機械学習をしたいの?
スクレイピングをしたいの?
解析をしたいの?
もっとなんか知らんけど高度なことをしたいの?
ゲーム開発したいとか書いてるけど正直Pythonでのゲーム開発に関する本ってなんだよ!
そんなん「Python ゲーム開発 本」検索すりゃええじゃろがい!出たぞ何冊も!やったのか!?検索した上で質問してんのか!?何わろてんねん!?
その上でどれがおすすめって聞きたいとしてそんなん読んだことある奴がどんだけいると思うんすか!?
いないよ少なくともこのサイトには…。
いたらラッキーですね…。
なんでまあ、超初心者向けっぽい一冊に留めます。
コンピュータに関しては私もめちゃくちゃ基礎しかわからないので、めちゃくちゃ基礎の本でご容赦ください。
C++の本だったら挙げらるのにね。
正直誰かに叱って欲しい。甘ったれですよね。
Python
Pythonの絵本
コンピュータ
プログラムはなぜ動くのか 第3版
コンピュータはなぜ動くのか 第2版
プログラミング
達人プログラマー
リーダブルコード(既出ですが支持の意味を込めて挙げます)
他言語も知っとくと情報を飲み込みやすくなるかも
既に挙がってるGoFのデザインパターンの本は私もいいと思います。
書籍名ではないのは恐らく原著が古いのと、それ関して書かれている本が沢山あるからなのではないかと邪推します。
「オブジェクト指向における再利用のためのデザインパターン」
いずれにせよ知ってる言語がPythonだけだと理解しづらいかもしれません。
今後他言語も知っておくとネットにせよ書籍にせよ情報を飲み込みやすいかもしれないと個人的に思います。
JavaとかC#とか。
帰ってこられなくなる本
ドメイン駆動設計周りの本
Pythonでゲーム開発
Pythonでゲーム開発って、出来るんでしょうがあんまり多数派ではない様に思います。
私が知らない事 != この世の中にない、ですが、あんまり向いてない気がするんですよね。
勿論作るゲームにもよるでしょうけれど。
ゲームと言っても様々です。
コンシューマゲームとPCゲームの垣根はどんどんなくなっていっているように見受けられますがそれでもスマホゲーム、ブラウザゲーム、とは開発言語も環境異なる気はします。
最近はオンラインで当たり前という風潮もあり、オンラインゲームと銘打たずとも通信が前提あればネットワークの知識もいるでしょうがそれは話が逸れてる気がしますね。
Pythonでゲーム開発の話ですよね。
今後ディープラーニングを活用したゲームや、インタプリタの強みを活かしたゲームのアイディアが出現し、それが一般化することはもしかしたらあるかもしれません。
しかし現時点でPythonでゲーム開発というのは、情報も比較的少なく難しかろうなぁというのが率直な感想です。
まあ、そう言っても、それこそエクセル上でVBAでもゲームは作れますし…プログラミングが好きなら言語や環境がなんであれ、求める品質かは兎も角として作ること自体はできると思いますけども。
もしコンピュータに興味があるならばCに触れてみるのはいいかもしれません。ただそれはそんなに焦らなくても大学やら専門で学べる気がします。学校を選択すれば。
ただCについて突き詰めるのは組み込みやロボットをやりたいのでなければ知的好奇心を満たせるに留まる可能性があり、基本的な制御構文とポインタを理解すれば十分な気はします。
ゴリゴリに低レイヤからゲームを作りたい時にC++だけでは痒い所に手が届かないと感じた時にCを使うことはありましたが、それもC++をもっと深く広く理解できていれば不要だったのかな…とは思います。
C++はCのキーワードが殆ど使えるように設計されているのでまだしも、他言語をやるのにCを深く知っていてもあんまり使えないかもな、という気もします。
まあ質問者様はPythonをPathを通さず楽しんでいる方だと見受けられるのでCなんかハナから興味ないかもしれませんね。
「ゲーム作りたい→まず言語学習」では、「ゲームの完成」に辿り着けないかもしれない
本当にゲーム作りたいなら殆どプログラマーらしいことなんてせずゲームエンジンを活用しまくればいいと思いますよ。
プログラムやコンピュータのことを理解する事と実装できることとゲームを作ることは全て分けて考えないと時間がいくらあっても足りないかもしれません。
学習や作業を手助けでしてくれる存在いれば別ですが。
まあゲームエンジンをインストールという環境構築は乗り越えないとなりませんな。
どんな理由であれ挫折したらそれまでであり、そこにどんな感情的解決を求めてもやったことしか残らず後悔するのもそれを取り返せないのも自分になってしまう。
高3の人には同じ轍を踏んでほしくないね。
わからないことはわかるまで調べたらわかるし、今やらないことは一生できないかもしれない。
数学と英語
色気のない回答で申し訳ないのですがやっぱり数学と英語は重要です。
今プログラミングをしたいはやる気持ちも大変結構でございますものの、今英語や数学をきっちり積んでおくと今後多くのプログラミング関係の情報が得やすく理解しやすい筈です。
ゲームを作りたいなら線形代数とかわかってるわかってないで設計や実装にかかる時間が全然違います。
例えば衝突判定もグラフィックも数学で実現しているんで。
そしてプログラミングやコンピュータに関する情報というのは英語が第一報となりがちかつ翻訳されないことも多々あるので英語のドキュメントを理解できるかどうかは切に重要。
機械翻訳は日々進歩してますがまだまだ専門用語には対応しきれておりません。
それに英語圏の技術者と翻訳がないと交流取れないのは色々齟齬を生みそうです。
stack over flowとかの情報も読めた方が問題解決に良さそうではありませんか?
あと化学。
今の高校の化学では半導体とかトランジスタについても学ぶという情報を持っています、そこら辺を理解しておくのも有益かと。
3Dで写実的なゲームが作りたいなら物理もわかっていた方がいいかもしれないがそれは別に後でもいいかな。数学がわかっていれば物理を理解するのは容易になると思うので、やはりまず数学。
数学と英語、やろう!
プログラムの本を図書館等で読む際の個人的なススメ
話変わりますがプログラミング周りの本って高価ですよ。
一介の高校生にはとても手が出ないかと!
なので図書館を利用するとして。(あんまり良くはないかもですが書店で立ち読みする方法もありますね…)
まず一番後ろのページに発売日と著者紹介があります。
全てがそうというわけではありませんが古い情報より新しい情報の方が良いと思われます。
なのでまず発売日が古いかどうかを確認しましょう。
もしそれを読むにしても「これは2002年時点の本だ」とか「これは今年出たばかりだ」とか認識した上で読むかどうかで結構読み方受け取り方は違うと思います。
著者紹介で著者がどんな畑の人で何をしてきたかの片鱗が載ってるので「どんな人が書いた情報か」も認識しておくと「でもこの人それは専門じゃないよね」みたいな斜に構えたとも言えるような読み方ができてオススメです。個人的に。
そんなことわかってるよ!ってんならそれはそれでいいです。安いものです。
あと翻訳本は要注意。
最近発行された本でも原著は何年も前!なんてありがちですからね。
最後に
間違い誤りありましたらご通知いただけますと幸いでございます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#5
総合スコア1087
投稿2023/06/28 06:24
編集2023/06/29 10:27Aizu Online Judge コースリスト
ユーザー登録してください。問題を解いてください。今の自分の実力がわかります。進学してから役に立ちます。
追記: 英語が表示されているなら右上のプルダウンで日本語表示に切り替えてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#6
総合スコア1087
投稿2023/06/30 22:21
編集2023/07/01 02:02初心者向けのプログラミングの文庫
[初心者向けのプログラミングの文庫]はあるのかどうかわかりません。代わりに受験勉強の合間に読める本をあげてみます。
チャールズ・ペゾルト 『CODE』 マイクロソフトプレス
原書第2版が出ているようです。日本語版は初版。
ジューディア・パール『因果推論の科学』文藝春秋
私はまだ読み終えていません。人工知能を考える内容です
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#7
総合スコア10
投稿2023/07/01 18:32
編集2023/07/02 19:35#4 さん。
多分、僕でもこれが急に出てきたらお前のことわからんのにどうやっておすすめするねん。ってなります。なので、読解力の問題ではないと思いますよw
2つだけ訂正させてください。
一つはゲーム開発は楽しそうだなーとは思うけど今それだけがしたいとは思っていません。なので、そういう道もありかなぁと考えているだけです。
2つ目はPythonでのゲーム開発についてですが少ないのは十分に存じ上げています。(また、本についても調べたり図書館や本屋で見たりもしました。が、やはり経験した方に聞くのがいいのではと思って参考までに聞かせていただいております。)インスタとかは作られてるとは聞きました。なので、触れてみた結果楽しかったのでとりあえずPythonを知っておいて第2言語に行ったほうが効率がいいと考えています。
最後にですが長文ありがとうございました。あ、あと、おそらく高校化学で半導体は取り扱っていないと思います。少なくとも現状僕の学校では。物理ではコンデンサーなどで取り扱いますが化学ではないかと思われます。僕のところだけかもしれないので良ければ調べてみてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#9
総合スコア10
投稿2023/07/02 19:32
編集2023/07/02 19:34#8 さん。
すみません。ミスですねー。化学の方です。変換の一番上を使う癖がついてましてw
単芝はよくつかいますよw 田舎だからっていうのもあるのかもですね。草とか笑とかもよく見ますけど打つのがめんどくさいので一回で済むwを僕はよく使いますwどうでもいいかもですねw
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#10
総合スコア9
投稿2023/07/03 05:40
編集2023/07/03 05:47高3です.
もう紹介されてるかもしれませんが,
Pythonなら
スッキリわかるPythonがすごくおすすめです.
僕は中3にプログラミングをして見たいと思い,この本を読み込んでPythonを使いこなせるようになりました.
本を読んだあと手を動かせる(コードを入力して実行できる)のであれば,更に定着度が上がると思います!
なければオンラインプログラム実行のサイトがいくつかあります.
などがおすすめです!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#11
退会済みユーザー
総合スコア0
投稿2023/07/04 10:15
質問者さんは高校3年生ということで、その時期からGitとか読みやすいコードとかを学んでもあまり面白くないのではないでしょうか?しかも、その段階なら「入門はやったけど次に何をすれば良いのか分からない…」となるのも当然でしょう。
私のお勧めは競技プログラミングです。競技プログラミングは制限時間内で数問の問題が与えられ、それぞれ正しい答えを返すコードを書ければ正解という非常に単純なものです。また、定期的にコンテストが行われ、結果によってレートが上下するので、オンラインゲームのような感じで、ハマったら非常に面白いです。中高生向けや、東大や京大などの有名大学も出る大学のコンテストもあります。
プログラミングでは、何も答えが返せれば良いというものではなく、「速いプログラム」を書く必要があります。ゲームも動作がカクカクしているものは嫌ですよね。競技プログラミングでも遅すぎるコードは正解とはならないので、「計算量」「アルゴリズム」など、様々な概念を学ぶ必要があります。
また、通常のPythonに関する知識も身につくので、それらの知識はすごく役に立ちます。私も最初は例えばクラスは何に使えば良いのか分かっていませんでしたが、実はリストも辞書も文字型も整数型もすべてはクラスのようなものだと理解できた時は感動しました。
まとめると、競技プログラミングをすることによって、様々な役立つ情報を学べるので非常にお勧めです。
いきなり始めるのは最初は少し難しいかもしれませんが、大きな競技プログラミングのサイトの1つ・AtCoder (https://atcoder.jp/home) に登録して、https://kenkoooo.com/atcoder/#/table/ (AtCoderの問題を纏めたサイト)の左のA問題を解いてみることをお勧めします。もし更に興味をお持ちだったらそれに関する本をお勧めします。アルゴリズム的思考力が身につく! プログラミングコンテストAtCoder入門や、競技プログラミングの鉄則などです。
あまり本の紹介ではありませんでしたが、パソコンを使うのが好きなのであれば、パソコンで勉強できたほうが楽しいと思います。プログラミングの勉強頑張ってください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#12
総合スコア11949
投稿2023/07/05 01:41
編集2023/07/05 02:05競技プログラミング
に対する,すっごい個人的な(おそらくこのサイトとかで氷山の一角のみを目にしたために養われてしまった「偏見」と呼ぶべきかもしれないような)感覚みたいな話ですが…
「一般の(? 何かを作ることを目的とした)プログラミング」と「競技プログラミング」との間には,相応に 違い が存在するものと想像します.
なので,
両者に共通する要素を 学ぶ/身に着ける/etc 分には手段の一つとなり得るであろうと思うのですが,
両者で違う部分については「違う」と判断できるようでないと,何というか「余計なこと」まで身についてしまいそうだなぁ,と.
そんな感覚なので,
ある程度普通に(?)プログラミングをやっていて「競技プログラミング も やってみる」という話なら無くも無いけれど,
もしも,「 ほぼ いきなり/最初から 競技プログラミング を やる」みたいな状態になる のであれば ,個人的には勧めないかなぁ感,みたいな.
少なくとも学習用途として利用する場合においては, 「競技」成分(実装に要する時間の短縮のみを目的としたようなコードを書くこととか?)は排除するのが良かろうと思う.
その他の偏見:
-
問題を相応の難易度の問題として成立させるために厳しい制限時間みたいなのが設けられていることが多いような印象.
実際の世界では(早ければ早いほど良い,という話もあり得るけれども)そこだけがアルゴリズムや実装の良し悪しに関する評価項目ではないハズ(だと思っている). -
「競技プログラミング」に必要とされるような「アルゴリズム」をどれだけ実用する機会があるのか?っていうのも疑問.
それは「プログラミングで何をするのか」という目的に大きく依存するハズ.(「競技プログラミング」では扱われるジャンル(?)は,何と言うか,偏ってないか? とか思ったり.) -
最近みた質問 の話を信じるならば,過度に数学的な問題が出題されるらしい.
本当にそんなのを解くことが自分にとって必要なことなのか? というのをよく考えて問題を選んだ方がいいのかもしれない. -
そもそも,「俺様は相応にやれるんだぜ!」とかいう自信にみなぎった人が遊ぶ用の物なんじゃないか? とか.
最低限の「やれる」力が無いと「解説を読んでも何言ってるのかわかりません」みたいな話を別の場所で質問するようなことになる様子.
もしも 自力で 「学習用途」で使うことに無理があるようなら別のことをした方がいいと思う.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#13
総合スコア28662
投稿2023/07/05 02:06
変数の雑な命名、main に全部突っ込むような不十分な構造化、構造体のリストではなく複数の配列を使う、便利な外部ライブラリを使わない、エラーハンドリングをしない、再利用性を考慮に入れてないなど、競技プログラミングで見るコードはアンチパターンの塊です。
初心者はとても変な癖がつきそうです。
しかもそこで培った技術を仕事に活かそうと思えば、相当な才能と努力が必要です。
それを踏まえてあえて否定はしませんが、勧める人は意地が悪いなと思います。
「勉強は面白くないからゲームをしたら?」という考え方も、特にプログラミングに興味があるわけではなく、金のために始めようという人には、まあ珍しくはないのでしょうね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#14
退会済みユーザー
総合スコア0
投稿2023/07/06 12:09
#13
競技プログラミングの知識もなく、偏見と印象だけで語られた不適切かつ不快な回答です。競技プログラマは競技プログラマの書き方しかできないとでも勘違いされているのでしょうか。
関数名と体裁にこだわる無能プログラマには一生知ることのない知識を、競技プログラミングによって身に着けられるのは事実です。高校3年生で初心者の質問者に、プログラミングの堅苦しい文法やコーディング規則を教えて面白がってくれるとでも思っているのでしょうか。貴方より能力が優れているのにもかかわらず、印象と偏見で競技プログラマを見下すその考え方が「相当意地が悪い」と感じてしまいます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#15
総合スコア28662
投稿2023/07/06 12:23
編集2023/07/06 12:24知識がある上で言っています。
むしろ知識が無ければできない指摘ではありませんか?
それを的外れと思うなら、それが「変な癖」の効果です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#16
総合スコア9
投稿2023/07/06 12:40
編集2023/07/06 12:44#14 さん(追記:スレッド番号を一つずらしてしまっていました,すみません)
実際僕も#13さんと同じ意見です.
競技プログラミングやってた時期ありますが,やっぱり違うなって印象はあります.
今はツールを作ったり,ソフトウェアを開発したりするようになったのでわかりますが,競プロはいかにいいアルゴリズムを実装できるかや,計算時間をいかに早くするかに重点を置いているなという印象です.
もちろんソフトウェア開発でも重要ですが,ソフトウェア開発はエラーの出にくさ,開発コスト・手間が少ないものや,使いやすさに重点を置いてるようなイメージがあります.(個人の意見ですので間違っていたらすみません)
実際一行ずつ入力されるのを分けて変数に入れるコマンドなどを競技プログラミングをするときまで知りませんでした.(一般常識ならごめんなさい,僕の知識不足です)
例
Python
1x = input().rstrip()
競プロにはちょっと変わったルールがあることは事実あります.
ソフトウェア開発と違うというのもあります.
質問者さんがプログラミングをどの程度したいのかにもよりますが,競技プログラミングも面白いし,ソフトウェア開発も面白いとは思います.
もちろん大変ではあると思いますし,熱量はいると思いますが,どっちも一回ハマったらとことん深めていける分野だとは思います.
長ったらしく書きましたが結論,
(質問者さんによりますが)
・競プロには独特なルールや記法があるとは思う
・競プロには競プロの難しさ,ソフトウェア開発にはソフトウェア開発の難しさがある
・競プロを手始めに始めるのもいいが,ソフトウェア開発に行ったときちょっと苦労することがある(逆もしかり)
→慣れるのに時間が必要
です.
参考になりましたら幸いです.
(#13さん#14さんの意見もごもっともだと思いますが,質問者さんと同じ高3としての自分なりの意見を書かせていただきました)
(#14さんの意見にちょっと意見があった形で+αを書いてしまったので#14さんへの意見がどこまでかわかりにくくなってしまいました.すみません...)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#17
総合スコア11949
投稿2023/07/07 00:50
競技プログラマは競技プログラマの書き方しかできないとでも勘違いされているのでしょうか。
多分そんなことは言われていない(私も言っていない)と思うのだけど……
独学の手段として【最初から それだけをやる形 になってしまうと「競技プログラマの書き方しかできない」状態からのスタートになってしまう可能性があるのではないか】的な懸念みたいなのを述べているだけです.
そういう意見を見たならば,
- そうならないように気を付ける
- ひたすらそれだけをやらないように他の事も平行してやってみる
- そうならないだけの知識なり経験なりを多少なりとも得てからやってみる
等など,回避行動(?)が取れることでしょう.
それは,あなたが勧める理由の部分だけをうまく享受できる方向に向かうということです.
なお,「偏見」を得るには多少なりともその原因となった輩が存在していたわけで「この人にはそうはなって欲しくない」というような思いもあって懸念点を並べ立てています.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#18
退会済みユーザー
総合スコア0
投稿2023/07/07 15:01
#17
その通りですね、このような論争はよく起きますが、つい熱くなってしまいました。
質問者様を置き去りにした議論になってしまったことも申し訳なく考えています。
質問者様の「じゃんけんゲーム」のコードを使って、分かりやすいように少し考えてみました。
おそらく、懸念されていた点は下のようなコードでしょう。
Python
1from random import * 2L = [0,1,-1,-1,0,1,1,-1,0] 3D = {"g":0,"c":1,"p":2} 4E = {0:"g",1:"c",2:"p"} 5flag=False 6while True: 7 if flag:p1=input("あいこで… " ) 8 else: p1=input("じゃんけん… ") 9 if not p1 in D:continue 10 p1=D[p1] 11 p2=randint(0,2) 12 res = L[p1*3+p2] 13 print("p2:"+E[p2]) 14 if res==0: 15 flag=True 16 continue 17 print("You Win" if res==1 else "You Lose") 18 flag=False
アンチパターンをあえて踏みに行った部分もありますが、ほぼ全ての行に問題点はありそうです。主な問題点は、変数の命名が雑どころか、コメントもなく何を指しているのか全く分からない、ワイルドカード*を使用している、空白の入れ方、関数化されていない、の点4つです。
このような知識ももちろん知っておかなければなりません。
しかし、現在の質問者様の状況から察するに、コーディング規則などを今学んでも使う機会があまりない状況なのではないかと考えました。そのため、まずはコードを書いて基本的な実装に慣れることのできる競技プログラミングを勧めました。実際、正しい型さえ知っていて、拡張機能の力なども借りれば、下のように直すのにそこまで時間はかからないでしょう。
Python
1import random 2 3 4class Janken: 5 # グーを g , 数字で 0 6 # チョキを c, 数字で 1 7 # パーを p , 数字で 2 と表す. 8 9 def __init__(self): 10 # グー(g),チョキ(c),パー(p)の文字を, 数字に変換する辞書 11 self.change_string_to_int = {"g": 0, "c": 1, "p": 2} 12 # 逆に, 0~2の数字をグー,チョキ,パーに変換する辞書 13 self.change_int_to_string = {0: "g", 1: "c", 2: "p"} 14 15 # self.judge_list[自分の手(0, 1, 2)][相手の手(0, 1, 2)]の値が, 16 # プレイヤーは1なら勝ち, 0ならあいこ, -1なら負け を表す二次元リスト 17 self.judge_list = [[0, 1, -1], 18 [-1, 0, 1], 19 [1, -1, 0]] 20 21 # じゃんけんを開始する 22 while True: 23 self.play_janken() 24 25 def judge(self, my_hand, computers_hand) -> int: 26 # 勝ちの時1, あいこの時0, 負けの時-1を返す. 27 28 result_num = self.judge_list 29 [self.change_string_to_int[my_hand]][computers_hand] 30 return result_num 31 32 def play_janken(self): 33 # 勝ち・負けがつくまで, じゃんけんをする 34 35 is_aiko = False # 現在の状況はあいこか?のブール値 36 37 while True: 38 if is_aiko: 39 # あいこの状況なら「あいこで…」と出力 40 my_hand = input("あいこで… (グー(g), チョキ(c), パー(p)) ").strip() 41 else: 42 # 最初の状況なら「最初は…」と出力 43 my_hand = input("最初は… (グー(g), チョキ(c), パー(p)) ").strip() 44 45 # もしmy_handが g, c, p のいずれでもないのなら、やり直し 46 if my_hand not in ["g", "c", "p"]: 47 print("g, c, p のいずれかの文字を入力してください") 48 continue 49 50 computers_hand = random.randint(0, 2) # コンピュータの手を0~2の乱数で生成 51 52 # コンピューターの手をアルファベットに直し出力 53 print("computer's hand: " + 54 self.change_int_to_string[computers_hand]) 55 56 # 結果を判定関数に送り, 勝ち負けを示す値を得る 57 result = self.judge(my_hand, computers_hand) 58 59 # もしあいこなら 60 if result == 0: 61 # 状況をあいこにし, やり直し 62 print("Aiko!") 63 is_aiko = True 64 continue 65 66 # もしプレイヤーの勝ちなら 67 elif result == 1: 68 print("You Win!") 69 return 70 71 # もしプレイヤーの負けなら 72 elif result == -1: 73 print("You Lose…") 74 return 75 76 77def main(): 78 janken = Janken() 79 80 81if __name__ == "__main__": 82 main() 83
コードにミスがあればご指摘お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#22
総合スコア4443
投稿2023/07/10 09:27
「パソコン触れたらなんでも好き」ていう気持ち、わかります。基本的にはなんでも手あたり次第読めばいいと思いますよ。
そうすると、中にはひどい内容の本もあるなあとか、この翻訳書は訳者のひともよくわかってなくて訳してるなあとか、だんだん見分けがつくようになってきます。そのうちに、本やネットで調べるときに「はずれ」の情報を避けて「あたり」を引きあてる能力が発現します。
それと、誰も書いてないようなので。
アルゴリズムやデータ構造についての本でよく勉強しておくと、あとあと楽しいです。その場合、本で知識を入れたら他人が書いたコードも読むとよいです。Pythonのようにメジャーな言語だと、本や学術論文に載っているようなアルゴリズムやデータ構造についてはだれかの実装したコードが必ずあります。一部は標準ライブラリに入っていますし、ないものもPyPiで探せばほとんどすべてが見つかります。これらのソースコードを読んで、実際に動かしてみるといいです。
「文庫」の紹介になってなくてすみません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。