tanaka's Programming Memo

プログラミングについてのメモ。

Python3でpaizaの問題を解く時によく使う文法

プログラマーの転職や新卒を支援するサービス paiza で、スキルチェックをする時によく使う文法です。

pythonは普段は全く触っておらず初心者ですが、とにかく普段触っていないので忘れちゃうので。

(2017/1/9 配列の初期化とBoolean値を追加)

基本

変数定義

定義せず、いきなり使って大丈夫です。

a = 1
b = "こんにちは"

四則演算記号

  • 足し算 +
  • 引き算 -
  • 掛け算 *
  • 割り算 /
  • 剰余 %

省略記号

インクリメント(++)とデクリメント(--)はありません。以下の省略記法が使えます。

a += 1
a -= 10
a *= 2
a /= 3
a %= 2

コメント

# から行末までコメントです。

# 行末までコメント

''' から ''' までの間は複数行でコメントにできます。

'''
複数行
コメント
'''

Boolean値

Booleanは、 True と False


出力関連

変数などを出力

print(data)

数値を文字列化

print("1+1は"+str(2)+"です")
  • 出力例
1+1は2です

改行しないで出力

print()は通常、最後に改行を自動的に挿入します。コンマに続けてend=""とすると、単語の後につける文字を制御できます。""として空文字にすることで改行しなくなります。

print("改行", end="")
print("なし", end="")
  • 出力例
改行なし



入力関連

1行入力

input()

スペース区切りの文字列を配列に分解する

  • 入力例
0 1 2 3 4 5
  • コード
datas = input().split(' ')
print(datas)
  • 出力例
['0', '1', '2', '3', '4', '5']

文字列を数値に変換

int(文字列)

前述のdatasの例に以下を加えると、最初と2番目の要素を足します。

print(int(datas[0])+int(datas[1]))



繰り返し文

回数での繰り返し(for)

回数繰り返しはrange()を使って以下のようにします。

  • コード例
for i in range(10):
    print(str(i)+",", end="")
  • 出力例
0,1,2,3,4,5,6,7,8,9,

データでの繰り返し

inの後ろに配列を指定すれば、要素を1つずつ取り出して、それを制御変数に代入しながらループするので便利です(foreach)。

構文は以下の通りです。

for 制御変数 in 配列:
    繰り返しブロック
  • コード例
datas = ["こんにちは", "今日は", "よい天気です。"]

for data in datas:
    print(data)
  • 出力例
こんにちは
今日は
よい天気です。

条件での繰り返し(while)

構文は以下の通りです。

while 繰り返し条件:
    繰り返しブロック
  • コード例
sum = 1

while sum<10:
    print(sum, end=", ")
    sum+=sum
  • 出力例
1, 2, 4, 8, 



if文

基本文法は以下の通りです。elifやelseは省略できます。

if 条件式1:
    条件式1が成立した時の処理ブロック
elif 条件式2:
    ここまでの条件が不成立で、かつ、条件式2が成立した時の処理ブロック
elif 条件式3:
    ここまでの条件が不成立で、かつ、条件式3が成立した時の処理ブロック
else:
    ここまでのすべての条件が不成立だった時の処理ブロック



配列

定義の定義

  • コード例
a = []
b = [0, 1, 2, 3]
c = [[0,1], [2,3], [4,5]]
print(a)
print(b)
print(c)
  • 出力例
[]
[0, 1, 2, 3]
[[0, 1], [2, 3], [4, 5]]

配列の最後に要素を追加する

a = []
a.append(1)
a.append(2)
print(str(a[0])+","+str(a[1]))
  • 出力例
1,2

配列から要素を削除

pop()で最後尾の要素を削除、pop(インデックス)で指定のインデックスの要素を配列から削除します。pop()は、削除した要素を返します。

  • コード例
a = [0, 1, 2, 3]

# 最初の状態を表示
print(a)

# 最後の要素を取り出して削除
print(a.pop())
print(a)

# 最初([0])の要素を取り出して削除
print(a.pop(0))
print(a)
  • 出力例
[0, 1, 2, 3]
3
[0, 1, 2]
0
[1, 2]

連想配列

通常の配列は、通し番号になるので、 a["name"]="ぼく" のような代入はできません。その場合は、以下のようにします。

  • コード例
a = {"name": "ぼく", "sex": "男"}
print(a["name"])
print(a["sex"])
  • 出力例
ぼく
男

JavaScriptとは"の有無が異なるので注意です。

以下のように、配列と組み合わせることができます。

  • コード例
a = []
a.append({"name": "ぼく", "sex": "男"})
a.append({"name": "わたし", "sex": "女"})

print(a[0]["name"]+":"+a[0]["sex"])
print(a[1]["name"]+":"+a[1]["sex"])
  • 出力例
ぼく:男
わたし:女

指定の値で埋めた1次元配列を定義

基本文法は以下の通りです。

array = [埋めたい値]*行数
  • コード例
datas = [1]*10
print(datas)
  • 出力例
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

指定の値で埋めた2次元配列を定義

基本文法は以下の通りです。

array = [[埋めたい値]* 列数 for 制御変数 in range(行数)]
  • コード例
datas = [[10] * 3 for i in range(5)]
print(datas)
  • 出力例
[[10, 10, 10], [10, 10, 10], [10, 10, 10], [10, 10, 10], [10, 10, 10]]



関数

以下、基本文法です。returnは省略できます。

関数定義は、利用する前に書きます。

def 関数名(引数リスト):
    関数の処理
    return 戻り値
  • コード例
def add(a, b):
    return a+b

print(add(1,2))
  • 出力例
3



paizaのスキルチェックのコツ

スキルチェックの難点は、入力例が一通りしか用意されていない点です。それが成功しただけでは不安があります。自分でもテストデータを用意して、結果が正しくなるかをチェックしたいところです。

そのためには、最初に入力を全て済ませてから、処理を開始するような構造にするのがよいです。そうしておくことで、入力と処理の間に、テスト用のデータを代入することで、簡単にテストを実施することができるようになります。

# 入力ブロック
count = int(input().rstrip())
inputs = []
for i in range(count):
    inputs.append(input())

# テストデータを設定
count = 5
inputs = ["3", "4", "1", "5", "10"]


# 処理
sum = 0
for data in inputs:
    sum += int(data)

# 出力
print(sum)

このようにしておくことで、「テストデータを設定」の場所に、自分のテストデータを差し込んで、結果を確かめることができます(paiza.ioを使う方が楽かもですが)