PaizaスキルチェックD,Cランクでよく使うもの一覧~Python~

#はじめに
この記事ではPaizaのスキルチェックで僕がよく使ったものを一覧にしてまとめています。

主にD,Cランクの問題を解くことを想定していますので、参考になれば幸いです。

ちなみに僕はBランクなので、同じレベルかそれ以上の方には参考にならないと思います。

そもそもPaizaを初めて使う人はこの記事を参考にしてください。
[Python Paiza-スキルチェックと 標準入力(input)のいろいろ](https://qiita.com/heku_777/items/0042b0e69ddc7ed7177f)

#①input()を使った標準入力
Paizaの問題を解く時に一番最初にすることは、入力例から必要となる値を取ってくることです。
そのために`input`を使います。

##input()の特徴
`input`は入力れいにある値を文字列型(`str`)として取ってきます。
そのため数字にしたい時には`int(input())`で数字に直しましょう。

また、`input()`は１行丸ごと取ってきます。

```python
#a b cと入力。
paiza = input()
print(paiza)
#abc
print(type(paiza))   #変数paizaの型を確認
#<class 'str'>   (文字列型)
```

##input()の一般的な使い方
```python
#入力例'Hello'
paiza = input()  #paiza変数に値を保管　　　#ここだけコピーすれば良いです！
print(paiza)   #Hello
```
`()`を忘れないように気をつけましょう。

##１行に複数の値がある時
先ほどは一つの値を取ってきましたが、複数の値を取ってくるときはどのようにすれば良いでしょうか？

```python
#a b cと入力。
paiza = input().split()　　　#ここだけコピーすれば良いです！

print(paiza)
#['a', 'b', 'c']
print(type(paiza))
#<class 'list'>
```
このようにリストとして取って来れます。
あとはfor文などを使えばうまく使えそうですね。

##１行に複数の値がある時に1つ1つの値を取り出す
先ほどは１行に複数の値がある時の取り出し方を紹介しましたが、リストではなく１つ１つ取ってく流場合にはどのようにしたら良いのでしょうか？

```python
#a bと入力
paiza, skill = input().split()　　　#ここだけコピーすれば良いです！
print(paiza)
#a
print(skill)
#b
print(type(paiza))
#<class 'str'>
print(type(skill))
#<class 'str'>
```
このようにすれば値を１つ１つ変数に代入して取って来れます。
ただし、１行の値の個数に対して変数の数が足りていないとエラーが起きるので気をつけましょう。

```python
#a b cと入力
paiza, skill = input().split()   #値a, b, cの３つに対して、変数がpaiza, skillの二つしかないので足りない
#ValueError: too many values to unpack (expected 2)
```
足りないよ！と怒られてしまいました。

##数字にする
先ほども述べたように`input`は文字列として値を取ってきます。
では数字にするには？

```python
#１を入力
paiza = input()
print(paiza)
#１
print(type(paiza))
#<class 'str'>
paiza_number = int(paiza)　　　#ここだけコピーすれば良いです！
#int()を使って数字にする
print(type(paiza_number))
#<class 'int'>
```

###リスト内包表記
では複数の値を数字にする方法を見ていきましょう。
リスト内包表記をいうものを使います。

```python
#１と２を入力
number1, number2= [int(x) for x in input().split()]   #ここだけコピーすれば良いです！

print(number1)
#１
print(number2)
#２
print(type(number1))
#<class 'int'>
print(type(number2))
#<class 'int'>
```
ちょっと難しいと思うので説明します。
`input().split()`には１と２がリストとして入っています。
そのリストの要素をfor文で１つずつ取り出して、`x`に代入します。
そしてその`x`を`int(x)`で数字にして、`number1`に代入します。
もっと詳しく知りたいかたは是非調べてみてください・

###map関数
この方法とは別に`map`を使った方法もあります。
こちらの方が短いので使いやすいかもしれないです。

```python
#1 2 3と入力
number1, number2, number3 = map(int, input().split())   #ここだけコピーすれば良いです！
 
print(a) 
#1
print(b) 
#2
print(c) 
#3
print(type(number1))
#<class 'int'>
print(type(number2))
#<class 'int'>
print(type(number3))
#<class 'int'>
```

#②リスト
リストはしょっちゅう使います。
ただリストを用意するだけでなく、リストに追加したり削除したりする方法を紹介していきます。

##空のリストを用意

```python
paiza = []
```
これはリストを空にすることにも使えます。

##要素を追加

```python
#リスト名.append(追加したい値)
paiza.append('a')
print(paiza)
#['a']
```

##要素を削除

###remove

```python
print(paiza)
#['a', 'b', 'c']

#リスト名.remove(要素名)
paiza.remove('a')
print(paiza)
#['b', 'c']
```

###del 
```python
#del リスト名[インデックス番号]
print(paiza)
#['a', 'b', 'c']
del paiza[1]
print(paiza)
#['a', 'c']
```

##並び替え
この場合下のリストが並び替えられるので注意してください。
###小さい方から
```python
paiza = [2,5,3,1,4]
paiza.sort()
print(paiza)
#[1, 2, 3, 4, 5]
```

###大きい方から
```python
paiza = [2,5,3,1,4]
paiza.sort(reverse=True)
print(paiza)
#[5, 4, 3, 2, 1]
```
`reverse`は逆順にする指定です。

##リストを出力
```python
#'ここに区切りたいものを入れる'.join(リスト名)
paiza = ['a', 'b', 'c', 'd', 'e']
print('?'.join(paiza))   #?で区切る
#a?b?c?d?e
```

#③ループ
Paizaのスキルチェックで頻繁にループが使われます。
基本的なforループの使われ方は是非調べてみてください。

##何行もの入力を取り出す時
何行もの入力を取り出す時`input`を何回も書くのはめんどくさいです。
そんな時for文で取り出すようにしましょう。

```python
for  i  in range(繰り返したい回数):   #使用例：range(5)
    paiza = input()
```
このように書くことで`input`をrangeに入力した数字の回数だけ繰り返すことができます。

##入力されたものを取り出しリストに格納

```python
#a b c d e
paiza = []
for i in range(5):
    a = input()
    paiza.append(a)
print(paiza)
#['a', 'b', 'c', 'd', 'e']
```
`input()`で１行の入力を取り出し、それをリストに追加するのを５回繰り返します。

#④小数点の調整

##小数点切り捨て

###単純な割り算
```python
a = 10
b = 3
paiza = 10//3
print(paiza)
#3
```
###math.floor
```python
import math
a = 10.123
print(math.floor(a))
#10
```

##小数点切り上げ
```python
import math
a = 10.123
print(math.ceil(a))
#10
```

#⑤偶数と奇数
if文を使った偶数と奇数の判定は何回か出てきます。

```python
number = 2
if number%2==0:
    print('ok')
else:
    print('no')
#ok
```
あまりを出す計算をして、あまりが0ならば`ok`を出力し、それ以外なら`no`を出力するというもの。

#最後に
自分が今思いつくものでよく使ったものを一通り上げました。
随時更新していく予定です。