現在Pythonを学習しているのですが、私は最初にJavaScript(以下JS)を少し学習してからPythonを始めたため、日々の頭の体操としてJSの関数をPythonに置き換えるという事を行っていました。
多くは似たような書き方になるのですが、for文で躓いたためその時のことを書いていこうと思います。
JSの構文を真似たらエラーが……
いつも利用させていただいている「JavaScript Coding Challenges」という問題集から下記の設問を引用させていただきます。
リンクも張らせていただきますので、よろしければご自身でもチャレンジしてみてください。
頭の体操にもなります!
リンク:JavaScript Coding Challenges
13.Add up all the numbers from 1 to the number you passed to the function.
function addUp(num){
//Write Your solution Here
};console.log(addUp(10)); // 55
console.log(addUp(40)); // 820
console.log(addUp(15)); // 120
「1から関数に渡した数値までをすべて合計した関数を作ってください」という問題になります。
JSを学習した方であれば、なんとなく「あ~、for文を使うんだな」というのを想像すると思います。
回答としては下記のようなコードを書く方が多いのではないでしょうか。
function addUp(num) {
let sum = 0;
for (i = 1; i <= num; i++){
sum += i;
}
return(sum)
};
console.log(addUp(10)); // 55
console.log(addUp(40)); // 820
console.log(addUp(15)); // 120
こちらのコードはもちろん正解です。
JSのfor文の基本書式に則った形になっています。
for文の基本書式(JS)
for (初期化式; 条件式; 変化式){
実行する内容;
}
当初私はこれと同じノリでPythonで下記のように記述しました。
def addUp(num):
sum = 0
for (i = 0; i <= num; i++):
sum += i
return sum
print(addUp(10)) # 55
print(addUp(40)) # 820
print(addUp(15)) # 120
はい、もちろんエラーが出て動きません笑
調べてみたところ基本書式が結構違っていました。
Pythonのfor文
Pythonで回数を指定したfor文を記述する際はrange()関数
を組み合わせて下記のように記述します。
for文の基本書式(Python)
for 変数名 in range(繰り返す回数):
実行する内容
こちらに則って先程のコードを書き直してみます。
def addUp(num):
sum = 0
for i in range(num + 1):
sum += i
return sum
print(addUp(10)) # 55
print(addUp(40)) # 820
print(addUp(15)) # 120
正しく動かすことができました!
ただ、一つ注意しておくべき点があります。
それはforの後ろのi
は0から始まる連番であるということです。
これに関しては配列のインデックス番号との兼ね合いなどが関係しており、そういった点はJSでも同様ですね。
つまり、1から5までを合計しようとしてfor i in range(5):
のように記述すると本来は15になるはずが、0+1+2+3+4=10
と計算されてしまいます。
そのため上記コードではrange()関数に渡す引数部分をnum + 1
とすることで対応しています。
最後に
メジャーなプログラミング言語は書式が似ている部分も多いですが、当然違っている部分も多いです。
都度調べる必要があるため、どんな言語を学習するにしてもやはり基本は「調べる力」を養っていくことが大事だと思います。
あと、こういった小さな関数であってもやはりPythonは記述量が少なくシンプルな言語だと改めて感じました。
その辺の比較も面白いですね。