「かめののろい」でPython #10時間目(2/2)
10時間目 条件文if elseともう1つのくり返しwhileで数当てゲームを作る の続き
こんにちは!夏に買ったプールの回数券(11枚綴り)が、あと残り10枚に迫っているヒラバヤシヤスキです!
さて、今日は、前回(10時間目)の続きです。
数あてゲームを作り、どんどん入力の規則をもうけていっている段階でした。
前回は、1~5以外の数字を弾く(ループさせる)、というところまで進めました。
続いて、数字以外の入力を弾くようにします
何 度 か Run した 後 にアルファベットや 記 号 を 入 れてみてください。
とのことなので、「a」と入力してみます。
◆
◆
なにやらエラーがでました!
int()で、literal、つまり文字のエラーが起きているので、「aは整数に変換できないよ!」ということなのでしょう。
おとなしくテキストに従って、プログラムを修正します。
・6 行 目 の ateru=int(ateru)で 数字 を ateru=str(ateru)で 文字 に
・7 行 目 の if 1<=ateru and ateru<=5: を if '1'<=ateru and ateru<='5': 数 字 を’ ’で 囲 んで 文字
・ break の 後 の 行 に 文字 列 を 整数 に 直 すため ateru=int(ateru) を 入 れる
◆
◆
できました!
from random import*
kazu=randint(1,5) #kazuはもちろん数字ですね
print('1から5までの数字を当てよう')
while True:
ateru=input('数を当ててみよう')
ateru=str(ateru) #ateruを文字列に変えます
if '1'<=ateru and ateru<='5': #数字を'で囲い文字列にすることで、ateruと比較可能に
break
ateru=int(ateru) #kazuと比較できるように、文字列から数字にします
if kazu==ateru:
print('おめでとう')
else:
print('ざんねん')
print(str(kazu)+'でした')
大分複雑になってきましたね。
コメントアウトで説明を書いたので気になる人はお読みください!
ポイントは、比較は「数同士」か「文字同士」でしかできないことのようです。
つまり、同じ「3」であっても、数字としての「3」と文字列としての「3」があり、数字同士もしくは文字同士にしないと比較ができない、ということですね。
さて、ちゃんと、「a」などを弾くか確かめます!
◆
◆
おー、いい感じです。
ちなみに、先ほどliteralのエラーが出た
ateru=int(ateru) は今回も9行目に含まれています(このコマンドがないと、kazuは数字でateruは文字列で比較ができません)が、
「a」など数字以外をinputすると、while文でそもそも弾かれるので、
9行目に到達できるateruは「数字に変換できる文字(つまり1とか2とか)」のみになってるんですね。
あれ、一つ問題が…。
と、ここまでテキスト通りにやって一つ問題が発生しました。
こちらをご覧ください。
「30」は1~5ではないのに弾かれません!
これを著者に質問したところ
「ありゃー、どうしてだろう、実験してみよう!」
といろいろ試してくれ、以下のプログラムを送ってくれました!
from random import *
kazu=randint(1,5)
print('1から5までの数字を当てよう')
while True:
ateru=str(input('数を当ててみよう'))
if len(ateru)>1:
continue
elif '0'<ateru and ateru<'6':
break
ateru=int(ateru)
if kazu==ateru :
print('おめでとう ')
else:
print('ざんねん')
print(str(kazu)+'でした')
これはテキスト(初版)には載っていません!このnote限定です!笑
lenやらcontinueやらelifやら、まだ習っていないものが出てきました。
別の時間にやるかなと思うので、今回は詳しくは触れません!笑
多分、lenというのは、エクセルの関数で文字数カウントの関数だったはずなので、「len(ateru)>1:」は、「ateruが1文字より多ければ」という意味で、おそらくcontinueというのは、breakの逆でwhile文を繰り返すという意味なのではないでしょうか?
詳しくは、積み残し課題として残しておきます。
最後に、文字型(str)で比較するパターン
比較は「数同士」か「文字同士」でしかできないとのことでした。文字列同士で比較するパターンも作るとのことなので、自分で考えて作ってみます。
◆
◆
できました!
from random import*
kazu=randint(1,5)
kazu=str(kazu)
print('1から5までの数字を当てよう')
while True:
ateru=input('数を当ててみよう')
ateru=str(ateru) #intからstrに変えた
if '1'<=ateru and ateru<='5': #数字を'で囲った(文字列にした)
break
if kazu==ateru:
print('おめでとう')
else:
print('ざんねん')
print(str(kazu)+'でした')
テキストで答え合わせをしましたが、どうやら正解!
※先ほどの「30」問題はこちらも残ります
1点、
kazu=randint(1,5)
kazu=str(kazu)
は、
kazu=str(randint(1,5))で書けるようです!かっこいい!
本日は以上です!!
お読みいただきありがとうございました!
【今回の学び】
・比較は、「数同士」か「文字同士」でしかできない
・kazu=str(randint(1,5))など、コマンドの引数でコマンドを用いることができる
【未解決の疑問】
・kame=turtle と kame=turtle.Turtle() は同じ働きをする。テキストではあえて後者なのはなぜか?
・長い動画をアップする方法はあるか?
・continueやelifとは何か?
「かめののろい」の目次
0時間目 まずパソコンにPythonをインストール
1時間目 IDLEを起ち上げ まずはコマンドラインでカメさん登場
2時間目 楽してカメさん エディターを使いこなそう!
3時間目 変数(箱)を使ってturtleを操ってみる
4時間目 同じ命令の繰り返しfor を使ってturtleを操ってみる
5時間目 for を使ってturtleをさらに操ってみる②
6時間目 for を入れ子にしてturtleをさらに操ってみる③
7時間目 for と変数でturtleをさらにさらに操ってみる④
8時間目 randomを使ってturtleを操ってみる①
9時間目 randomを使ってturtleをさらに操ってみる②
10時間目 条件文if elseともう1つのくり返しwhileで数当てゲームを作る
11時間目 条件文ifとelif・elseでおみくじを作る
12時間目 おみくじの結果でカメがよろこぶ
13時間目 座標(ざひょう)を操って多角形を書く
14時間目 座標(ざひょう)を操って多角形を書く②
15時間目 今まで学習したメソッドを駆使して図形を描く①
16時間目 今まで学習したメソッドと演算子で図形を描く
17時間目 今まで学習したメソッドを駆使して図形を描く②
18時間目 同じ模様の書き方をアルゴリズムのちがいで書いてみる
19時間目 inputを使って大きさのちがう複雑な図形を描いてみる
20時間目 少し複雑な図形を描いてみる
21時間目 変数とfor・if文で少し複雑な図形を書いてみる
22時間目 図形から離れて少し遊んでみる
23時間目 関数を作って遊んでみる
24時間目 自動計算とループ処理で多角形を書く
この記事が気に入ったらサポートをしてみませんか?