Python勉強中なので、練習問題を解く

仕事で使うかもしれないため、Pythonを勉強中です。

筆者は、仕事でC言語、趣味でJavaScriptを使い、少しだけRustを勉強した系の人です。

Pythonは何に使ったらいいかもわかっていませんが、なんか使えると便利と聞いたので、勉強しようとしています。

# ひとまず

ひとまず文法を覚えようと思って、京都産業大学の練習問題を課題にして、100本ノックの基礎編19問をPythonで行いました。

https://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocks.html

以下はそのメモです。

当然のことながら、書いてあるコードの正確性は保証できません。
素人の書いたコードだから当然です。

## No.00

```python
print("Hello World!")
```

このあたりはC言語とJavaScriptとRustがごっちゃになりやすいところです。
まあ、調べるのに時間がかかるところでもないので、この言語はなんだったっけ？となったら、都度調べます。

## No.01

```python
x = 12345
y = 23456
print("{0} + {1} = {2}".format(x,y,x+y))
```

Pythonでのprintfを調べたら、これが新しめの方法だよって出てきました。

### 20241202追記

ご指摘いただいたので、追記。

Python3.6（2016年リリース）からフォーマット済み文字列リテラルが追加されたようです。

https://docs.python.org/ja/3.6/reference/lexical_analysis.html?highlight=%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88#f-strings

変数名をそのまま埋め込めるため、複数の変数があるときは可読性が高いですね。

`str.format()`の形式はPython2.6（2008年リリース）から、導入されたようです。

https://docs.python.org/2.6/library/stdtypes.html#str.format

## No.02

```python
x = 12345
y = 7
print("{} / {} の余りは {}".format(x,y,x%y))
```

このへんは、C言語とかと変わらない印象。

## No.03

```python
number = input("input number: ")
print("your number is {}".format(number))
```

調べたらでてきた方法でお手軽に。

## No.04

```python
number = int(input("input number: "))
print("answer = {}".format(number*3))
```

`int()`がない状態で書いたら、
```
input number: 43
answer = 434343
```
と、なりました。
型の問題だなと推測したので、JSにあるように、適当に`int()`でくくったら、想定通りになりました。

## No.05

```python
num1 = int(input("input 1st number: "))
num2 = int(input("input 2nd number: "))
print("sum: {}".format(num1 + num2))
print("sub: {}".format(num1 - num2))
print("mul: {}".format(num1 * num2))
print("div: {}, rem: {}".format(int(num1 / num2), num1 % num2))
```

まあ、こういうのはシンプルですね。

## No.06

```python
num = int(input("input number: "))
if(num == 0) :
    print("zero")
```

Pythonでのif文の書き方は調べました。
インデントが必要なんですね。
これは、他の言語に比べて体裁が崩れにくくていいなあと思います。

## No.07

```python
num = int(input("input number: "))
if(num == 0):
    print("zero")
else :
    print("not zero")
```

else節はわかりやすい。

## No.08

```python
num = int(input("input number: "))
if(num > 0) :
    print("positive")
```

ふつう。

## No.09

```python
num = int(input("input number: "))
if(num > 0) :
    print("positive")
elif(num < 0) :
    print("negative")
else :
    print("zero")
```

ふつう。

## No.10

```python
num = int(input("input number: "))
print("absolute value is {}".format(abs(num)))
```

よく`abs()`ってあるよなあと思って、調べたらあったので適当に使いました。


## No.11

```python
for n in range(0, 10, 1) :
    print("Hello World!")
```

回数が決まっているループにwhileは使いたくなくて、forを調べました。

Pythonでのforは`for ... in ...`の形で使うらしい。
で、inの右側にはrangeを使うらしいので、適当にそれっぽく書いてみました。
0～N-1までという点にはお約束通りひっかかりましたし、これからもひっかかるでしょう。

## No.12

```python
num = int(input("input number: "))
for n in range(0,num, 1):
    print("Hello World!")
```

入力値に置き換わっただけ。

## No.13

```python
num = int(input("input number: "))
for n in range(0, num+1, 1):
    print("{}".format(n))
```

このへんでも、NかN+1かでひっかかっています。

## No.14

```python
num = int(input("input number: "))
for n in range(num, 0-1, -1) :
    print("{}".format(n))
```

自分的に終端値がわかるように、`0-1`と書きました。

## No.15

```python
num = int(input("input number: "))
for n in range(0,num+1, 1) :
    if(n%2 == 0):
        print("{}".format(n))
```

少し考えましたが、単純にカウントアップしていって、2の倍数だったら出力する方式です。

## No.16

```python
first_flag = True
num = 1

while(first_flag or num != 0) :
    num = int(input("input number: "))
    first_flag = False
```

Pythonにはdo-whileがない。
その場合の適切な書き方がわからず、かなり不細工なプログラムになりました。

最初、orを||と書いて、コンパイラが怒ってきました。

## No.17

```python
arr = range(0,10,1)
for i in arr :
    print("{}".format(i))
```

いまいち、range()とlist(range())の違いがわからない……と思いながら、書いています。

## No.18

```python
num = int(input("input number: "))
arr = [num for i in range(10)]
for i in arr:
    print("{}".format(i))
```

書き方がわからず、
C言語ならこう書くんだけど……と、少し考えこみました。
適当に調べていたら、`[num for i in range(10)]`の書き方でてきたため、これを使いました。


## No.19

```python
nn = 5
arr = list(range(nn))

for i in range(nn):
    number = int(input("input number: "))
    arr[i] = number

for i in range(nn) :
    print("{}".format(arr[i]))
```

要素数が変わってもいいように変数化。
その他はふつうに。

# 最後に

以上、Python勉強中なので、練習問題を解いた記録でした。
C言語向けの練習問題のようですが、基礎的な文法を学ぶにはどの言語でも良い課題になりますね。