x = input()
部室に入ると、ひまり先輩と哀先輩が「あと10日」と書いてある何かを作っているところだった。競技プログラミングの大会までのカレンダーのようだ。
「大会までの日付ですか?」
「そうだよ。ひまちゃんがどうしてもって言うから」
「やっぱりこういうのがあると気合が入るよね!」
競技プログラミングかあ。昨日初めて聞いたばっかりの私は出ても大丈夫なんだろうか。どんなことをするのかも全く知らないけど。先輩方にいろいろ聞いといた方がいいね。
「競技プログラミングって、結局どんなことをするんですか?」
「あれ、言ってなかったっけ?」
哀先輩とひまり先輩が顔を見合わせる。二人とも、私に競技プログラミングを説明していなかったことに気づいていなかったようだ。
「いろいろルールはあるけど、一番メジャーなのは定期テストみたいな感じ?」
「時間内により多くの問題を解く」
「あ、でも競技プログラミングだけのこともあるよ!正解かどうかは、提出したらすぐにわかるし、正解するまで提出し直してもいいよ」
「え、採点者は大変そうですね」
時間内に出されたプログラムをすべて採点しないといけないなんて、なかなか大変そうなルールにしたんだね。
「提出するのがプログラムだから、正解かどうかは実際にプログラムを実行してみたら分かる」
「なるほど、作った人は頭良いですね」
カレンダーが完成したようで、ひまり先輩が部室の前側のホワイトボードに立てかけていた。
「問題っていうのはどんな感じなんですか?」
「んー、例えばこんな問題かな」
<<問題>>
1からnまでの「数」を一度ずつ書きます。
このとき、「数字」の"1"を書いた回数は何回でしょう?
nを入力したら、答えを出力するプログラムを書いてね。
例えば、1から10までだったら、
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
のうち「数字」の"1"は、"1"と"10"に含まれてるから、答えは2回だね。
「すぐに問題の例がが出てくるんですの怖いんですけど」
「まあ、最高ランクまではやってるからねぇ」
問題はホワイトボードに書かれている。せっかくなので読んでみようかな。
nまでっていうのは、問題を出す側が自由に数を決められるのだろう。そのすべてのnに正解を出すプログラムを書くといいんだよね。
そんなことできるのかな?1から1までしかなかったら簡単なんだけど。
「例えば、プログラムなしで、明日までに1から100までで答えを求めてって言われたらどうする?」
「えー......」
全然分からなくて干からびました。分からないけど、どうしても答えが必要だったら1から100まで全部書いてみて数えるかなあ。
でも、これは正解じゃないと感じる。なぞなぞに正論で答えている気分。うーん、でもほかの解き方は思いつかないな。
「違うかもしれませんけどいいですか?」
「うん、いいよ」
許可が出たので言います。全然自信ないんだけど。
「1から100まで実際に全部書いてみて、数えます」
「お、正解!」
え、それでいいの?
「競技プログラミングで、全部試してみることができるのが最初は意外に感じたなー」
「でも、「全部試す」というのは大事な考え方」
なるほど。紙に書いて調べるのは時間がかかるけど、パソコンが全部調べてくれるから問題ないんだね。ちょっと面白いかも。
その気になったので、試しにプログラム書いてみようかな?よし。まずはnを受け取るところから...
いや、よく考えたらプログラムの文法を全く知りません。私はprint文で黒い画面に文字を表示することしかできなかったんでした。
「入力の受け取り方が分かりません」
「ふふ、そうじゃん、昨日print文教えたばっかりだった」
「よし、じゃああの問題はゆいちゃんの課題ね!プログラムが書けるようになったら、私たちに見せてほしいな」
「頑張ります」
「まあ、プログラムの文法は教えるから心配いらない」
哀先輩が私の横の席に座ってノートパソコンをカバンから出した。
「せっかくだから今から教えようか。入力を数として受け取るのは、こうやって書く」
哀先輩がキーボードで入力しながら、私に教えてくれる。
<<Python>>
x = int(input())
「あれ、急に難しくなりました」
「最初から全部理解しようとしなくても大丈夫」
「そうそう、理解しながら新しい書き方を覚えるのを同時にするのは大変だからね。書けるようになってから意味を考えるといいよ」
そういうものなのかな?例えるなら、課題の答えを先に写してからっていう感じで罪悪感が。
「例えば、入力したものをすぐに表示するなら、こんな感じ」
<<Python>>
x = int(input())
print(x)
確かに、今日初めて見る物の下に昨日のprint文がある。
「実行してみるね」
<<Terminal>>
>python main.py
|
「なんかピコピコしてます」
「そのときは、プログラムがキーボードで入力してくれるのを待ってるんだよ」
「じゃあ、ゆいちゃん入力してみて」
試しに100と入力してみた。しかし、何も起こらなかった!
「エンターキーを押さないと、パソコンが入力が終わったことを検知できないからね」
「あ、そうですね」
エンターキーっと。自分が入力した行のすぐ下にまた100と表示された。
「100って出ました」
「そんな感じで、入力を数として受け取ることができる」
おおーっ。まだ理解していないけど、実際に動いているところを見ると自分でも使えそうな気がしてきた。
でも、「数として」とはどういう意味なんだろうか。もしかして、数字しか入力できなかったりする?
「数字以外を入力したらどうなるんですか?」
「いい質問。実際にやってみるといい」
なんとなく「クッキー」と入力する。決して、おなかが空いたからではないですよ!
<<Terminal>>
>python main.py
>クッキー
Traceback (most recent call last):
File "c:\Users\user\Documents\code_python\a.py", line 1, in <module>
x = int(input())
ValueError: invalid literal for int() with base 10: 'クッキー'
うわ、黒い画面に何やらたくさん表示された。何か良くないことが起きているのは素人の私にも分かる。
「まあ、こんな感じで数字以外を入力すると怒られる」
「プログラムは、数字以外は入力できないんですか?プログラミングってなんでもできるんだと思ってました」
「プログラミングでできないことはないよ!文字で受け取りたい場合は代わりにこうやって書くよ」
ひまり先輩のタイピング、速くてかっこいい。
<<Python>>
x = input()
print(x)
「数字を受け取るプログラムと、違うところは?」
哀先輩が私に問う。
「input()の前のintがなくなりました」
「正解!あれはね、入力を数字に変換するって意味なんだよー」
「整数って意味のintegerから来てる」
あれ。全然知らない英単語が出てきた。
「もしかして、プログラミングって英語もできないといけませんか?」
「そんなことないよー。日本で競プロをプロデュースしてる社長さんは、プログラミングは世界レベルだけど、実は英語が全然できないんだよ」
「そんなこと広めたら怒られますよ」
試しに実行してみたら、ちゃんと次の行にクッキーと表示された。
「この、「x = 」っていうのはなんですか?」
「入力されたものをxさんが覚えておくって意味だよ」
「入力されたものは、そのままだとプログラムのほかのところで使えないから」
へえ。例えば、入力されたものを後で表示したいときとかに使えるのかな。
「xっていう名前は自分で決められるんですか」
「そうだよ!だから別にアルファベットじゃなくて、ひらがなでもいいんだよ」
<<Python>>
ゆい = input()
print( ゆい)
「確かにできました。でもなんで私の名前?」
「特に?」
「結局は、イコールを書いておくと、後で使いたいものを保存しておける」
「プログラミングでは変数って言うね」
変数。覚えました!多分。
「ちょっと疲れました」
「今日のおやつは、イチゴのショートケーキです」
「ほんとに作ったの?」
「うっ、競合調査です、近くのケーキ屋さんで買いました......」
「とりあえず、これ食べて休憩しようか」
一口食べると疲れた脳に糖分が行き渡る。ちょっとクリームの甘さに飽きてきたところに、イチゴの自然な甘さで口直し。やっぱりケーキの中では、イチゴのショートケーキが一番好きかも。
ところで、調査ということは、ひまり先輩はいずれショートケーキを作るつもりなんだろうか?そのときは、ぜひ私も一緒に作りたい。プログラミングの話ばっかりしてるけど、本当はケーキ同好会だもんね。
「まだ最初の方なのに、プログラムの文法を忘れてしまいそうです」
「私も最初の方はまとめノートを書いてて、それを見ながらコードを書いてたなー。結構おすすめだよ」
まとめ
print("") で文字を出力する
x = で文字や数を記憶しておける
x = input() で文字を入力する
x = int(input()) で数を入力する
いつの間にか忘れてたけど、できることが一つずつ増えていくのっていいね。