10時間目タイトル2

「かめののろい」で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時間目 自動計算とループ処理で多角形を書く



この記事が気に入ったらサポートをしてみませんか?