6回目の「オンラインハッカソンに挑戦」を始めていこうと思います。
今回、問題の難易度は「普通くらい」ですが、後半、Pythonのコードについて少し詳しく解説していきます。
全て理解しようとしなくて大丈夫ですので、スクラッチとの違いを見比べながら、楽しんで学習していきましょう。
「ツインテールセット」の問題
少し問題文が長いので難しく感じますが、しっかり読んでいってみましょう。
それでは、要点をまとめてみます。
- 2つのドリンクのコストパフォーマンス(CPと呼ぶ)を比べる問題
(カフェイン量÷値段=数字が大きい方がCPが高い) - 入力データ:カフェイン量(c_1,c_2)・値段(p_1,p_2)
(データの入力方法は後ほど解説) - 出力データ:ドリンク1がCPが高い場合→1と出力(ドリンク2なら2)
今回は要点をまとめても、まだ難しく感じます。
以下のドリンクを例に詳しく解説していきます。
- ドリンク1:カフェイン量(200)、値段(250)
- ドリンク2:カフェイン量(180)、値段(200)
データの入力方法
実際にpythonのコードで入力する場合は、以下のように入力していくことになります。
(・←この点は関係ありません)
200・スペースキー・250・エンターキー
180・スペースキー・200・エンターキー
上記の数値を変数にそれぞれ格納します。
200:c_1、250:p_1
180:c_2、200:p_2
CP(コストパフォーマンス)を求める
ドリンク1:200 ÷ 250 = 0.8
ドリンク2:180 ÷ 200 = 0.9
ドリンク2の方が数字が大きいのでCPが高いと言えます。
よって、出力データは「2」となります。
スクラッチでプログラムを作成
答えは上のコードになります。
あまり難しいことはやっていませんが、入力データの受け取り方が違うことに気が付きましたか?
先ほど見た問題では、入力は「カフェイン量・スペースキー・値段・エンター」で受け取ることになっていました。
しかし、上のコードはそうはなっておらず、ひとつずつ受け取るようになっています。
なぜかと言うと、スクラッチで作ろうと思うと難しくなってしまうからです( ;∀;)
そうは言っても、「問題と違うコードは納得いかない!!」というあなたのために、以下に難しいコードの画像を公開します。
(コードが長いので2枚の画像になります)
難しそうに見えますが、ポイントは、入力データの区切り(スペースキー)の位置を正しく認識させて、前半と後半の値を別々の変数に格納することです。
Pythonで解いてみる
たった6行のコードで書くことが出来ました。
変数名については以下のように読み替えてください。
a: c_1
b: p_1
c: c_2
d: p_2
毎回そうですが、すっきり短く出来るのがスクラッチとの違いであり、プログラミング言語(python)の良さでもあります。
一行目と二行目は、内包表記と呼ばれる応用的な書き方をしているため、もう少し簡単に解説するためにコードを書き換えてみます。
上から三行を解説していきます。
まず、一行目のinput()というのは、入力を受け付けるコードです。
スクラッチの「あなたの名前は何ですか?」と同じようなものと思って大丈夫です。
その後のsplit()というのは、スペースキーを識別して、前後の値を分けてくれるものです。
それらの2つの数字をinput1という変数に格納します。
しかし、このままでは扱いづらいので、それぞれ、カフェイン量はaに、値段はbに格納します。
二行目と三行目に登場するint()というコードですが、プログラミングでは大切な意味を持ちます。
- input()で入力された値は、数字であっても文字として扱われる
- 文字のことを「str」、数字(整数)のことを「int」という
- 文字として扱われている値を「int(数値)」に変換している
「str」や「int」のようなもののことを「タイプ」や「型」と呼びます。
プログラミング言語において、型はとても重要です。
(スクラッチではあまり意識しなくても、コードが実行出来る優しい仕様になっています)
何やら、説明が長くなってしまいましたが、Pythonはコードが短くなり、スッキリする反面、スクラッチとは違って、コードが直感的に分かりづらかったり、型などにも気をつける必要がある。ということを頭に入れてもらえれば大丈夫です。
まとめ
「オンラインハッカソンに挑戦」の6回目が終了しました。
これまでに比べて、難易度も上がり、一度読んだだけでは分かりづらい部分もあるかもしれません。
この記事は「スクラッチにはだいぶ慣れた」「スクラッチ、少し飽きたかも・・」という人向けに書いています。
スクラッチは、プログラミング学習のための素晴らしいツールですが、Pythonなどの本格的なプログラミングは、早くから学んだ方が、成長につながり、将来的にお仕事の役にも立ちます。
興味を持ったあなたは、ぜひPythonに挑戦してみましょう( ^∀^)
コメント