> パソコンは、残念ながらMacです笑
あっちゃあ(笑)。1/20に当選しちゃったか(笑)。
まぁでも、「才能がある」人間も20人に一人、ってぇんで妥当かな(笑)。
Macの場合だとデフォルトでPythonが既に入ってると思う。
先にも書いたけど、端末・・・Macだと何だ、多分「ターミナル」って表現されてると思うんだけど、ターミナルで、「python」って打ってリターンキーを叩いて、pythonインタプリタが立ち上がれば「Pythonが既にインストールされてる」って意味になる。
加えると、最新版pythonをインストールしたい場合、Homebrewと言うアプリを使ってターミナル経由でインストール可能だと思う。
以下のページで、かなり詳しくMacでのPythonのインストール方法が記述されてます。
macOS環境のPython:
https://www.python.jp/install/macos/index.html
いずれにせよ、恐らく「Pythonがフルでインストール」されれば、MacでもWindowsと同様にIDLEがインストールされると思うんで、MacでIDLEを立ち上げればラクラクPythonプログラムが書ける筈です。
> 1から3までの数値を
> ランダムに生成して、順位として表示します。
> 1位の時には「おめでとう」と表示する。
> これはどのような構文に、すればいいですか?
貴女、才能がありそうなんで、初心者向け、じゃなくって、はじめから「本格的な」プログラムを見せるよ。
Pythonだとその題意は次のようにして書く。
------------------------------------------------------
#!/usr/bin/env python3
# coding:utf-8
import random
number = random.randint(1, 3)
## 表示用のメッセージは分離しておく(メッセージ分離方式)
# 辞書型: -> https://docs.python.org/ja/3/tutorial/datastructures.html#dictionaries
d = {1: 'おめでとう'}
# 現在のPythonではプレースホルダーが好まれる -> https://docs.python.org/ja/3/tutorial/inputoutput.html#formatted-string-literals
msg = f"あなたの順位は{number}位です"
## スクリプトでは次のように書くのがフォーマル
## https://docs.python.org/ja/3/library/__main__.html#idiomatic-usage
## プログラムの「実行部分」を以下のようにまとめる。
if __name__ == '__main__':
# 例外処理 -> https://docs.python.org/ja/3/tutorial/errors.html
try:
print(d[number])
except:
print(msg)
---------------------------------------------------------------------------------
OKWave上だと見づらいかもしれないんで、同じファイルを次のページにも挙げておく。
https://www.ideone.com/FNIHP7
んでだ。
まず、モダンなプログラミングでは。
1. なるたけif等の条件分岐構文は使わないようにする。
とにかく「ifに頼る」と言うのはC言語的なスタイルで、「モダン」とはかけ離れている。
一方、モダンなプログラミングの方策では「データ型設計を通じて」条件分岐と同様な効果のある仕組みが作れないか、と考える。
ifを避けられるだけ避ける、ってのがモダンなプログラミングでは重要な発想なんだ。
2. Pythonではリストと辞書型、と言う合成データ型に徹底的に慣れよう。
C言語では存在しない(作る事は可能だが)リスト、と辞書型、と言う合成データなんだけど、これらが物事を物凄く簡単にしてくれる。極めてパワフルなデータ形式だ。
特に辞書型だけど、データ型で言えばこれを使いこなせればPythonでは半分くらい「免許皆伝」だ。
辞書型は一種の簡易データベースで、キーに対応した値を返してくれる。
>>> d = {1: 'junko', 2: 'cametan_42'}
>>> d[1]
'junko'
>>> d[2]
'cametan_42'
キー「1」に対しては設定された値'junko'を返し、キー「2」に対しては以下同文。
これは「検索」に対して非常に簡易な構造を持ったデータ型、なんだ。
Pythonだけじゃなくって他のモダンなプログラミング言語、例えばJavaScriptでもこのテの合成データ型を持っている。他の言語では「連想配列」やら「マップ型」と言う呼び方をするケースが多いが。
さて、じゃあ、「キーが存在しない」ブツを呼び出そうとすればどうなるだろうか?
答えはこれ、だ。
>>> d[3]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
d[3]
KeyError: 3
エラーが返ってくる。最近のカッコ付けた言い方だと「例外を投げられた」と言う。
実はこれがこのプログラムのキモ、となる。
3. モダンなプログラミングではエラーは友達だ。
プログラミングのエラーと言うのは今までの常識だと「避けるべき」だとされていた。
一方、モダンなプログラミングは「エラーさえ利用してプログラミング」する。
具体的に言うと、エラー、現代の言葉で言うと「例外」は、それもまた「データ型」なんだ。データ型である以上利用出来る。
ここで用いたトリックは次のようなモノだ。
辞書型で次のような設定をした。
d = {1: 'おめでとう'}
たった一つの要素しかない辞書型だ。キー「1」を与えると「おめでとう」が返る。
>>> d[1]
'おめでとう'
しかし1以外を与えると必ず「例外を投げる」わけだな。
>>> d[2]
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
d[2]
KeyError: 2
>>> d[3]
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
d[3]
KeyError: 3
今、乱数で作ったnumberと言う変数がある。numberが取りうる値は1、2、3のウチのどれか、だ。
しかし、今まで見てきたようにdに対してキー1を与えたらいいけど、2や3を与えると「例外が投げられる」。
その例外が投げてこられた時でも「正常に処理を継続する」システムを「例外処理」と言う。具体的にはtry〜except構文、と言われるものを使う。
try:
print(d[number])
except:
print(msg)
try節は必ず実行される。このケースの場合、「必ず」print(d[number])が実行される。そして「場合によっては」例外が投げられるわけだな。
もちろん「例外が投げられなければ」print(d[number])が実行されてそこでプログラムは終了、だ。
一方try節が実行された際に「例外が投げられれば」後続のexcept節が実行される。そこではprint(msg)が実行されて、プログラムは終了するわけだ。
このtry〜exceptはif文と似てはいる。似てるけど次の点が違う。
if 何とか
何か実行A # 何とか、がFalseだった時、ここは絶対実行されない
else
何か実行B
try:
何か実行A # ここは必ず実行される
except:
何か実行B # ここはtry節の実行結果に沿って実行されたりされなかったり
もちろん「例外処理」は「例外が投げられる」前提だが、例外を投げるのはtry節の「内側」であって、そこが必ず実行されなければ画餅になる、って事なんだ。
繰り返すけど、try節の結果(例外が投げられる/投げられない)によって、except節が使われるかどうか、が決定する。
いずれにせよ、合成データを利用した際に生じる「エラー」を利用してプログラムを仕上げる、ってのは現代のモダンなプログラミングでは「重要なテクニック」となる。
結果「条件分岐文を全く使わずに」題意のプログラムは実現出来るわけ。
プログラミング初心者には情報量が多い、とは思うんだけど、別にロジック自体が「難しい」って事はないと思う。色々詰めたのは事実だけど、「現代のモダンなプログラミングに於けるテクニック」をある程度網羅してるんで、これを解読しただけでもかなりテクニックの上昇は見込めると思うよ。
参照リンクも辿って、頑張って理解してみて。
繰り返すけど、貴女は才能がありそうだから、ね。
補足
パソコンは、残念ながらMacです笑 Macに詳しい人がなかなかいないんですよね そこで、一つ聞きたいのですが、 1から3までの数値を ランダムに生成して、順位として表示します。 1位の時には「おめでとう」と表示する。 これはどのような構文に、すればいいですか? # coding: utf-8 # if文による条件分岐 import random number = random.randint(1, 3) print("あなたの順位は" + str(number) + "位です") #ここにif文を追加する if number == 1 #条件式が成立した時の処理 print("おめでとう") これだとエラーが発生してしまいます。 どうすれば良いでしょうか????