Edited at

AtCoderで始めるPython入門


はじめに

Pythonのスキルを身に付けるために AtCoder競技プログラミング を始めました。AtCoderでは初心者のために、AtCoder Beginner Contest(以下ABC)というコンテストを開催しています。コンテストでは、難易度に応じてA問題からD問題まで問題が用意されています。概ねA問題とB問題はPythonの実装方法を知っていれば解ける問題が多いです。A問題とB問題が解けるようになるために、本記事で実装方法を整理しました。


本記事について

本記事についてご説明します。


目的

本記事の目的は下記です。


  • Python3でABC-A問題とABC-B問題を概ね解けるようになる


注意事項

本記事の注意事項は下記の通りです。ご理解の程をよろしくお願い致します。


  • 本記事は一個人で作成した記事であり、AtCoder社は作成に一切関与していません

  • ABC-A問題とABC-B問題をすべて解けるようになる訳ではありません

  • Python3の一部マイナーバージョンで本記事とは異なる仕様があります

  • 体系的なPython3を学習する記事ではありません


構成

各章は下記の構成です。


章名
内容

第1章
文法
文法を学べる

第2章
データ型
データ型を学べる

第3章
基本処理
基本処理(よく使われる関数とメソッド)を学べる

付録
-
Python3の学習を深める情報を学べる

各節項は下記の構成です。

項目
内容

サンプルコード
問題から得られた知見と検証によって得られた知見を整理したコード

入力
サンプルコードの入力例

実行結果
サンプルコードの実行結果

解答例
AtCoderに提出したACのコード


バージョン / 言語

サンプルコードは下記バージョンで動作することを確認しています。

$ python --version

Python 3.6.4

解答例はAtCoderの下記言語でACになることを確認しています。

Python3 (3.4.3)


最後に

最後となりましたが、読者の方におかれましてはPython使いの成長過程と思い、温かく見守って頂けると幸いです。また、このような学習環境を提供して頂いている AtCoder社、SNS等で関わって頂いている競プロerの方に感謝を申し上げます。


第1章 文法

第1章では文法について説明します。


1.1 出力処理

キーポイント


  • 標準出力はprint関数で出力する

  • 整数の出力はprint(整数値)で出力する

  • 変数の出力はprint(変数名)で出力する

  • 文字列の出力はprint("文字列")で出力する

  • 文字列の出力/定義は文字列をダブルクォーテーション"、またはシングルクォーテーション'で囲う

  • print関数の区切り文字はprint(出力データ,sep="区切り文字")で指定する

  • print関数の区切り文字を指定しない場合print(出力データ)、区切り文字は 半角スペース となる

  • print関数の末尾の文字はprint(出力データ,end="末尾の文字")で指定する

  • print関数の末尾の文字を指定しない場合print(出力データ)、末尾の文字は 改行 となる


整数


  • 整数を出力する

整数を出力する場合、print(整数値)で出力する。


サンプルコード

print(10)



実行結果

10



  • 整数を変数に格納して出力する

整数を変数に格納して出力する場合、変数名=整数で変数を定義し、print(変数名)で出力する。


サンプルコード

x=20

print(x)


実行結果

20



浮動小数点数


  • 浮動小数点数を出力する

浮動小数点数を出力する場合、print(浮動小数点数)で出力する。


サンプルコード

print(2.9)



実行結果

2.9



  • 浮動小数点数を変数に格納して出力する

浮動小数点数を変数に格納して出力する場合、変数名=浮動小数点数で変数を定義し、print(変数名)で出力する。


サンプルコード

x=3.5

print(x)


実行結果

3.5



文字列

文字列の出力/定義は文字列をダブルクォーテーション"、またはシングルクォーテーション'で囲う。


  • 文字列を出力する

文字列を出力する場合、print("文字列") または print('文字列') で出力する。


サンプルコード

print("Hello World!")



実行結果

Hello World!



  • 文字列を変数に格納して出力する

文字列を変数に格納して出力する場合、変数名="文字列"で変数を定義し、print(変数名)で出力する。


サンプルコード

s="Hello World!"

print(s)


実行結果

Hello World!



  • 文字列の変数のインデックスを指定して文字を出力する

文字列の変数のインデックスを指定して文字を出力する場合、print(変数名[インデックス数])で出力する。


サンプルコード

s="Hello World!"

print(s[0])


実行結果

H



サンプルコード

s="Hello World!"

print(s[11])


実行結果

!



リスト


  • 1次元リストを出力する

1次元リストを出力する場合、print(リスト名)で出力する。


サンプルコード

Lists=[1,2,3,4,5]

print(List)


実行結果

[1, 2, 3, 4, 5]



  • 1次元リストの各要素を出力する

1次元リストの各要素を出力する場合、for 変数名 in リスト名:でループ処理し、print(変数)で出力する。


サンプルコード

Lists=[1,2,3,4,5]

for List in Lists:
print(List)


実行結果

1

2
3
4
5

1次元リストをアンパックを使用して出力する場合、print(*リスト名)で出力する。


サンプルコード

Lists=[1,2,3,4,5]

print(*List)


実行結果

1 2 3 4 5



  • 1次元リストのインデックス指定して各要素を出力する

1次元リストのインデックス指定して各要素を出力する場合、for 変数名 in range(リストの長さ):でループ処理し、print(リスト名[変数名])で出力する。


サンプルコード

List=[1,2,3,4,5]

for i in range(len(List)):
print(List[i])


実行結果

1

2
3
4
5


  • 2次元リストを出力する

2次元リストを出力する場合、print(リスト名)で出力する。


サンプルコード

List=[[1,2,3],[4,5,6]]

print(List)


実行結果

[[1, 2, 3], [4, 5, 6]]



  • 2次元リストの各行を出力する

2次元リストの各行を出力する場合、for 1次元リスト名 in 2次元リスト名:でループ処理し、print(1次元リスト名)で出力する。


サンプルコード

Lists=[[1,2,3],[4,5,6]]

for List in Lists:
print(List)


実行結果

[1, 2, 3]

[4, 5, 6]


  • 2次元リストの各要素を出力する

2次元リストの各要素を出力する場合、for 1次元リスト名 in 2次元リスト名:でループ処理し、さらにfor 変数名 in 1次元リスト名:でネストし、print(変数名)で出力する。


サンプルコード

List=[[1,2,3],[4,5,6]]

for Row in List:
for Col in Row:
print(Col)


実行結果

1

2
3
4
5
6


  • 2次元リストの各要素をインデックス指定して出力する

2次元リストの各要素をインデックス指定して出力する場合、for 変数名A in range(2次元リストの長さ):でループ処理し、さらにfor 変数名B in range(1次元リストの長さ):でネストし、print(リスト名[変数名A][変数名B])で出力する。


サンプルコード

List=[[1,2,3],[4,5,6]]

for i in range(len(List)):
for j in range(len(List[i])):
print(List[i][j])


実行結果

1

2
3
4
5
6


区切り文字の指定

print関数の区切り文字はprint(出力データ,sep="区切り文字")で指定する。


  • 区切り文字を指定しない

区切り文字を指定しない場合print(出力データ)、区切り文字が 半角スペースで出力される。


サンプルコード

a=1

b=2
c=3
print(a,b,c)


実行結果

1 2 3



  • 改行を指定する

改行\nを指定する場合、print(出力データ,sep='\n')で出力する。


サンプルコード

a=1

b=2
c=3
print(a,b,c,sep='\n')


実行結果

1

2
3


  • カンマを指定する

カンマ,を指定する場合、print(出力データ,sep=',')で出力する。


サンプルコード

a=1

b=2
c=3
print(a,b,c,sep=',')


実行結果

1,2,3



  • 区切り文字なしを指定する

区切り文字なしを指定する場合、print(出力データ,sep='')で出力する。


サンプルコード

a=1

b=2
c=3
print(a,b,c,sep='')


実行結果

123



末尾文字の指定

print関数の末尾の文字はprint(出力データ,end="末尾の文字")で指定する。


  • 末尾文字を指定しない

末尾文字を指定しない場合print(出力データ)、末尾文字が 改行\nで出力される。


サンプルコード

print("a")

print("b")


実行結果

a

b


  • 末尾文字なしを指定する

末尾文字なしを指定する場合、print(出力データ,end="")で出力する。


サンプルコード

print("a",end="")

print("b")


実行結果

ab



1.2 入力処理

キーポイント


  • 標準入力はinput関数で入力する(文字列(str)型で入力される)

  • 標準入力から整数を得たい場合、整数(int)型int(input())に変換する

  • 標準入力から浮動小数点数を得たい場合、浮動小数点数(float)型float(input())に変換する

  • 標準入力から得た文字列を区切りたい場合、split関数を用いてinput().split("区切り文字")と使用する

  • split関数で区切り文字を指定しない場合input().split()半角スペース で区切られる

  • 複数列の整数の標準入力を複数の変数に格納したい場合、map関数を用いてmap(int,input().split())と使用する

  • 複数列の整数の標準入力をリストに格納したい場合、map関数を用いてlist(map(int,input().split()))と使用する

  • 複数行の整数の標準入力をリストに格納したい場合、リスト内包表記で[int(input()) for 変数名 in range(入力行数)]と使用する


1行 / 1列


  • 整数を変数に格納する

整数を変数に格納する場合、変数名=int(input())で格納する。


入力

2



サンプルコード

N=int(input())

print(N)


実行結果

2



  • 文字列を1つの変数に格納する

文字列を1つの変数に格納する場合、変数名=input()で格納する。


入力

Hello world!



サンプルコード

s=input()

print(s)


実行結果

Hello world!



  • 文字列を複数の変数に格納する

文字列を複数の変数に格納する場合、変数名A,変数名B,変数名C,変数名D=input()で格納する。


入力

1234



サンプルコード

a,b,c,d=input() # 1234を整数(int)型ではなく、文字列(str)型で変数に格納する

print(a,b,c,d)


実行結果

1 2 3 4



入力

hoge



サンプルコード

a,b,c,d=input()

print(a,b,c,d)


実行結果

h o g e



1行 / C列


  • 整数を複数の変数に格納する

整数を複数の変数に格納する場合、変数名A,変数名B=map(int,input().split())で格納する。


入力

1 2



サンプルコード

a,b=map(int,input().split())

print(a)
print(b)


実行結果

1

2

ABC012 A - スワップ


解答例

a,b=map(int,input().split())

print(b,a)


  • 文字列を複数の変数に格納する

文字列を複数の変数に格納する場合、変数名A,変数名B=input().split()で格納する。


入力

Hello world!



サンプルコード

a,b=input().split()

print(a)
print(b)


実行結果

Hello

world!

ABC012 A - スワップ


解答例

a,b=input().split()

print(b,a)

ABC051 A - Haiku


解答例

a,b,c=input().split(",")

print(a,b,c)


  • リストに整数を格納する

リストに整数を格納する場合、リスト名=list(map(int,input().split()))で格納する。


入力

1 2 3 4 5



サンプルコード

List=list(map(int,input().split()))

print(List)


実行結果

[1, 2, 3, 4, 5]


リストに整数を格納する場合、リスト名=[int(変数名) for 変数名 in input().split()]で格納する。


入力

1 2 3 4 5



サンプルコード

List=[int(i) for i in input().split()]

print(List)


実行結果

[1, 2, 3, 4, 5]



  • リストに文字列を格納する

リストに文字列を格納する場合、リスト名=list(input().split())で格納する。


入力

Hello world !



サンプルコード

List=list(input().split())

print(List)


実行結果

['Hello', 'world', '!']


リストに文字列を格納する場合、リスト名=[変数名 for 変数名 in input().split()]で格納する。


入力

Hello world !



サンプルコード

List=[i for i in input().split()]

print(List)


実行結果

['Hello', 'world', '!']



R行 / 1列


  • 整数を複数の変数に格納する

整数を複数の変数に格納する場合、変数名=int(input())を複数行で格納する。


入力

1

2


サンプルコード

a=int(input())

b=int(input())
print(a,b)


実行結果

1 2


整数を複数の変数に格納する場合、変数名A,変数名B=[int(input()) for ダミー変数 in range(変数の数)]で格納する。


入力

1

2


サンプルコード

a,b=[int(input()) for i in range(2)]

print(a,b)


実行結果

1 2



  • リストに整数を格納する

リストに整数を格納する場合、リスト名=[int(input()) for ダミー変数 in range(変数の数)]で格納する。


入力

1

2
3
4
5


サンプルコード

List=[int(input()) for i in range(5)]

print(List)


実行結果

[1, 2, 3, 4, 5]



  • リストに文字列を格納する

リストに文字列を格納する場合、リスト名=[input() for ダミー変数 in range(変数の数)]で格納する。


入力

a

b
c
d
e


サンプルコード

List=[input() for i in range(5)]

print(List)


実行結果

['a', 'b', 'c', 'd', 'e']



  • 入力行数が指定され、リストに整数を格納する

入力行数(Row=5)が指定され、リストに整数を格納する場合、変数名=int(input())で行数を格納し、リスト名=[int(input()) for ダミー変数 in range(変数名)]でリストに格納する。


入力

5

0
1
2
3
4


サンプルコード

Row=int(input()) 

List=[int(input()) for i in range(Row)]
print(List)


実行結果

[0, 1, 2, 3, 4]



  • 入力行数が指定され、リストに文字列を格納する

入力行数(Row=5)が指定され、リストに文字列を格納する場合、変数名=int(input())で行数を格納し、リスト名=[input() for ダミー変数 in range(変数名)]でリストに格納する。


入力

5

a
b
c
d
e


サンプルコード

Row=int(input()) 

List=[input() for i in range(Row)]
print(List)


実行結果

['a', 'b', 'c', 'd', 'e']



R行 / C列


  • 整数を2次元リストに格納する

整数を2次元リストに格納する場合、リスト名=[list(map(int,input().split())) for ダミー変数 in range(入力行数)]となる。


入力

1 2 3 4 5

6 7 8 9 10
11 12 13 14 15


サンプルコード

List=[list(map(int,input().split())) for i in range(3)]

print(List)


実行結果

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]



入力

3

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15


サンプルコード

Row=int(input())

List=[list(map(int,input().split())) for i in range(Row)]
print(List)


実行結果

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]


整数を2次元リストに格納する場合、リスト名=[[int(変数名) for 変数名 in input().split()] for ダミー変数 in range(入力行数)]となる。


入力

3

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15


サンプルコード

Row=int(input())

List=[[int(j) for j in input().split()] for i in range(Row)]
print(List)


実行結果

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]


整数を2次元リストに格納する場合、リスト名=[]でリストを用意し、for ダミー変数 in range(入力行数):でループ処理し、リスト名.append(list(map(int,input().split())))となる。


入力

3

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15


サンプルコード

Row=int(input())

List=[]
for i in range(Row):
List.append(list(map(int,input().split())))
print(List)


実行結果

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]



  • 整数と文字列を複数のリストに格納する

整数と文字列を複数のリストに格納する場合、リスト名=[]で複数のリストを用意し、for ダミー変数 in range(入力行数):でループ処理する。そのループ処理の中で変数名A,変数名B=input().split()で入力データを受け取り、リスト名.append(データ)でリストにデータを追加する。


入力

3

0 a
1 b
2 c


サンプルコード

Row=int(input())

Number=[]
Alphabet=[]
for i in range(Row):
n,a=input().split()
Number.append(int(n))
Alphabet.append(a)
print(Number)
print(Alphabet)


実行結果

[0, 1, 2]

['a', 'b', 'c']


1.3 四則演算

キーポイント


  • 各演算は下記表の演算子を使用する

  • 除法の結果(商)は 浮動小数点数(float)型 となる

  • 切り捨て除法の結果(商)は 整数(int)型 となる

演算子
記述例
意味

+
a+b
加法

-
a-b
減法

*
a*b
乗法

**
a**b
べき乗

/
a/b
除法

//
a//b
小数点切り捨て除法

%
a%b
剰余


加法

加法は+演算子を使用する。


  • 整数を足す


サンプルコード

print(1+2)



実行結果

3



  • 変数に格納する


サンプルコード

x=2+3

print(x)


実行結果

5



  • 変数で足す


サンプルコード

x=3

y=4
print(x+y)


実行結果

7



減法

減法は-演算子を使用する。


  • 整数を引く


サンプルコード

print(2-1)



実行結果

1



  • 変数に格納する


サンプルコード

x=4-2

print(x)


実行結果

2



  • 変数で引く


サンプルコード

x=3

y=6
print(x-y)


実行結果

-3


ABC001 A - 積雪深差


解答例

h1=int(input())

h2=int(input())
print(h1-h2)

ABC007 A - 植木算


解答例

n=int(input())

print(n-1)


乗法

乗法は*演算子を使用する。


  • 整数で掛ける


サンプルコード

print(3*2)



実行結果

6



  • 変数に格納する


サンプルコード

x=4*3

print(x)


実行結果

12



  • 変数で掛ける


サンプルコード

x=5

y=6
print(x*y)


実行結果

30


ABC004 A - 流行


解答例

n=int(input())

print(n*2)

ABC069 A - K-City


解答例

n,m=map(int,input().split())

print((n-1)*(m-1))

ABC106 A - Garden


解答例

a,b=map(int,input().split())

print(a*b-(a+b-1))

ABC121 A - White Cells


サンプルコード

H,W=map(int,input().split())

h,w=map(int,input().split())
print((H-h)*(W-w))


べき乗 / 指数

べき乗は**演算子を使う。演算は整数**指数となる。


  • 整数でべき乗する


サンプルコード

print(2**3)



実行結果

8



サンプルコード

print(10**9+7)



実行結果

1000000007



  • 変数に格納する


サンプルコード

x=3**2

print(x)


実行結果

9



  • 変数でべき乗する


サンプルコード

x=4

y=2
print(x**y)


実行結果

16


ARC036 A - 数え上げ


解答例

n=int(input())

print(10**n+7)

ABC074 A - Bichrome Cells


解答例

n=int(input())

a=int(input())
print(n**2-a)


べき根 / 平方根

べき根は**演算子を使い、整数**べき根となる。計算結果は 浮動小数点数 となる。


  • 整数で平方根を取る


サンプルコード

print(4**.5)



実行結果

2.0



サンプルコード

print(4**0.5)



実行結果

2.0



サンプルコード

print(4**(1/2))



実行結果

2.0



  • 変数に格納する


サンプルコード

x=9**.5

print(x)


実行結果

3.0



  • 変数で平方根を取る


サンプルコード

x=16

y=.5
print(x**y)


実行結果

4.0



階乗

階乗はimport mathでmathライブラリをインポートし、math.factorial(整数)となる。


サンプルコード

import math

print(math.factorial(5))


実行結果

120


ABC055 B - Training Camp


解答例

import math

n=int(input())
print(math.factorial(n)%(10**9+7))


除法

除法は/演算子を使用する。除法の結果(商)は 浮動小数点数(float)型 となる。


  • 整数で割る


サンプルコード

print(6/3)



実行結果

2.0



  • 変数に格納する


サンプルコード

x=9/3

print(x)


実行結果

3.0



  • 変数で割る


サンプルコード

x=12

y=3
print(x/y)


実行結果

4.0


ABC117 A - Entrance Examination


解答例

t,x=map(int,input().split())

print(t/x)


小数点切り捨て

小数点切り捨て除法は//演算子を使用する。除法の結果(商)は 整数(int)型 となる。


サンプルコード

print(5//3)



実行結果

1


ABC005 A - おいしいたこ焼きの作り方


解答例

x,y=map(int,input().split())

print(y//x)

ABC089 A - Grouping 2


解答例

n=int(input())

print(n//3)

ABC113 A - Discount Fare


解答例

x,y=map(int,input().split())

print(x+y//2)

ABC116 A - Right Triangle


解答例

a,b,c=map(int,input().split())

print(a*b//2)


小数点切り上げ

小数点切り上げ除法は//演算子を使用する。-(-割られる数//割る数)で小数点切り上げ除法となる。


サンプルコード

print(-(-5//3))



実行結果

2


ABC009 A - 引越し作業


解答例

n=int(input())

print(-(-n//2))

ABC036 A - お茶


解答例

a,b=map(int,input().split())

print(-(-b//a))

ABC082 A - Round Up the Mean


解答例

a,b=map(int,input().split())

print(-(-(a+b)//2))


剰余

剰余は%演算子を使用する。


サンプルコード

print(7%3)



実行結果

1


ABC011 A - 来月は何月?


解答例

n=int(input())

print(n%12+1)

ABC057 A - Remaining Time


解答例

a,b=map(int,input().split())

print((a+b)%24)

ABC087 A - Buying Sweets


解答例

x,a,b=[int(input()) for i in range(3)]

print((x-a)%b)

ABC041 B - 直方体


解答例

a,b,c=map(int,input().split())

print(a*b*c%(10**9+7))


1.4 比較演算

比較演算は下記の表の通りとなる。

演算子
記述例
意味

==
a==b
aがbと等しい

!=
a!=b
aがbと異なる

>
a>b
aがbより大きい

>=
a>=b
aがb以上

<
a<b
aがbより小さい

<=
a<=b
aがb以下

in
a in b
aがbに含まれる

not in
a not in b
aがbに含まれない


1.5 論理演算

論理演算は下記の表の通りとなる。

演算子
記述例
意味

and
a and b
aもbも真であれば真

or
a or b
aまたはbが真であれば真

not
not a
aが偽であれば真


1.6 条件文

キーポイント


  • 条件式はif/elif/else文を使用する

  • 特定の文字列、整数が含まれているか判定する場合はif/in文を使用する

  • 条件式を三項演算で記述する場合、print(条件式がTRUEの処理 if 条件式 else 条件式がFALSEの処理)となる

  • 2つの条件式を三項演算で記述する場合、print(条件式AがTRUEの処理 if 条件式A else 条件式AがFALSEかつ条件式BがTRUEの処理 if 条件式B else 条件式AがFALSEかつ条件式BがFALSEの処理)となる


基本文法


if/elif/else文

if/elif/else文はif 条件式:で条件文を書く。条件文がTRUEの場合、条件文の中の処理がされる。条件式が2つ以上ある場合、elif 条件式:で条件文を書く。どの条件式にも当てはまらない場合、else:文の処理がされる。


サンプルコード

a=1

if a==1:
print("a is 1")
elif a==2:
print("a is 2")
else:
print("a is not 1 and 2")


実行結果

a is 1



サンプルコード

a=2

if a==1:
print("a is 1")
elif a==2:
print("a is 2")
else:
print("a is not 1 and 2")


実行結果

a is 2



サンプルコード

a=3

if a==1:
print("a is 1")
elif a==2:
print("a is 2")
else:
print("a is not 1 and 2")


実行結果

a is not 1 and 2


ABC020 A - クイズ


解答例

q=int(input())

if q==1:
print("ABC")
else:
print("chokudai")

ABC028 A - テスト評価


解答例

n=int(input())

if n<60:
print("Bad")
elif n<90:
print("Good")
elif n<100:
print("Great")
else:
print("Perfect")

ARC002 A - うるう年


解答例

y=int(input())

if y%4==0 and y%100!=0 or y%400==0:
print("YES")
else:
print("NO")


if/in文

特定の文字列、整数が含まれているか判定する場合、if/in文を使用する。if 探すデータ in 探されるデータとなる。


サンプルコード

String="Hello world!"

if "e" in String:
print("e include")
else:
print("e don't include")


実行結果

e include



サンプルコード

String="Hello world!"

if "Hello" in String:
print("Hello include")
else:
print("Hello don't include")


実行結果

Hello include



サンプルコード

String="Hello world!"

if "Good" in String:
print("Good include")
else:
print("Good don't include")


実行結果

Good don't include



サンプルコード

List=["a","b","c"]

if "a" in List:
print("a include")
else:
print("a don't include")


実行結果

a include



サンプルコード

List=["a","b","c"]

if "ab" in List:
print("ab include")
else:
print("ab don't include")


実行結果

ab don't include



サンプルコード

List=[0,1,2]

if 1 in List:
print("1 include")
else:
print("1 don't include")


実行結果

1 include


ABC049 A - 居合を終え、青い絵を覆う / UOIAUAI


解答例

c=input()

if c in "aiueo":
print("vowel")
else:
print("consonant")

ABC073 A - September 9


解答例

n=input()

if "9" in n:
print("Yes")
else:
print("No")

ABC114 A - 753


解答例

x=input()

if x in "753":
print("YES")
else:
print("NO")


三項演算

ABC-A問題、ABC-B問題では簡易な条件式が多いため、三項演算を使うことが多い。


if/else文

条件式を三項演算で記述する場合、print(条件式がTRUEの処理 if 条件式 else 条件式がFALSEの処理)となる。


サンプルコード

a=1

print("a is 1" if a==1 else "a is not 1")


実行結果

a is 1



サンプルコード

a=2

print("a is 1" if a==1 else "a is not 1")


実行結果

a is not 1


2つの条件式を三項演算で記述する場合、print(条件式AがTRUEの処理 if 条件式A else 条件式AがFALSEかつ条件式BがTRUEの処理 if 条件式B else 条件式AがFALSEかつ条件式BがFALSEの処理)となる。


サンプルコード

a=3

print("a is 1" if a==1 else "a is 2" if a==2 else "a is 3" if a==3 else "other")


実行結果

a is 3



サンプルコード

a=4

print("a is 1" if a==1 else "a is 2" if a==2 else "a is 3" if a==3 else "other")


実行結果

other


ABC020 A - クイズ


解答例

q=int(input())

print("ABC" if q==1 else "chokudai")

ABC028 A - テスト評価


解答例

n=int(input())

print("Bad" if n<60 else "Good" if n<90 else "Great" if n<100 else "Perfect")

ABC034 A - テスト


解答例

x,y=map(int,input().split())

print("Better" if x<y else "Worse")

ABC053 A - ABC/ARC


解答例

x=int(input())

print("ABC" if x<1200 else "ARC")

ABC075 A - One out of Three


解答例

a,b,c=map(int,input().split())

print(a if b==c else b if a==c else c)

ABC083 A - Libra


解答例

a,b,c,d=map(int,input().split())

print("Left" if a+b>c+d else "Balanced" if a+b==c+d else "Right")

ABC091 A - Two Coins


解答例

a,b,c=map(int,input().split())

print("Yes" if a+b>=c else "No")

ABC094 A - Cats and Dogs


解答例

a,b,x=map(int,input().split())

print("YES" if a<=x and x<=a+b else "NO")

ABC096 A - Day of Takahashi


解答例

a,b=map(int,input().split())

print(a-1 if a>b else a)

ABC099 A - ABD


解答例

n=int(input())

print("ABC" if n<1000 else "ABD")

ABC104 A - Rated for Me


解答例

r=int(input())

print("ABC" if r<1200 else "ARC" if r<2800 else "AGC")

ABC122 A - Double Helix


解答例

b=input()

print("A" if b=="T" else "T" if b=="A" else "G" if b=="C" else "C")

ABC038 B - ディスプレイ


解答例

a,b=map(int,input().split())

c,d=map(int,input().split())
print("YES" if a==c or a==d or b==c or b==d else "NO")

ABC059 B - Comparison


解答例

a=int(input())

b=int(input())
print("GREATER" if a>b else "LESS" if a<b else "EQUAL")

ARC002 A - うるう年


解答例

y=int(input())

print("YES" if y%4==0 and y%100!=0 or y%400==0 else "NO")


if/in文

if/in文を三項演算で記述する場合、条件式を探すデータ in 探されるデータで書き、print(条件式がTRUEの処理 if 条件式 else 条件式がFALSEの処理)となる。


サンプルコード

String="Hello world!"

print("e include" if "e" in String else "e don't include")


実行結果

e include



サンプルコード

String="Hello world!"

print("Hello include" if "Hello" in String else "Hello don't include")


実行結果

Hello include



サンプルコード

String="Hello world!"

print("Good don't include" if "Good" not in String else "Good include")


実行結果

Good don't include



サンプルコード

List=["a","b","c"]

print("a include" if "a" in List else "a don't include")


実行結果

a include



サンプルコード

List=["a","b","c"]

print("ab include" if "ab" in List else "ab don't include")


実行結果

ab don't include



サンプルコード

List=[0,1,2]

print("1 include" if 0 in List else "1 don't include")


実行結果

1 include


ABC006 A - 世界のFizzBuzz


解答例

n=input()

print("YES" if n in "369" else "NO")

ABC049 A - 居合を終え、青い絵を覆う / UOIAUAI


解答例

c=input()

print("vowel" if c in "aiueo" else "consonant")

ABC073 A - September 9


解答例

n=input()

print("Yes" if "9" in n else "No")

ABC114 A - 753


解答例

x=input()

print("YES" if x in "753" else "NO")


複数条件式

条件式を複数組み合わせることができる。


サンプルコード

a=1

b=1
c=1
print("TRUE" if a==b==c else "FALSE")


実行結果

TRUE



サンプルコード

a=1

b=1
c=1
d=1
print("TRUE" if a==b==c==d else "FALSE")


実行結果

TRUE



サンプルコード

a=1

b=2
c=3
d=4
print("TRUE" if a<b<c<d else "FALSE")


実行結果

TRUE


ABC061 A - Between Two Integers


解答例

a,b,c=map(int,input().split())

print("Yes" if a<=c<=b else "No")

ABC079 A - Good Integer


解答例

a,b,c,d=input()

print("Yes" if a==b==c or b==c==d else "No")

ABC079 A - Good Integer


解答例

a,b,c,d=input()

print("Yes" if a==b==c or b==c==d else "No")

ABC094 A - Cats and Dogs


解答例

a,b,x=map(int,input().split())

print("YES" if a<=x<=a+b else "NO")


解答例

a,b,x=map(int,input().split())

print("YES" if 0<=x-a<=b else "NO")


1.7 繰り返し文

キーポイント


  • 繰り返しはfor文とwhlle文がある

  • for文はfor 変数 in range(初期値,終了値):となる、初期値を指定しない場合、0から始まる

  • while文はwhile 条件式:となる、条件式がTRUEの場合、繰り返しを続ける


for文

for文はfor 変数 in range(初期値,終了値):となる。初期値を指定しない場合、0から始まる。


サンプルコード

for i in range(5):

print(i)


実行結果

0

1
2
3
4


サンプルコード

for i in range(2,5):

print(i)


実行結果

2

3
4


while文

while文はwhile 条件式:となる。条件式がTRUEの場合、while文の中の処理を続ける。


サンプルコード

i=0

while i<5:
print(i)
i=i+1


実行結果

0

1
2
3
4


第2章 データ型

第2章ではデータ型について説明します。


2.1 整数(int)

キーポイント


  • 整数(int)型の宣言はint(データ)となる

  • 浮動小数点数型を整数型に変換した場合、小数点が切り落とされる


サンプルコード

print(int(2.9))



実行結果

2



サンプルコード

x=3.9

print(int(x))


実行結果

3


ABC039 B - エージェント高橋君


解答例

x=int(input())

print(int(x**.25))

ABC077 B - Around Square


解答例

n=int(input())

print(int(n**.5)**2)


2.2 文字列(str)

キーポイント


  • 文字列の定義は文字列をダブルクォーテーション"、またはシングルクォーテーション'で囲う

  • 文字列の結合は+演算子を使用する

  • 文字列の参照は文字列[参照番号]となる

  • 文字列の比較は、整数と同様に行える

  • 文字列の逆順は文字列[::-1]となる


文字列の定義

文字列の定義は文字列をダブルクォーテーション"、またはシングルクォーテーション'で囲う。


サンプルコード

print("Hello World!")



実行結果

Hello World!



サンプルコード

String="hoge"

print(String)


実行結果

hoge



文字列の結合

文字列の結合は+演算子を使用する。


サンプルコード

print("foo"+"bar")



実行結果

foobar



サンプルコード

a="Fizz"

b="Buzz"
print(a+b)


実行結果

FizzBuzz


ABC010 A - ハンドルネーム


解答例

s=input()

print(s+"pp")

ABC029 A - 複数形


解答例

w=input()

print(w+"s")

ABC068 A - ABCxxx


解答例

n=input()

print("ABC"+n)


文字列の参照

文字列の参照は文字列[参照番号]となる。


サンプルコード

String="abc"

print(String[0],String[1],String[2])


実行結果

a b c



サンプルコード

String="abc"

print(String[-1],String[-2],String[-3])


実行結果

c b a


ABC041 A - 添字


解答例

s=input()

i=int(input())
print(s[i-1])

ABC048 A - AtCoder *** Contest


解答例

s=input()

print("A"+s[8]+"C")

ABC090 A - Diagonal String


解答例

a=input()[0]

b=input()[1]
c=input()[2]
print(a+b+c)


文字列の比較

文字列の比較は、整数と同様に行える。


サンプルコード

a="Hello"

b="Hello"
print("TRUE" if a==b else "FALSE")


実行結果

TRUE



サンプルコード

a="a"

b="b"
print("a<b" if a<b else "a>b")


実行結果

a<b


ABC038 A - お茶


解答例

s=input()

print("YES" if s[-1]=="T" else "NO")

ABC056 A - HonestOrDishonest


解答例

a,b=input().split()

print("H" if a==b else "D")

ABC060 A - Shiritori


解答例

a,b,c=input().split()

print("YES" if a[-1]==b[0] and b[-1]==c[0] else "NO")

ABC070 A - Palindromic Number


解答例

n=input()

print("Yes" if n[0]==n[2] else "No")

ABC078 A - HEX


解答例

x,y=input().split()

print("<" if x<y else "=" if x==y else ">")

ABC079 A - Good Integer


解答例

n=input()

print("Yes" if n[0]==n[1]==n[2] or n[1]==n[2]==n[3] else "No")

ABC119 A - Still TBD


解答例

s=input()

print("Heisei" if s<="2019/04/30" else "TBD")


文字列の逆順

文字列の逆順は文字列[::-1]となる。


サンプルコード

String="abc"

print(String[::-1])


実行結果

cba


ABC070 A - Palindromic Number


解答例

n=input()

print("Yes" if n==n[::-1] else "No")

ABC077 A - Rotation


解答例

s=input()

t=input()
print("YES" if s==t[::-1] else "NO")


2.3 リスト(list)

キーポイント


  • 要素の追加はappendメソッドを使用する

  • 要素の追加はリスト名.append(データ)でリストの最後に追加される

  • 要素の探索はindexメソッドを使用する

  • 要素の探索はリスト名.index(データ)でリストの先頭から探索され、一番初めに見つかったインデックスを返却する

  • 要素の削除はpopメソッドを使用する

  • 要素の削除はリスト名.pop(要素番号)で要素番号の要素が削除される

  • 要素の削除で要素番号を指定しないリスト名.pop()とリストの最後の要素が削除される

  • 要素の出現回数はcountメソッドを使用する

  • 要素の出現回数はリスト名.count(データ)で出現回数が返却される

  • 要素のユニーク化はリストlist型から集合set型に変換することによって要素をユニークにできる

  • スライスはリスト名[最初のインデックス:最後のインデックス:ステップ数]となる


要素の追加

要素の追加はappendメソッドを使用する。リスト名.append(データ)でリストの最後に追加される。


サンプルコード

List=["a","b","c"]

List.append('d')
print(List)


実行結果

['a', 'b', 'c', 'd']



サンプルコード

List=[0,1,2]

List.append(3)
print(List)


実行結果

[0, 1, 2, 3]



要素の探索

要素の探索はindexメソッドを使用する。リスト名.index(データ)でリストの先頭から探索され、一番初めに見つかったインデックスを返却する。


サンプルコード

List=["a","b","c","d","e","f"]

print(List.index('c'))


実行結果

2



サンプルコード

List=["a","b","c","d","c","c"]

print(List.index('c'))


実行結果

2



サンプルコード

List=[1,2,3,4,5]

print(List.index(3))


実行結果

2


ABC013 A - A


解答例

s="ABCDE"

x=input()
print(s.index(x)+1)


要素の削除

要素の削除はpopメソッドを使用する。リスト名.pop(要素番号)で要素番号の要素が削除される。要素番号を指定しないリスト名.pop()と、リストの最後の要素が削除される。


サンプルコード

List=["a","b","c","d","e","f"]

print(List.pop(1))
print(List)


実行結果

b

['a', 'c', 'd', 'e', 'f']


サンプルコード

List=[1,2,3,4,5]

print(List.pop(3))
print(List)


実行結果

4

[1, 2, 3, 5]


サンプルコード

List=[1,2,3,4,5]

print(List.pop())
print(List)


実行結果

5

[1, 2, 3, 4]


要素の出現回数

要素の出現回数はcountメソッドを使用する。リスト名.count(データ)で出現回数が返却される。


サンプルコード

List=["a","b","b","c","c","c"]

print(List.count('c'))


実行結果

3



サンプルコード

List=["a","b","b","c","c","c"]

print(List.count('d'))


実行結果

0



サンプルコード

List=[1,2,3,4,3,5]

print(List.count(3))


実行結果

2


ABC042 A - 和風いろはちゃんイージー / Iroha and Haiku (ABC Edition)


解答例

n=input().split()

print("YES" if n.count("5")==2 and n.count("7")==1 else "NO")

ABC081 A - Placing Marbles


解答例

s=input()

print(s.count("1"))

ABC095 A - Something on It


解答例

s=input()

print(700+100*s.count("o"))

ABC101 A - Eating Symbols Easy


解答例

s=input()

print(s.count("+")-s.count("-"))


要素のユニーク化

要素のユニーク化はリストlist型から集合set型に変換することによって要素をユニークにできる。ただし、要素の順序性は保たれない。


サンプルコード

List=[1,2,3,2,1,3]

print(list(set(List)))


実行結果

[1, 2, 3]



サンプルコード

List=["b","a","c","a","b"]

print(list(set(List)))


実行結果

['b', 'c', 'a']



スライス

Pythonではリストの一部を切り出せるスライスという機能がある。スライスはリスト名[最初のインデックス:最後のインデックス:ステップ数]となる。


サンプルコード

List=["a","b","c","d","e"]

print(List[1:3])


実行結果

['b', 'c']



サンプルコード

List=["a","b","c","d","e"]

print(List[1:4:2])


実行結果

['b', 'd']



サンプルコード

List=["a","b","c","d","e"]

print(List[:3])


実行結果

['a', 'b', 'c']



サンプルコード

List=["a","b","c","d","e"]

print(List[3:])


実行結果

['d', 'e']


ABC085 A - Already 2018


解答例

s=input()

print("2018"+s[4:])

ABC072 B - OddString


解答例

s=input()

print(s[::2])


第3章 基本処理

第3章では基本処理(よく使われる関数とメソッド)について説明します。


3.1 長さ

キーポイント


  • 文字列とリストの長さを得る場合、len関数を使用する

  • 文字列とリストの長さを得る場合、len(データ)となる


文字列

文字列の長さを得る場合、len(変数名)となる。


サンプルコード

String="aiueo"

print(len(String))


実行結果

5


ABC069 B - i18n


解答例

s=input()

print(s[0]+str(len(s)-2)+s[-1])


リスト

リストの長さを得る場合、len(リスト名)となる。


サンプルコード

List=["a","b","c","a"]

print(len(List))


実行結果

4



サンプルコード

List=[0,1,2]

print(len(List))


実行結果

3


ABC063 B - Varied


解答例

s=input()

print("no" if len(s)-len(set(s)) else "yes")

ABC033 A - 暗証番号


解答例

n=input()

print("DIFFERENT" if len(set(n))!=1 else "SAME")

ABC046 A - AtCoDeerくんとペンキ / AtCoDeer and Paint Cans


解答例

c=list(input().split())

print(len(set(c)))

ABC093 A - abc of ABC


解答例

s=input()

print("Yes" if len(set(s))==3 else "No")


3.2 ソート

キーポイント


  • ソートをする場合、sorted関数を使用する

  • ソートは昇順で行われる

  • ソートを降順にする場合、sorted(データ)[::-1]となる


昇順

ソートをする場合、sorted関数を使用する。ソートは昇順で行われる。


サンプルコード

List=[2,1,3]

print(sorted(List))


実行結果

[1, 2, 3]


ABC047 A - キャンディーと2人の子供 / Fighting over Candies


解答例

a,b,c=sorted(map(int,input().split()))

print("Yes" if a+b==c else "No")

ABC066 A - ringring


解答例

a,b,c=sorted(map(int,input().split()))

print(a+b)

ABC103 A - Task Scheduling Problem


解答例

a,b,c=sorted(map(int,input().split()))

print(c-a)

ABC110 A - Maximize the Formula


解答例

A,B,C=sorted(map(int,input().split()))

print(10*C+B+A)

ABC064 B - Traveling AtCoDeer Problem


解答例

input()

l=sorted(map(int,input().split()))
print(l[-1]-l[0])

ABC082 B - Two Anagrams


解答例

print("Yes" if sorted(input())<sorted(input())[::-1] else "No")


ABC102 B - Maximum Difference


解答例

input()

a=sorted(map(int,input().split()))
print(a[-1]-a[0])


降順

ソートを降順にする場合、sorted(データ)[::-1]となる。


サンプルコード

List=[2,1,3]

print(sorted(List)[::-1])


実行結果

[3, 2, 1]


ABC018 A - 豆まき


解答例

l=[int(input()) for _ in range(3)]

s=sorted(l)[::-1]
for i in l:
print(s.index(i)+1)


3.3 最大値 / 最小値

キーポイント


  • 最大値を得る場合、max関数を使用する

  • 最小値を得る場合、min関数を使用する


最大値

最大値を得る場合、max関数を使用する。


  • 整数

整数の場合、max(整数A,整数B)となる。


サンプルコード

print(max(2,3))



実行結果

3



  • 変数

変数の場合、max(変数名A,変数名B,変数名C)となる。


サンプルコード

a=1

b=2
c=3
print(max(a,b,c))


実行結果

3



  • リスト

リストの場合、max(リスト名)となる。


サンプルコード

List=[2,4,6,8]

print(max(List))


実行結果

8


ABC037 A - 饅頭


解答例

a,b,c=map(int,input().split())

print(max(c//a,c//b))

ABC052 A - Two Rectangles


解答例

a,b,c,d=map(int,input().split())

print(max(a*b,c*d))

ABC098 A - Add Sub Mul


解答例

a,b=map(int,input().split())

print(max(a+b,a-b,a*b))

ABC124 A - Buttons


解答例

a,b=map(int,input().split())

print(max(2*a-1,2*b-1,a+b))


最小値

最小値を得る場合、min関数を使用する。


  • 整数

整数の場合、min(整数A,整数B)となる。


サンプルコード

print(min(2,3))



実行結果

2



  • 変数

変数の場合、min(変数名A,変数名B,変数名C)となる。


サンプルコード

a=3

b=4
c=5
print(min(a,b,c))


実行結果

3



  • リスト

リストの場合、min(リスト名)となる。


サンプルコード

List=[2,4,6,8]

print(min(List))


実行結果

2


ABC037 A - 饅頭


解答例

a,b,c=map(int,input().split())

print(c//min(a,b))

ABC040 A - 赤赤赤赤青


解答例

n,x=map(int,input().split())

print(min(x-1,n-x))

ABC066 A - ringring


解答例

a,b,c=map(int,input().split())

print(min(a+b,b+c,c+a))

ABC080 A - Parking


解答例

n,a,b=map(int,input().split())

print(min(n*a,b))

ABC092 A - Traveling Budget


解答例

a,b,c,d=[int(input()) for _ in range(4)]

print(min(a,b)+min(c,d))

ABC103 A - Task Scheduling Problem


解答例

A=list(map(int,input().split()))

print(max(A)-min(A))

ABC120 A - Favorite Sound


解答例

a,b,c=map(int,input().split())

print(min(c,b//a))

ABC064 B - Traveling AtCoDeer Problem


解答例

input()

a=list(map(int,input().split()))
print(max(a)-min(a))


3.4 合計値

キーポイント


  • 合計値を得る場合、sum関数を使用する

  • 合計値を得る場合、sum(データ)となる


サンプルコード

List=[1,2,3]

print(sum(List))


実行結果

6


ABC115 B - Christmas Eve Eve


解答例

n=int(input())

p=[int(input()) for i in range(n)]
print(sum(p)-max(p)//2)

ABC117 B - Polygon


解答例

input()

L=list(map(int,input().split()))
print("Yes" if sum(L)>2*max(L) else "No")

ABC066 A - ringring


解答例

l=list(map(int,input().split()))

print(sum(sorted(l)[:2]))


数字和

map関数を使用して、sum(map(int,整数の文字列データ))で数字和を求めることができる。


サンプルコード

x="1234"

print(sum(map(int,x)))


実行結果

10(=1+2+3+4)


ABC023 A - 加算王


解答例

x=input()

print(sum(map(int,x)))

ABC080 B - Harshad Number


解答例

n=input()

print("No" if int(n)%sum(map(int,n)) else "Yes")


3.5 絶対値

キーポイント


  • 絶対値を得る場合、abs関数を使用する

  • 絶対値を得る場合、abs(数値データ)となる


サンプルコード

print(abs(-1))



実行結果

1


ABC071 A - Meal Delivery


解答例

x,a,b=map(int,input().split())

print("A" if abs(a-x)<abs(b-x) else "B")

ABC097 A - Colorful Transceivers


解答例

a,b,c,d=map(int,input().split())

print("Yes" if abs(c-a)<=d or abs(b-a)<=d and abs(c-b)<=d else "No")


3.6 置換

キーポイント


  • 置換をする場合、replaceメソッドを使用する

  • 置換をする場合、文字列.replace("置換前文字列","置換後文字列")となる


サンプルコード

String="abcde"

print(String.replace("bc","xy"))


実行結果

axyde


ABC111 A - AtCoder Beginner Contest 999


解答例

n=input()

print(n.replace("1","x").replace("9","1").replace("x","9"))

ARC045 A - スペース高橋君


解答例

s=input()

print(s.replace("Left","<").replace("Right",">").replace("AtCoder","A"))


3.7 大文字小文字変換

キーポイント


  • 文字列を大文字に変換する場合、upperメソッドを使用する

  • 文字列を大文字に変換する場合、文字列.upper()となる

  • 文字列を小文字に変換する場合、lowerメソッドを使用する

  • 文字列を小文字に変換する場合、文字列.lower()となる


大文字変換

文字列を大文字に変換するのはupperメソッドを使用する。文字列.upper()となる。


サンプルコード

Text="this is a pen."

print(Text.upper())


実行結果

THIS IS A PEN.


ABC059 A - Three-letter acronym


解答例

for a in input().upper().split():print(a[0],end="")



解答例

a,b,c=input().split()

print((a[0]+b[0]+c[0]).upper())


小文字変換

文字列を小文字に変換するのはlowerメソッドを使用する。文字列.lower()となる。


サンプルコード

Text="THIS IS A PEN."

print(Text.lower())


実行結果

this is a pen.


ABC011 B - 名前の確認


解答例

s=input()

print(s[0].upper()+s[1:].lower())


付録


代入演算

代入演算は下記の表の通りとなる。

演算子
記述例
意味

+=
a+=b
a=a+b

-=
a-=b
a=a-b

*=
a*=b
a=a*b

**=
a**=b
a=a**b

/=
a/=b
a=a/b

//=
a//=b
a=a//b

%=
a%=b
a=a%b


サンプルコード

a,b=1,2

print(a,b)


実行結果

1 2



サンプルコード

a,b=1,2

a,b=b,a
print(a,b)


実行結果

2 1



演算子の優先順位

演算子の優先順位はPythonのドキュメントに記載されています。


データ型の確認をする

データ型の確認をする場合、type関数を使用する。


サンプルコード

x=10

print(x)
print(type(x))


実行結果

10

<class 'int'>


サンプルコード

x=20.5

print(x)
print(type(x))


実行結果

20.5

<class 'float'>


サンプルコード

x="Hello world!"

print(x)
print(type(x))


実行結果

Hello world!

<class 'str'>


サンプルコード

x=[1,2,3,4,5]

print(x)
print(type(x))


実行結果

[1, 2, 3, 4, 5]

<class 'list'>


サンプルコード

x=(1,2,3,4,5)

print(x)
print(type(x))


実行結果

(1, 2, 3, 4, 5)

<class 'tuple'>


サンプルコード

x={"one":1,"two":2,"three":3}

print(x)
print(type(x))


実行結果

{'one': 1, 'two': 2, 'three': 3}

<class 'dict'>


サンプルコード

x=set()

print(x)
print(type(x))


実行結果

set()

<class 'set'>


参考