はじめに
AtCoder では AtCoder Beginner Contest(ABC)が開催されており、ABC-A問題 は Python の実装方法を知っていれば解ける問題が多くあります。ABC-A問題を解けるようになるために、本記事では実装方法を整理しました。
本記事について
本記事について説明します。
目的
本記事の目的は下記です。
Python で ABC-A問題 を概ね解けるようになる。
注意事項
本記事の注意事項は下記の通りです。ご理解の程をよろしくお願い致します。
- 本記事は個人で作成した記事であり、AtCoder株式会社は作成に関与していません。
- ABC-A問題をすべて解けるようになる記事ではありません。
- 一部のマイナーバージョンで本記事とは異なる仕様があります。
- 体系的な Python を学習する記事ではありません。
構成
各章は下記の構成です。
章 | 章名 | 内容 |
---|---|---|
第1章 | 入出力処理 | 入出力処理を学べる |
第2章 | 演算 | 演算を学べる |
第3章 | 代入文 | 代入文を学べる |
第4章 | 制御構文 | 制御構文を学べる |
第5章 | 組み込み型 | 組み込み型を学べる |
第6章 | 組み込み関数 | 組み込み関数を学べる |
第7章 | 関数定義 | 関数定義を学べる |
- | 付録 | Python の学習を深める情報を学べる |
各節項は下記の構成です。
項目 | 内容 |
---|---|
サンプルコード | 問題から得られた知見と検証によって得られた知見を整理したコード |
入力 | サンプルコードの入力例 |
実行結果 | サンプルコードの実行結果 |
解答例 | AtCoder で AC になったコード |
バージョン / 言語
サンプルコードは Python の下記バージョンで動作することを確認しました。
Python 3.11.4
解答例は AtCoder の下記言語で AC になることを確認しました。
Python (CPython 3.11.4)
コーディングスタイル
本記事のコードは pycodestyle の下記バージョンでコーディングスタイルを確認しました。
pycodestyle 2.12.1
コードリポジトリ
本記事のコードは下記のリポジトリで公開しています。
参考
本記事は下記を参考にしました。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) - AtCoder
- C++入門 AtCoder Programming Guide for beginners (APG4b) - AtCoder
- AtCoderに登録したら解くべき精選過去問10問をPythonで解いてみた
- AtCoderの問題を分類しました
最後に
サービスを提供しているAtCoder株式会社と、交流している競技プログラマの方々に感謝を致します。
第1章 入出力処理
第1章では入出力処理について説明します。
1.1 出力
キーポイント
- 標準出力は
print
関数で出力する。 - 数値の出力は
print(数値)
で出力する。 - 変数の出力は
print(変数)
で出力する。 - 文字列の出力は
print("文字列")
で出力する。 - 文字列の出力/定義は文字列をダブルクォーテーション
"
、またはシングルクォーテーション'
で囲う。 - print関数の区切り文字は
print(出力データ, sep="区切り文字")
で指定する。 - print関数の区切り文字を指定しない場合
print(出力データ)
、区切り文字は 半角スペース となる。 - print関数の末尾文字は
print(出力データ, end="末尾文字")
で指定する。 - print関数の末尾文字を指定しない場合
print(出力データ)
、末尾文字は 改行 となる。
整数(int)
- 整数を出力する
整数を出力する場合、print(整数)
で出力する。
print(10)
10
- 整数を変数に格納して出力する
整数を変数に格納して出力する場合、変数 = 整数
で変数を定義し、print(変数)
で出力する。
x = 20
print(x)
20
浮動小数点数(float)
- 浮動小数点数を出力する
浮動小数点数を出力する場合、print(浮動小数点数)
で出力する。
print(2.9)
2.9
- 浮動小数点数を変数に格納して出力する
浮動小数点数を変数に格納して出力する場合、変数 = 浮動小数点数
で変数を定義し、print(変数)
で出力する。
x = 3.5
print(x)
3.5
文字列(str)
文字列の出力/定義は文字列をダブルクォーテーション"
、またはシングルクォーテーション'
で囲う。
- 文字列を出力する
文字列を出力する場合、print("文字列")
または print('文字列')
で出力する。
print("Hello World!")
Hello World!
- 文字列を変数に格納して出力する
文字列を変数に格納して出力する場合、変数 = "文字列"
で変数を定義し、print(変数)
で出力する。
x = "Hello World!"
print(x)
Hello World!
- 文字列を変数に格納し、変数のインデックスを指定して文字を出力する
文字列を変数に格納し、変数のインデックスを指定して文字を出力する場合、print(変数[インデックス])
で出力する。
x = "Hello World!"
print(x[0])
H
x = "Hello World!"
print(x[11])
!
リスト(list)
- 1次元リストを出力する
1次元リストを出力する場合、print(リスト)
で出力する。
x = [1, 2, 3, 4, 5]
print(x)
[1, 2, 3, 4, 5]
- 1次元リストの各要素を出力する
1次元リストの各要素を出力する場合、for 変数 in リスト:
でループ処理し、print(変数)
で出力する。
x = [1, 2, 3, 4, 5]
for i in x:
print(i)
1
2
3
4
5
- 1次元リストのインデックス指定して各要素を出力する
1次元リストのインデックス指定して各要素を出力する場合、for 変数 in range(リストの長さ):
でループ処理し、print(リスト[変数])
で出力する。
x = [1, 2, 3, 4, 5]
for i in range(5):
print(x[i])
1
2
3
4
5
- 2次元リストを出力する
2次元リストを出力する場合、print(リスト)
で出力する。
x = [[1, 2, 3], [4, 5, 6]]
print(x)
[[1, 2, 3], [4, 5, 6]]
- 2次元リストの各行を出力する
2次元リストの各行を出力する場合、for 1次元リスト in 2次元リスト:
でループ処理し、print(1次元リスト)
で出力する。
x = [[1, 2, 3], [4, 5, 6]]
for rows in x:
print(rows)
[1, 2, 3]
[4, 5, 6]
- 2次元リストの各要素を出力する
2次元リストの各要素を出力する場合、for 1次元リスト in 2次元リスト:
でループ処理し、さらにfor 変数 in 1次元リスト:
でネストし、print(変数)
で出力する。
x = [[1, 2, 3], [4, 5, 6]]
for rows in x:
for columns in rows:
print(columns)
1
2
3
4
5
6
- 2次元リストの各要素をインデックス指定して出力する
2次元リストの各要素をインデックス指定して出力する場合、for 変数A in range(2次元リストの長さ):
でループ処理し、さらにfor 変数B in range(1次元リストの長さ):
でネストし、print(リスト[変数A][変数B])
で出力する。
x = [[1, 2, 3], [4, 5, 6]]
for i in range(2):
for j in range(3):
print(x[i][j])
1
2
3
4
5
6
区切り文字の指定
print関数の区切り文字はprint(出力データ, sep="区切り文字")
で指定する。
- 区切り文字を指定しない
区切り文字を指定しない場合print(出力データ)
、区切り文字が 半角スペース
で出力される。
x = 1
y = 2
z = 3
print(x, y, z)
1 2 3
- カンマを指定する
カンマ,
を指定する場合、print(出力データ, sep=",")
で出力する。
x = 1
y = 2
z = 3
print(x, y, z, sep=",")
1,2,3
- 区切り文字なしを指定する
区切り文字なしを指定する場合、print(出力データ, sep="")
で出力する。
x = 1
y = 2
z = 3
print(x, y, z, sep="")
123
- 改行を指定する
改行\n
を指定する場合、print(出力データ, sep="\n")
で出力する。
x = 1
y = 2
z = 3
print(x, y, z, sep="\n")
1
2
3
末尾文字の指定
print関数の末尾文字はprint(出力データ, end="末尾文字")
で指定する。
- 末尾文字を指定しない
末尾文字を指定しない場合print(出力データ)
、末尾文字が 改行\n
で出力される。
print("x")
print("y")
print("z")
x
y
z
- 末尾文字なしを指定する
末尾文字なしを指定する場合、print(出力データ, end="")
で出力する。
print("x", end="")
print("y", end="")
print("z", end="")
xyz
- 半角スペースを指定する
半角スペース
を指定する場合、print(出力データ, end=" ")
で出力する。
print("x", end=" ")
print("y", end=" ")
print("z", end=" ")
x y z
アンパック
- アンパックを利用して文字を出力する
アンパック*
を利用して、文字列から各文字を半角スペース
で区切り、出力することができる。出力する場合、print(*文字列)
で出力する。
x = "ABC"
print(*x)
A B C
S = input()
print(*S)
- アンパックを利用して1次元リストの要素を出力する
アンパック*
を利用して、1次元リストの要素を出力することができる。出力する場合、print(*リスト)
で出力する。要素は半角スペース
で区切られる。
x = [1, 2, 3, 4, 5]
print(*x)
1 2 3 4 5
- アンパックの区切り文字としてカンマを指定する
アンパックの区切り文字としてカンマ,
を指定する場合、print(*出力データ, sep=",")
で出力する。
x = "ABC"
print(*x, sep=",")
A,B,C
x = [1, 2, 3, 4, 5]
print(*x, sep=",")
1,2,3,4,5
- アンパックの区切り文字として改行を指定する
アンパックの区切り文字として改行\n
を指定する場合、print(*出力データ, sep="\n")
で出力する。
x = "ABC"
print(*x, sep="\n")
A
B
C
x = [1, 2, 3, 4, 5]
print(*x, sep="\n")
1
2
3
4
5
1.2 コメントアウト
キーポイント
- 処理を実行しない場合やコメントを入れる場合などはコメントアウトを使用する。
- 1行のコメントアウトは
#
(シャープ1つ)を使用する。 - 複数行のコメントアウトは
"""
(ダブルクォーテーション3つ)または'''
(シングルクォーテーション3つ)を使用する。
1行
1行のコメントアウトは#
(シャープ1つ)を使用する。#
より後ろの処理は実行されなくなる。
print(10)
# print(20)
# print(30)
print(40) # 行の途中からでもコメントアウトを使用できる。
10
40
複数行
複数行のコメントアウトは"""
(ダブルクォーテーション3つ)または'''
(シングルクォーテーション3つ)を使用する。コメントアウトする処理を"""
または'''
で囲む。囲まれた処理は実行されなくなる。
print(10)
"""
print(20)
print(30)
print(40)
"""
print(50)
10
50
1.3 入力
キーポイント
- 標準入力は
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())
で格納する。
10
x = int(input())
print(x)
10
- 文字列を1つの変数に格納する
文字列を1つの変数に格納する場合、変数 = input()
で格納する。
Hello world!
x = input()
print(x)
Hello world!
- 文字列を複数の変数に格納する
文字列を複数の変数に格納する場合、変数A, 変数B, 変数C = input()
で格納する。
123
x, y, z = input() # 123を整数(int)型ではなく、文字列(str)型で変数に格納する
print(x, y, z)
1 2 3
abc
x, y, z = input()
print(x, y, z)
a b c
1行 / 複数列
- 整数を複数の変数に格納する
整数を複数の変数に格納する場合、変数A, 変数B = map(int, input().split())
で格納する。
1 2
x, y = map(int, input().split())
print(x)
print(y)
1
2
A, B = map(int, input().split())
print(B, A)
X, Y, Z = map(int, input().split())
print(Z, X, Y)
- 文字列を複数の変数に格納する
文字列を複数の変数に格納する場合、変数A, 変数B = input().split()
で格納する。
Hello world!
x, y = input().split()
print(x)
print(y)
Hello
world!
A, B = input().split()
print(B, A)
X, Y, Z = input().split()
print(Z, X, Y)
s1, s2, s3 = input().split(",")
print(s1, s2, s3)
ABC325 A - Takahashi san | 提出結果
S, T = input().split()
print(S, "san")
- 整数をリストに格納する
整数をリストに格納する場合、リスト = list(map(int, input().split()))
で格納する。
1 2 3 4 5
x = list(map(int, input().split()))
print(x)
[1, 2, 3, 4, 5]
- 文字列をリストに格納する
文字列をリストに格納する場合、リスト = input().split()
で格納する。
Hello world !
x = input().split()
print(x)
['Hello', 'world', '!']
複数行 / 1列
- 整数を複数の変数に格納する
整数を複数の変数に格納する場合、変数 = int(input())
を複数行で格納する。
1
2
x = int(input())
y = int(input())
print(x, y)
1 2
整数を複数の変数に格納する場合、変数A, 変数B = [int(input()) for 変数 in range(変数の数)]
で格納する。
1
2
x, y = [int(input()) for i in range(2)]
print(x, y)
1 2
- 整数をリストに格納する
整数をリストに格納する場合、リスト = [int(input()) for 変数 in range(変数の数)]
で格納する。
1
2
3
x = [int(input()) for i in range(3)]
print(x)
[1, 2, 3]
- 入力行数が指定され、整数をリストに格納する
入力行数(N = 3)が指定され、整数をリストに格納する場合、変数 = int(input())
で入力行数を格納し、リスト = [int(input()) for 変数 in range(変数)]
でリストに格納する。
3
1
2
3
N = int(input())
x = [int(input()) for i in range(N)]
print(x)
[1, 2, 3]
- 文字列をリストに格納する
文字列をリストに格納する場合、リスト = [input() for 変数 in range(変数の数)]
で格納する。
a
b
c
x = [input() for i in range(3)]
print(x)
['a', 'b', 'c']
- 入力行数が指定され、文字列をリストに格納する
入力行数(N = 3)が指定され、文字列をリストに格納する場合、変数 = int(input())
で入力行数を格納し、リスト = [input() for 変数 in range(変数)]
でリストに格納する。
3
a
b
c
N = int(input())
x = [input() for i in range(N)]
print(x)
['a', 'b', 'c']
複数行 / 複数列
- 整数をリストに格納する
整数をリストに格納する場合、リスト = [list(map(int, input().split())) for 変数 in range(入力行数)]
となる。
1 2 3
4 5 6
7 8 9
x = [list(map(int, input().split())) for i in range(3)]
print(x)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- 入力行数が指定され、整数をリストに格納する
入力行数(N = 3)が指定され、整数をリストに格納する場合、変数 = int(input())
で入力行数を格納し、リスト = [list(map(int, input().split())) for 変数 in range(変数)]
でリストに格納する。
3
1 2 3
4 5 6
7 8 9
N = int(input())
x = [list(map(int, input().split())) for i in range(N)]
print(x)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- 文字列をリストに格納する
文字列をリストに格納する場合、リスト = [input().split() for 変数 in range(入力行数)]
となる。
a b c
d e f
g h i
x = [input().split() for i in range(3)]
print(x)
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
- 入力行数が指定され、文字列をリストに格納する
入力行数(N = 3)が指定され、文字列をリストに格納する場合、変数 = int(input())
で入力行数を格納し、リスト = [input() for 変数 in range(変数)]
でリストに格納する。
3
a b c
d e f
g h i
N = int(input())
x = [input().split() for i in range(N)]
print(x)
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
第2章 演算
第2章では演算について説明します。
2.1 演算子の優先順位
演算子の優先順位は Python ドキュメントに記載されています。
2.2 算術演算
キーポイント
- 各演算は下記表の演算子を使用する。
- 「除算」の結果は 浮動小数点数 となる。
- 「切り捨て除算」の結果は 整数 となる。(整数除算)
演算子 | 記述例 | 意味 |
---|---|---|
+ | 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
H1 = int(input())
H2 = int(input())
print(H1-H2)
N, A, B = map(int, input().split())
print(N-A+B)
n = int(input())
print(n-1)
M = int(input())
print(48-M)
S, T = map(int, input().split())
print(T-S+1)
N, i = map(int, input().split())
print(N-i+1)
a, b, c = map(int, input().split())
print(21-(a+b+c))
ABC196 A - Difference Max | 提出結果
a, b = map(int, input().split())
c, d = map(int, input().split())
print(b-c)
N = int(input())
print(N-1)
乗算
乗算は*
演算子を使用する。
- 数値で掛ける
print(2*3)
6
- 変数に格納する
x = 3*4
print(x)
12
- 変数で掛ける
x = 5
y = 6
print(x*y)
30
ABC169 A - Multiplication 1 | 提出結果
A, B = map(int, input().split())
print(A*B)
N = int(input())
print(2*N)
a, b = map(int, input().split())
c, d = map(int, input().split())
print(a*d-b*c)
ABC269 A - Anyway Takahashi | 提出結果
a, b, c, d = map(int, input().split())
print((a+b)*(c-d))
print("Takahashi")
R = int(input())
print(2*3.14*R)
A, B, C = map(int, input().split())
print(2*(A*B+B*C+C*A))
ABC074 A - Bichrome Cells | 提出結果
N = int(input())
A = int(input())
print(N*N-A)
n, m = map(int, input().split())
print((n-1)*(m-1))
A, B = map(int, input().split())
print(A*B-(A+B-1))
H, W = map(int, input().split())
h, w = map(int, input().split())
print((H-h)*(W-w))
R = int(input())
G = int(input())
print(2*G-R)
A, B = map(int, input().split())
print((2*A+100)-B)
階乗
階乗はimport math
で math モジュールをインポートし、math.factorial(整数)
となる。
import math
print(math.factorial(5)) # 120 = 5*4*3*2*1
120
ABC273 A - A Recursive Function | 提出結果
import math
N = int(input())
print(math.factorial(N))
べき乗
べき乗は**
演算子を使用する。演算は底**指数
となる。
- 数値でべき乗する
print(2**3)
8
print(10**9+7)
1000000007
- 変数に格納する
x = 3**2
print(x)
9
- 変数でべき乗する
x = 4
y = 2
print(x**y)
16
N = int(input())
print(2**N)
A, B = map(int, input().split())
print(A**B)
ABC320 A - Leyland Number | 提出結果
A, B = map(int, input().split())
print(A**B+B**A)
a = int(input())
print(a+a**2+a**3)
r = int(input())
print(3*(r**2))
r = int(input())
print(r**2)
ABC221 A - Seismic magnitude scales | 提出結果
A, B = map(int, input().split())
print(32**(A-B))
N = int(input())
print(N**3)
べき根
べき根は**
演算子を使用し、底**指数
となる。計算結果は 浮動小数点数 となる。
- 数値でべき根を取る
print(9**(1/2))
3.0
print(9**0.5)
3.0
- 変数に格納する
x = 8**(1/3)
print(x)
2.0
- 変数でべき根を取る
x = 8
y = 1/3
print(x**y)
2.0
ABC239 A - Horizon | 提出結果 | 提出結果
H = int(input())
print((H*(12800000+H))**(1/2))
H = int(input())
print((H*(12800000+H))**0.5)
除算
除算は/
演算子を使用する。除算の結果は 浮動小数点数 となる。ゼロ除算はエラーとなる。
- 数値で割る
print(5/3)
1.6666666666666667
- 変数に格納する
x = 6/3
print(x)
2.0
- 変数で割る
x = 7
y = 3
print(x/y)
2.3333333333333335
- ゼロ除算はエラーとなる
print(1/0)
ZeroDivisionError: division by zero
ABC231 A - Water Pressure | 提出結果
D = int(input())
print(D/100)
ABC211 A - Blood Pressure | 提出結果
A, B = map(int, input().split())
print((A-B)/3+B)
ABC117 A - Entrance Examination | 提出結果
T, X = map(int, input().split())
print(T/X)
A, B = map(int, input().split())
print(A*B/100)
A, B = map(int, input().split())
print((1-B/A)*100)
切り捨て除算
切り捨て除算は//
演算子を使用する。切り捨て除算の結果は小さい方に丸め込まれ、整数 となる。
print(5/3)
print(5//3)
1.6666666666666667
1
print(6/3)
print(6//3)
2.0
2
print(7/3)
print(7//3)
2.3333333333333335
2
print(-5/3)
print(-5//3)
-1.6666666666666667
-2
print(-6/3)
print(-6//3)
-2.0
-2
print(-7/3)
print(-7//3)
-2.3333333333333335
-3
ABC116 A - Right Triangle | 提出結果
AB, BC, CA = map(int, input().split())
print(AB*BC//2)
a, b, h = [int(input()) for i in range(3)]
print((a+b)*h//2)
ABC113 A - Discount Fare | 提出結果
X, Y = map(int, input().split())
print(X+Y//2)
s1, e1 = map(int, input().split())
s2, e2 = map(int, input().split())
s3, e3 = map(int, input().split())
print((s1*e1+s2*e2+s3*e3)//10)
N = int(input())
print(N*800-N//15*200)
N = int(input())
print((N+99)//100)
N, W = map(int, input().split())
print(N//W)
ABC005 A - おいしいたこ焼きの作り方 | 提出結果
x, y = map(int, input().split())
print(y//x)
N = int(input())
print(N//3)
A, P = map(int, input().split())
print((3*A+P)//2)
ABC239 B - Integer Division | 提出結果
X = int(input())
print(X//10)
切り上げ除算
切り上げ除算はimport math
で math モジュールをインポートし、math.ceil(数値)
となる。切り上げ除算の結果は大きい方に丸め込まれる。
import math
print(5/3)
print(math.ceil(5/3))
1.6666666666666667
2
import math
print(6/3)
print(math.ceil(6/3))
2.0
2
import math
print(7/3)
print(math.ceil(7/3))
2.3333333333333335
3
import math
print(-5/3)
print(math.ceil(-5/3))
-1.6666666666666667
-1
import math
print(-6/3)
print(math.ceil(-6/3))
-2.0
-2
import math
print(-7/3)
print(math.ceil(-7/3))
-2.3333333333333335
-2
ABC082 A - Round Up the Mean | 提出結果
import math
a, b = map(int, input().split())
print(math.ceil((a+b)/2))
ABC157 A - Duplex Printing | 提出結果
import math
N = int(input())
print(math.ceil(N/2))
import math
N = int(input())
print(math.ceil(N/2))
import math
A, B = map(int, input().split())
print(math.ceil(B/A))
剰余
剰余は%
演算子を使用する。ゼロ剰余はエラーとなる。
print(6 % 3)
0
print(7 % 3)
1
print(8 % 3)
2
print(-6 % 3)
0
print(-7 % 3)
2
print(-8 % 3)
1
ゼロ剰余はエラーとなる。
print(1 % 0)
ZeroDivisionError: integer division or modulo by zero
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)
X = int(input())
print(100-(X % 100))
R = int(input())
print(100-(R % 100))
N, K, A = map(int, input().split())
print(((A+K-2) % N)+1)
A, B, C = map(int, input().split())
print((A*B*C) % (10**9+7))
ABC266 B - Modulo Number | 提出結果
N = int(input())
print(N % 998244353)
2.3 論理演算
論理演算は下記の表の通りとなる。
演算子 | 記述例 | 意味 |
---|---|---|
and | a and b | a と b が真であれば真 |
or | a or b | a または b が真であれば真 |
not | not a | a が偽であれば真 |
print(True and True)
True
print(True and False)
False
print(False and False)
False
print(True or True)
True
print(True or False)
True
print(False or False)
False
print(not True)
False
print(not False)
True
2.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 以下 |
数値
print(10 == 10)
True
print(10 == 20)
False
print(10 != 20)
True
print(10 != 10)
False
print(20 > 10)
True
print(10 > 20)
False
print(10 >= 10)
True
print(10 >= 20)
False
print(10 < 20)
True
print(20 < 10)
False
print(10 <= 10)
True
print(20 <= 10)
False
文字列
print("a" == "a")
True
print("a" == "b")
False
print("a" != "b")
True
print("a" != "a")
False
print("b" > "a")
True
print("a" > "b")
False
print("a" >= "a")
True
print("a" >= "b")
False
print("a" < "b")
True
print("b" < "a")
False
print("a" <= "a")
True
print("b" <= "a")
False
2.5 所属検査演算(in演算)
所属検査演算(in演算)は下記の表の通りとなる。
演算子 | 記述例 | 意味 |
---|---|---|
in | a in b | a が b に含まれる |
not in | a not in b | a が b に含まれない |
文字列
部分文字列の所属を評価する。
print("a" in "abc")
True
print("z" in "abc")
False
print("ab" in "abc")
True
print("ac" in "abc")
False
print("abc" in "abc")
True
print("abcd" in "abc")
False
print("z" not in "abc")
True
リスト
要素の所属を評価する。
print("a" in ["a", "b", "c"])
True
print("z" in ["a", "b", "c"])
False
print("ab" in ["a", "b", "c"])
False
print("z" not in ["a", "b", "c"])
True
print(10 in [10, 20, 30])
True
print(90 not in [10, 20, 30])
True
集合
要素の所属を評価する。
print("a" in {"a", "b", "c"})
True
print("z" in {"a", "b", "c"})
False
print("ab" in {"a", "b", "c"})
False
print("z" not in {"a", "b", "c"})
True
print(10 in {10, 20, 30})
True
print(90 not in {10, 20, 30})
True
2.6 ビット演算
ビット演算は下記の表の通りとなる。
演算子 | 記述例 | 意味 |
---|---|---|
& | a & b | a と b のビット単位の論理積(AND) |
| | a | b | a と b のビット単位の論理和(OR) |
^ | a ^ b | a と b のビット単位の排他的論理和(XOR) |
論理積(AND)
ビット単位の論理積は&
を使用する。
print(1 & 1) # 1 = 0b0001 = 0b0001 & 0b0001
1
print(1 & 2) # 0 = 0b0000 = 0b0001 & 0b0010
0
print(2 & 3) # 2 = 0b0010 = 0b0010 & 0b0011
2
論理和(OR)
ビット単位の論理和は|
を使用する。
print(1 | 2) # 3 = 0b0011 = 0b0001 | 0b0010
3
print(1 | 2 | 4) # 7 = 0b0111 = 0b0001 | 0b0010 | 0b0100
7
print(1 | 2 | 4 | 8) # 15 = 0b1111 = 0b0001 | 0b0010 | 0b0100 | 0b1000
15
a, b = map(int, input().split())
print(a | b)
排他的論理和(XOR)
ビット単位の排他的論理和は^
を使用する。
print(1 ^ 1) # 0 = 0b0000 = 0b0001 ^ 0b0001
0
print(1 ^ 1 ^ 2) # 2 = 0b0010 = 0b0001 ^ 0b0001 ^ 0b0010
2
print(1 ^ 1 ^ 2 ^ 2) # 0 = 0b0000 = 0b0001 ^ 0b0001 ^ 0b0010 ^ 0b0010
0
print(1 ^ 2) # 3 = 0b0011 = 0b0001 ^ 0b0010
3
print(1 ^ 2 ^ 4) # 7 = 0b0111 = 0b0001 ^ 0b0010 ^ 0b0100
7
print(1 ^ 2 ^ 4 ^ 8) # 15 = 0b1111 = 0b0001 ^ 0b0010 ^ 0b0100 ^ 0b1000
15
ABC075 A - One out of Three | 提出結果
A, B, C = map(int, input().split())
print(A ^ B ^ C)
l1, l2, l3 = map(int, input().split())
print(l1 ^ l2 ^ l3)
x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
x3, y3 = map(int, input().split())
print(x1 ^ x2 ^ x3, y1 ^ y2 ^ y3)
A = int(input())
B = int(input())
print(A ^ B)
ABC213 A - Bitwise Exclusive Or | 提出結果
A, B = map(int, input().split())
print(A ^ B)
第3章 代入文
第3章では代入文について説明します。
3.1 代入文
代入文は下記の通りに記述することができる。
x, y = 1, 2
print(x, y)
1 2
x, y = 1, 2
x, y = y, x
print(x, y)
2 1
A, B = map(int, input().split())
A, B = B, A
print(A, B)
ABC161 A - ABC Swap | 提出結果 | 提出結果
X, Y, Z = map(int, input().split())
A, B, C = X, Y, Z
A, B = B, A
A, C = C, A
print(A, B, C)
X, Y, Z = map(int, input().split())
A, B, C = X, Y, Z
A, B, C = C, A, B
print(A, B, C)
3.2 累算代入文
累算代入文は下記の表の通りとなる。
演算子 | 記述例 | 等式 |
---|---|---|
+= | 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 |
x = 2
x += 1 # x = x+1
print(x)
3
x = 2
x -= 1 # x = x-1
print(x)
1
x = 2
x *= 3 # x = x*3
print(x)
6
x = 2
x **= 3 # x = x**3
print(x)
8
x = 6
x /= 3 # x = x/3
print(x)
2.0
x = 6
x //= 3 # x = x//3
print(x)
2
x = 5
x %= 3 # x = x % 3
print(x)
2
第4章 制御構文
第4章では制御構文について説明します。
4.1 分岐処理
キーポイント
- 分岐処理は「if文」を使用する。
- 特定の文字列、数値が含まれているかを評価する場合は
in
演算子を使用する。 - 条件式を複数組み合わせることができる。
if文
数値
x = 10
if x == 10:
print("x == 10")
if x == 20:
print("x == 20")
x == 10
x = 20
if x == 10:
print("x == 10")
if x == 20:
print("x == 20")
x == 20
Q = int(input())
if Q == 1:
print("ABC")
if Q == 2:
print("chokudai")
x = int(input())
if x == 0:
print(1)
if x == 1:
print(0)
ABC112 A - Programming Education | 提出結果
N = int(input())
if N == 1:
print("Hello World")
if N == 2:
A = int(input())
B = int(input())
print(A+B)
ABC204 A - Rock-paper-scissors | 提出結果
x, y = map(int, input().split())
if x == 0 and y == 0:
print(0)
if x == 0 and y == 1:
print(2)
if x == 0 and y == 2:
print(1)
if x == 1 and y == 0:
print(2)
if x == 1 and y == 1:
print(1)
if x == 1 and y == 2:
print(0)
if x == 2 and y == 0:
print(1)
if x == 2 and y == 1:
print(0)
if x == 2 and y == 2:
print(2)
ABC355 A - Who Ate the Cake? | 提出結果
A, B = map(int, input().split())
if A == B:
print(-1)
if A == 1 and B == 2:
print(3)
if A == 1 and B == 3:
print(2)
if A == 2 and B == 1:
print(3)
if A == 2 and B == 3:
print(1)
if A == 3 and B == 1:
print(2)
if A == 3 and B == 2:
print(1)
ABC250 A - Adjacent Squares | 提出結果 | 提出結果
H, W = map(int, input().split())
R, C = map(int, input().split())
count = 4
if C == 1:
count -= 1
if C == W:
count -= 1
if R == 1:
count -= 1
if R == H:
count -= 1
print(count)
H, W = map(int, input().split())
R, C = map(int, input().split())
count = 0
if C != 1:
count += 1
if C != W:
count += 1
if R != 1:
count += 1
if R != H:
count += 1
print(count)
文字列
x = "a"
if x == "a":
print("x == a")
if x == "b":
print("x == b")
x == a
x = "b"
if x == "a":
print("x == a")
if x == "b":
print("x == b")
x == b
S = input()
if S == "ABC":
print("ARC")
if S == "ARC":
print("ABC")
ABC122 A - Double Helix | 提出結果
b = input()
if b == "A":
print("T")
if b == "T":
print("A")
if b == "C":
print("G")
if b == "G":
print("C")
ABC056 A - HonestOrDishonest | 提出結果
a, b = input().split()
if a == "H" and b == "H":
print("H")
if a == "H" and b == "D":
print("D")
if a == "D" and b == "H":
print("D")
if a == "D" and b == "D":
print("H")
if文 / elif節 / else節
if文はif 条件式:
で条件文を書く。条件式がTrue
の場合、条件文の中の処理がされる。条件式を2つ以上記載する場合、elif 条件式:
で条件文を書く。どの条件式もTrue
でない場合、else:
の処理がされる。
数値
x = 10
if x == 10:
print("x == 10")
else:
print("else")
x == 10
x = 20
if x == 10:
print("x == 10")
else:
print("else")
else
x = 10
if x == 10:
print("x == 10")
elif x == 20:
print("x == 20")
else:
print("else")
x == 10
x = 20
if x == 10:
print("x == 10")
elif x == 20:
print("x == 20")
else:
print("else")
x == 20
x = 30
if x == 10:
print("x == 10")
elif x == 20:
print("x == 20")
else:
print("else")
else
x = 10
y = 20
if x < y:
print("x < y")
elif x == y:
print("x == y")
else:
print("else")
x < y
x = 20
y = 20
if x < y:
print("x < y")
elif x == y:
print("x == y")
else:
print("else")
x == y
x = 20
y = 10
if x < y:
print("x < y")
elif x == y:
print("x == y")
else:
print("else")
else
Q = int(input())
if Q == 1:
print("ABC")
else:
print("chokudai")
x = int(input())
if x == 0:
print(1)
else:
print(0)
x = int(input())
if x < 1200:
print("ABC")
else:
print("ARC")
N = int(input())
if N < 1000:
print("ABC")
else:
print("ABD")
ABC174 A - Air Conditioner | 提出結果
X = int(input())
if X >= 30:
print("Yes")
else:
print("No")
a = int(input())
s = input()
if a >= 3200:
print(s)
else:
print("red")
ABC112 A - Programming Education | 提出結果
N = int(input())
if N == 1:
print("Hello World")
else:
A = int(input())
B = int(input())
print(A+B)
ABC334 A - Christmas Present | 提出結果
B, G = map(int, input().split())
if B > G:
print("Bat")
else:
print("Glove")
x, y = map(int, input().split())
if x < y:
print("Better")
else:
print("Worse")
X, A = map(int, input().split())
if X < A:
print(0)
else:
print(10)
ABC164 A - Sheep and Wolves | 提出結果
S, W = map(int, input().split())
if W >= S:
print("unsafe")
else:
print("safe")
A, B = map(int, input().split())
if A+B < 10:
print(A+B)
else:
print("error")
A, B, C = map(int, input().split())
if A+B >= C:
print("Yes")
else:
print("No")
a, b, c = map(int, input().split())
if b-a == c-b:
print("YES")
else:
print("NO")
ABC150 A - 500 Yen Coins | 提出結果
K, X = map(int, input().split())
if 500*K >= X:
print("Yes")
else:
print("No")
ABC199 A - Square Inequality | 提出結果
A, B, C = map(int, input().split())
if A**2+B**2 < C**2:
print("Yes")
else:
print("No")
ABC177 A - Don't be late | 提出結果
D, T, S = map(int, input().split())
if D <= S*T:
print("Yes")
else:
print("No")
N, M = map(int, input().split())
if N == M:
print("Yes")
else:
print("No")
ABC100 A - Happy Birthday! | 提出結果
A, B = map(int, input().split())
if A <= 8 and B <= 8:
print("Yay!")
else:
print(":(")
ABC343 A - Wrong Answer | 提出結果
A, B = map(int, input().split())
if A+B == 0:
print(1)
else:
print(0)
ABC096 A - Day of Takahashi | 提出結果
a, b = map(int, input().split())
if a > b:
print(a-1)
else:
print(a)
ABC104 A - Rated for Me | 提出結果
R = int(input())
if R < 1200:
print("ABC")
elif R < 2800:
print("ARC")
else:
print("AGC")
N = int(input())
if N < 60:
print("Bad")
elif N < 90:
print("Good")
elif N < 100:
print("Great")
else:
print("Perfect")
ABC214 A - New Generation ABC | 提出結果
N = int(input())
if N <= 125:
print(4)
elif N <= 211:
print(6)
else:
print(8)
ABC219 A - AtCoder Quiz 2 | 提出結果
X = int(input())
if X < 40:
print(40-X)
elif X < 70:
print(70-X)
elif X < 90:
print(90-X)
else:
print("expert")
R = int(input())
if R < 100:
print(100-R)
elif R < 200:
print(200-R)
else:
print(300-R)
ABC127 A - Ferris Wheel | 提出結果
a, b = map(int, input().split())
if 12 < a:
print(b)
elif 5 < a:
print(b//2)
else:
print(0)
A, B = map(int, input().split())
if B == 0:
print("Gold")
elif A == 0:
print("Silver")
else:
print("Alloy")
A, B, C, D = map(int, input().split())
if B/A > D/C:
print("TAKAHASHI")
elif B/A < D/C:
print("AOKI")
else:
print("DRAW")
N, T, A = map(int, input().split())
if T > N/2 or A > N/2:
print("Yes")
else:
print("No")
A, B, C, D = map(int, input().split())
if A+B > C+D:
print("Left")
elif A+B == C+D:
print("Balanced")
else:
print("Right")
ABC370 A - Raise Both Hands | 提出結果
L, R = map(int, input().split())
if L == 1 and R == 0:
print("Yes")
elif L == 0 and R == 1:
print("No")
else:
print("Invalid")
X, A, B = map(int, input().split())
if X < B-A:
print("dangerous")
elif A < B:
print("safe")
else:
print("delicious")
A, B = map(int, input().split())
if A == B:
print(1)
elif (A-B) % 2 == 1:
print(2)
else:
print(3)
ABC190 A - Very Very Primitive Game | 提出結果
A, B, C = map(int, input().split())
if A < B:
print("Aoki")
elif A > B:
print("Takahashi")
elif C == 0:
print("Aoki")
else:
print("Takahashi")
ABC245 A - Good morning | 提出結果
A, B, C, D = map(int, input().split())
if A < C:
print("Takahashi")
elif A > C:
print("Aoki")
elif B <= D:
print("Takahashi")
else:
print("Aoki")
A, B, C, X = map(int, input().split())
if X <= A:
print(1)
elif X > B:
print(0)
else:
print(C/(B-A))
A, B = map(int, input().split())
if A+B >= 15 and B >= 8:
print(1)
elif A+B >= 10 and B >= 3:
print(2)
elif A+B >= 3:
print(3)
else:
print(4)
ABC075 A - One out of Three | 提出結果
A, B, C = map(int, input().split())
if A == B:
print(C)
elif B == C:
print(A)
elif C == A:
print(B)
ABC203 A - Chinchirorin | 提出結果
a, b, c = map(int, input().split())
if a == b:
print(c)
elif b == c:
print(a)
elif c == a:
print(b)
else:
print(0)
A, B = map(int, input().split())
if B-A+1 > 0:
print(B-A+1)
else:
print(0)
x = int(input())
if x > 0:
print(x)
else:
print(0)
X, t = map(int, input().split())
if X-t > 0:
print(X-t)
else:
print(0)
A, B = map(int, input().split())
if A-2*B > 0:
print(A-2*B)
else:
print(0)
A, B, C = map(int, input().split())
water = C-(A-B)
if water > 0:
print(water)
else:
print(0)
import math
X, Y = map(int, input().split())
if Y-X > 0:
print(math.ceil((Y-X)/10))
else:
print(0)
N, R = map(int, input().split())
if N >= 10:
print(R)
else:
print(R+100*(10-N))
A, B, C, K = map(int, input().split())
S, T = map(int, input().split())
if S+T < K:
print(A*S+B*T)
else:
print(A*S+B*T-(S+T)*C)
N, K, X, Y = [int(input()) for i in range(4)]
if N <= K:
print(N*X)
else:
print(K*X+(N-K)*Y)
N, A, X, Y = map(int, input().split())
if N < A:
print(N*X)
else:
print(A*X+(N-A)*Y)
ABC259 A - Growth Record | 提出結果
N, M, X, T, D = map(int, input().split())
if M >= X:
print(T)
else:
print(T-(X-M)*D)
ABC240 A - Edge Checker | 提出結果 | 提出結果
a, b = map(int, input().split())
if (a == b-1) or (a == 1 and b == 10):
print("Yes")
else:
print("No")
a, b = map(int, input().split())
if b-a == 1 or b-a == 9:
print("Yes")
else:
print("No")
ABC238 A - Exponential or Quadratic | 提出結果
n = int(input())
if n == 2 or n == 3 or n == 4:
print("No")
else:
print("Yes")
M, D = map(int, input().split())
y, m, d = map(int, input().split())
if d == D and m == M:
print(y+1, 1, 1)
elif d == D:
print(y, m+1, 1)
else:
print(y, m, d+1)
a, b = map(int, input().split())
if a*b % 2 == 0:
print("Even")
else:
print("Odd")
ABC102 A - Multiple of 2 and N | 提出結果
N = int(input())
if N % 2 == 0:
print(N)
else:
print(N*2)
A, B = map(int, input().split())
if (A+B) % 2 == 0:
print((A+B)//2)
else:
print("IMPOSSIBLE")
ABC181 A - Heavy Rotation | 提出結果
N = int(input())
if N % 2 == 0:
print("White")
else:
print("Black")
A, B = map(int, input().split())
if B % A == 0:
print(A+B)
else:
print(B-A)
ABC195 A - Health M Death | 提出結果
M, H = map(int, input().split())
if H % M == 0:
print("Yes")
else:
print("No")
M, D = map(int, input().split())
if M % D == 0:
print("YES")
else:
print("NO")
ABC088 A - Infinite Coins | 提出結果
N = int(input())
A = int(input())
if N % 500 <= A:
print("Yes")
else:
print("No")
W, H = map(int, input().split())
if W*H % 144 == 0:
print("16:9")
else:
print("4:3")
ABC105 A - AtCoder Crackers | 提出結果
N, K = map(int, input().split())
if N % K == 0:
print(0)
else:
print(1)
ABC142 A - Odds of Oddness | 提出結果
N = int(input())
if N % 2 == 0:
print(0.5)
else:
print(((N//2)+1)/N)
A, B = map(int, input().split())
if A % B == 0:
print(A//B)
else:
print(A//B+1)
ABC153 A - Serval vs Monster | 提出結果
H, A = map(int, input().split())
if H % A == 0:
print(H//A)
else:
print(H//A+1)
N, X, T = map(int, input().split())
if N % X == 0:
print(T*(N//X))
else:
print(T*(N//X+1))
ABC067 A - Sharing Cookies | 提出結果
A, B = map(int, input().split())
if A % 3 == 0 or B % 3 == 0 or (A+B) % 3 == 0:
print("Possible")
else:
print("Impossible")
Y = int(input())
if Y % 4 == 0:
print(Y+2)
elif Y % 4 == 1:
print(Y+1)
elif Y % 4 == 2:
print(Y)
else:
print(Y+3)
Y = int(input())
if Y % 4 != 0:
print(365)
elif Y % 4 == 0 and Y % 100 != 0:
print(366)
elif Y % 100 == 0 and Y % 400 != 0:
print(365)
elif Y % 400 == 0:
print(366)
ABC054 A - One Card Poker | 提出結果
A, B = map(int, input().split())
if A == B:
print("Draw")
elif (A+13) % 15 < (B+13) % 15:
print("Bob")
else:
print("Alice")
X = int(input())
if X % 100 == 0 and X != 0:
print("Yes")
else:
print("No")
N = int(input())
if N % 1000 == 0:
print(0)
else:
print(1000-(N % 1000))
X, Y, N = map(int, input().split())
if X < Y/3:
print(X*N)
else:
print(Y*(N//3)+X*(N % 3))
ABC367 A - Shout Everyday | 提出結果
A, B, C = map(int, input().split())
if (B < C and not B < A < C) or (C < B and C < A < B):
print("Yes")
else:
print("No")
ABC220 A - Find Multiple | 提出結果
A, B, C = map(int, input().split())
mod = B-(B % C)
if A <= mod:
print(mod)
else:
print(-1)
V, A, B, C = map(int, input().split())
V = V % (A+B+C)
if V-A < 0:
print("F")
elif V-(A+B) < 0:
print("M")
else:
print("T")
ABC014 A - けんしょう先生のお菓子配り | 提出結果
a = int(input())
b = int(input())
if a % b != 0:
print(b-(a % b))
else:
print(0)
文字列
x = "a"
if x == "a":
print("x == a")
else:
print("else")
x == a
x = "b"
if x == "a":
print("x == a")
else:
print("else")
else
x = "a"
if x == "a":
print("x == a")
elif x == "b":
print("x == b")
else:
print("else")
x == a
x = "b"
if x == "a":
print("x == a")
elif x == "b":
print("x == b")
else:
print("else")
x == b
x = "c"
if x == "a":
print("x == a")
elif x == "b":
print("x == b")
else:
print("else")
else
x = "a"
y = "b"
if x < y:
print("x < y")
elif x == y:
print("x == y")
else:
print("else")
x < y
x = "a"
y = "a"
if x < y:
print("x < y")
elif x == y:
print("x == y")
else:
print("else")
x == y
x = "b"
y = "a"
if x < y:
print("x < y")
elif x == y:
print("x == y")
else:
print("else")
else
ABC215 A - Your First Judge | 提出結果
S = input()
if S == "Hello,World!":
print("AC")
else:
print("WA")
S = input()
if S == "ARC":
print("ABC")
else:
print("ARC")
ABC122 A - Double Helix | 提出結果
b = input()
if b == "A":
print("T")
elif b == "T":
print("A")
elif b == "C":
print("G")
else:
print("C")
ABC358 A - Welcome to AtCoder Land | 提出結果 | 提出結果
S, T = input().split()
if S == "AtCoder" and T == "Land":
print("Yes")
else:
print("No")
ST = input()
if ST == "AtCoder Land":
print("Yes")
else:
print("No")
X, Y = input().split()
if X < Y:
print("<")
elif X == Y:
print("=")
else:
print(">")
ABC217 A - Lexicographic Order | 提出結果
S, T = input().split()
if S < T:
print("Yes")
else:
print("No")
S = input()
if S <= "2019/04/30":
print("Heisei")
else:
print("TBD")
ABC154 A - Remaining Balls | 提出結果
S, T = input().split()
A, B = map(int, input().split())
U = input()
if S == U:
print(A-1, B)
else:
print(A, B-1)
a, b, c, d, e, f = input()
if c == d and e == f:
print("Yes")
else:
print("No")
ABC070 A - Palindromic Number | 提出結果
a, b, c = input()
if a == c:
print("Yes")
else:
print("No")
AB, AC, BC = input().split()
if (AB == ">" and AC == "<") or (AC == ">" and AB == "<"):
print("A")
elif (AB == "<" and BC == "<") or (BC == ">" and AB == ">"):
print("B")
else:
print("C")
ABC056 A - HonestOrDishonest | 提出結果
a, b = input().split()
if a == "H" and b == "H":
print("H")
elif a == "H" and b == "D":
print("D")
elif a == "D" and b == "H":
print("D")
else:
print("H")
S1 = input()
S2 = input()
if (S1 == "#." and S2 == ".#") or (S1 == ".#" and S2 == "#."):
print("No")
else:
print("Yes")
if文 / in演算
文字列や要素の所属を評価する場合、in
演算子を使用する。if 探すデータ in 探されるデータ
となる。
文字列
if "a" in "abc":
print("a in abc")
else:
print("else")
a in abc
if "ab" in "abc":
print("ab in abc")
else:
print("else")
ab in abc
if "z" in "abc":
print("z in abc")
else:
print("else")
else
ABC049 A - 居合を終え、青い絵を覆う | 提出結果
c = input()
if c in "aiueo":
print("vowel")
else:
print("consonant")
X = input()
if X in "753":
print("YES")
else:
print("NO")
N = input()
if "7" in N:
print("Yes")
else:
print("No")
N = input()
if "9" in N:
print("Yes")
else:
print("No")
N = input()
if N in "369":
print("YES")
else:
print("NO")
ABC171 A - αlphabet | 提出結果 | 提出結果
a = input()
if a in "abcdefghijklmnopqrstuvwxyz":
print("a")
else:
print("A")
a = input()
if a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
print("A")
else:
print("a")
N = int(input())
S = input()
if "ab" in S or "ba" in S:
print("Yes")
else:
print("No")
ABC298 A - Job Interview | 提出結果
N = int(input())
S = input()
if "o" in S and "x" not in S:
print("Yes")
else:
print("No")
N = int(input())
S = input()
if "MM" in S or "FF" in S:
print("No")
else:
print("Yes")
ABC109 A - ABC333 | 提出結果 | 提出結果
A, B = input().split()
if "2" in A or "2" in B:
print("No")
else:
print("Yes")
AB = input()
if "2" in AB:
print("No")
else:
print("Yes")
リスト
if "a" in ["a", "b", "c"]:
print("a in list")
else:
print("else")
a in list
if "ab" in ["a", "b", "c"]:
print("ab in list")
else:
print("else")
else
if 10 in [10, 20, 30]:
print("10 in list")
else:
print("else")
10 in list
S = input()
if S in ["ACE", "BDF", "CEG", "DFA", "EGB", "FAC", "GBD"]:
print("Yes")
else:
print("No")
A, B = map(int, input().split())
X = [[1, 2], [2, 3], [4, 5], [5, 6], [7, 8], [8, 9]]
if [A, B] in X:
print("Yes")
else:
print("No")
ABC285 A - Edge Checker 2 | 提出結果
a, b = map(int, input().split())
graph = [[1, 2], [1, 3], [2, 4], [2, 5], [3, 6], [3, 7], [4, 8],
[4, 9], [5, 10], [5, 11], [6, 12], [6, 13], [7, 14], [7, 15]]
if [a, b] in graph:
print("Yes")
else:
print("No")
集合
if "a" in {"a", "b", "c"}:
print("a in set")
else:
print("else")
a in set
if "ab" in {"a", "b", "c"}:
print("ab in set")
else:
print("else")
else
if 10 in {10, 20, 30}:
print("10 in set")
else:
print("else")
10 in set
A, B = map(int, input().split())
X = {(1, 2), (2, 3), (4, 5), (5, 6), (7, 8), (8, 9)}
if (A, B) in X:
print("Yes")
else:
print("No")
ABC285 A - Edge Checker 2 | 提出結果
a, b = map(int, input().split())
graph = {(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (3, 7), (4, 8),
(4, 9), (5, 10), (5, 11), (6, 12), (6, 13), (7, 14), (7, 15)}
if (a, b) in graph:
print("Yes")
else:
print("No")
複数条件式
条件式を複数組み合わせることができる。
数値
x = 10
y = 10
z = 10
if x == y == z:
print("x == y == z")
else:
print("else")
x == y == z
x = 10
y = 20
z = 30
if x < y < z:
print("x < y < z")
else:
print("else")
x < y < z
ABC061 A - Between Two Integers | 提出結果
A, B, C = map(int, input().split())
if A <= C <= B:
print("Yes")
else:
print("No")
ABC237 A - Not Overflow | 提出結果
N = int(input())
if -2**31 <= N < 2**31:
print("Yes")
else:
print("No")
X, Y = map(int, input().split())
if -3 <= Y-X <= 2:
print("Yes")
else:
print("No")
a, b, c = map(int, input().split())
if a <= b <= c or c <= b <= a:
print("Yes")
else:
print("No")
ABC352 A - AtCoder Line | 提出結果
N, X, Y, Z = map(int, input().split())
if X < Z < Y or X > Z > Y:
print("Yes")
else:
print("No")
ABC219 A - AtCoder Quiz 2 | 提出結果
X = int(input())
if 0 <= X < 40:
print(40-X)
elif 40 <= X < 70:
print(70-X)
elif 70 <= X < 90:
print(90-X)
else:
print("expert")
ABC079 A - Good Integer | 提出結果
a, b, c, d = map(int, input())
if a == b == c or b == c == d:
print("Yes")
else:
print("No")
a, b, c, d = map(int, input())
if a != b != c != d:
print("Good")
else:
print("Bad")
ABC208 A - Rolling Dice | 提出結果
A, B = map(int, input().split())
if A <= B <= 6*A:
print("Yes")
else:
print("No")
A, B = map(int, input().split())
if 1 <= A <= 9 and 1 <= B <= 9:
print(A*B)
else:
print(-1)
ABC191 A - Vanishing Pitch | 提出結果
V, T, S, D = map(int, input().split())
if V*T <= D <= V*S:
print("No")
else:
print("Yes")
ABC094 A - Cats and Dogs | 提出結果 | 提出結果
A, B, X = map(int, input().split())
if A <= X <= A+B:
print("YES")
else:
print("NO")
A, B, X = map(int, input().split())
if 0 <= X-A <= B:
print("YES")
else:
print("NO")
S, T, X = map(int, input().split())
if S < T:
if S <= X < T:
print("Yes")
else:
print("No")
else:
if X < T or S <= X:
print("Yes")
else:
print("No")
ABC238 A - Exponential or Quadratic | 提出結果
n = int(input())
if 2 <= n <= 4:
print("No")
else:
print("Yes")
文字列
x = "abc"
y = "abc"
z = "abc"
if x == y == z:
print("x == y == z")
else:
print("else")
x == y == z
x = "a"
y = "b"
z = "c"
if x < y < z:
print("x < y < z")
else:
print("else")
x < y < z
a, b, c = input()
if a == b == c:
print("Won")
else:
print("Lost")
ABC079 A - Good Integer | 提出結果
a, b, c, d = input()
if a == b == c or b == c == d:
print("Yes")
else:
print("No")
S = input()
if "ABC001" <= S <= "ABC349" and S != "ABC316":
print("Yes")
else:
print("No")
a, b, c, d = input()
if a != b != c != d:
print("Good")
else:
print("Bad")
4.2 反復処理
キーポイント
- 反復処理は「for文」と「while文」がある。
-
in
演算を使った「for文」はfor 変数 in リスト:
となる。 - range関数を使った「for文」は
for 変数 in range(初期値, 終了値):
となる。初期値を指定しない場合、変数は 0 から始まる。 - 「for文」で
else
節を使用することができる。 - 「while文」は
while 条件式:
となる。条件式がTrue
の場合、while文の中の処理を続ける。
for文 / in演算
リスト
in
演算を使ったfor文はfor 変数 in リスト:
となる。
x = [1, 2, 3]
for i in x:
print(i)
1
2
3
x = ["a", "b", "c"]
for i in x:
print(i)
a
b
c
N = int(input())
A = list(map(int, input().split()))
total = 0
for a in A:
total += a
print(total)
abc = list(map(int, input().split()))
total = 0
for dice in abc:
total += 7-dice
print(total)
A = list(map(int, input().split()))
total = 0
for a in A:
total += a
if total >= 22:
print("bust")
else:
print("win")
ABC330 A - Counting Passes | 提出結果
N, L = map(int, input().split())
A = list(map(int, input().split()))
count = 0
for a in A:
if a >= L:
count += 1
print(count)
ABC328 A - Not Too Hard | 提出結果
N, X = map(int, input().split())
S = list(map(int, input().split()))
total = 0
for s in S:
if s <= X:
total += s
print(total)
ABC300 A - N-choice question | 提出結果
N, A, B = map(int, input().split())
C = list(map(int, input().split()))
idx = 1
for c in C:
if A+B == c:
print(idx)
else:
idx += 1
N = int(input())
A = list(map(int, input().split()))
for a in A:
if a % 2 == 0:
print(a, end=" ")
N, K = map(int, input().split())
A = list(map(int, input().split()))
for a in A:
if a % K == 0:
print(a//K, end=" ")
文字列
x = "abc"
for i in x:
print(i)
a
b
c
x = "012"
for i in x:
print(i)
0
1
2
S = input()
for s in S:
print(s, end=" ")
S = input()
count = 0
for s in S:
if s == "v":
count += 1
if s == "w":
count += 2
print(count)
for文 / range関数
range関数を使った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
for i in range(2, 5, 2):
print(i)
2
4
for i in range(3, -1, -1):
print(i)
3
2
1
0
ABC288 A - Many A+B Problems | 提出結果
N = int(input())
for i in range(N):
A, B = map(int, input().split())
print(A+B)
S, T = map(int, input().split())
picture = 0
for i in range(S, T+1):
picture += 1
print(picture)
ABC043 A - キャンディーとN人の子供イージー | 提出結果
N = int(input())
candy = 0
for i in range(1, N+1):
candy += i
print(candy)
ABC281 A - Count Down | 提出結果 | 提出結果
N = int(input())
for i in range(N+1):
print(N-i)
N = int(input())
for i in range(N, -1, -1):
print(i)
ABC340 A - Arithmetic Progression | 提出結果
A, B, D = map(int, input().split())
for i in range(A, B+1, D):
print(i, end=" ")
N = int(input())
print(N)
for i in range(N):
print(1)
ABC332 A - Online Shopping | 提出結果
N, S, K = map(int, input().split())
total = 0
for i in range(N):
P, Q = map(int, input().split())
total += P*Q
if total >= S:
print(total)
else:
print(total+K)
N = int(input())
takahashi, aoki = 0, 0
for i in range(N):
X, Y = map(int, input().split())
takahashi += X
aoki += Y
if takahashi > aoki:
print("Takahashi")
elif takahashi < aoki:
print("Aoki")
else:
print("Draw")
ABC300 A - N-choice question | 提出結果
N, A, B = map(int, input().split())
C = list(map(int, input().split()))
for i in range(N):
if A+B == C[i]:
print(i+1)
N, X = map(int, input().split())
P = list(map(int, input().split()))
for i in range(N):
if P[i] == X:
print(i+1)
N, H, X = map(int, input().split())
P = list(map(int, input().split()))
for i in range(N):
if H+P[i] >= X:
print(i+1)
break
N, M, P = map(int, input().split())
count = 0
for i in range(N):
if M <= N:
count += 1
M += P
print(count)
ABC357 A - Sanitize Hands | 提出結果
N, M = map(int, input().split())
H = list(map(int, input().split()))
count = 0
for i in range(N):
M -= H[i]
if M < 0:
break
else:
count += 1
print(count)
N, S, T = map(int, input().split())
W = int(input())
day = 0
if S <= W <= T:
day += 1
for i in range(N-1):
A = int(input())
W += A
if S <= W <= T:
day += 1
print(day)
N = int(input())
salary = 0
for i in range(1, N+1):
salary += i*10000*(1/N)
print(salary)
A, B, C, D, E, F, X = map(int, input().split())
takahashi = 0
aoki = 0
for i in range(X):
if i % (A+C) < A:
takahashi += B
if i % (D+F) < D:
aoki += E
if takahashi > aoki:
print("Takahashi")
elif takahashi < aoki:
print("Aoki")
else:
print("Draw")
for文 / else節
for文でelse
節を使用することができる。for文で反復処理をbreak
せずに終了した場合、else
節が実行される。
x = False
for i in range(5):
if x:
print(True)
break
else:
print(False)
False
ABC220 A - Find Multiple | 提出結果
A, B, C = map(int, input().split())
for i in range(A, B+1):
if i % C == 0:
print(i)
break
else:
print(-1)
ABC165 A - We Love Golf | 提出結果
K = int(input())
A, B = map(int, input().split())
for i in range(A, B+1):
if i % K == 0:
print("OK")
break
else:
print("NG")
ABC295 A - Probably English | 提出結果
N = int(input())
W = input().split()
S = {"and", "not", "that", "the", "you"}
for w in W:
if w in S:
print("Yes")
break
else:
print("No")
ABC296 A - Alternately | 提出結果 | 提出結果
N = int(input())
S = input()
for i in range(N-1):
if S[i] != S[i+1]:
continue
else:
print("No")
break
else:
print("Yes")
N = int(input())
S = input()
for i in range(N-1):
if S[i] == S[i+1]:
print("No")
break
else:
print("Yes")
ABC321 A - 321-like Checker | 提出結果 | 提出結果
N = input()
for i in range(len(N)-1):
if N[i] > N[i+1]:
continue
else:
print("No")
break
else:
print("Yes")
N = input()
for i in range(len(N)-1):
if N[i] <= N[i+1]:
print("No")
break
else:
print("Yes")
ABC323 A - Weak Beats | 提出結果 | 提出結果
S = input()
for i in range(1, 16, 2):
if S[i] == "0":
continue
else:
print("No")
break
else:
print("Yes")
S = input()
for i in range(1, 16, 2):
if S[i] != "0":
print("No")
break
else:
print("Yes")
while文
while文はwhile 条件式:
となる。条件式がTrue
の場合、while文の中の処理を続ける。
i = 0
while i < 5:
print(i)
i += 1
0
1
2
3
4
N = int(input())
while N >= 0:
print(N)
N -= 1
ABC340 A - Arithmetic Progression | 提出結果
A, B, D = map(int, input().split())
while A <= B:
print(A, end=" ")
A += D
N, M, P = map(int, input().split())
count = 0
while M <= N:
count += 1
M += P
print(count)
ABC354 A - Exponential Plant | 提出結果
H = int(input())
now = 0
day = 0
while now <= H:
now += 2**day
day += 1
print(day)
ABC032 A - 高橋君と青木君の好きな数 | 提出結果 | 提出結果
a, b, n = [int(input()) for i in range(3)]
while n % a != 0 or n % b != 0:
n += 1
print(n)
a, b, n = [int(input()) for i in range(3)]
while not (n % a == 0 and n % b == 0):
n += 1
print(n)
第5章 組み込み型
第5章では組み込み型について説明します。
5.1 整数(int)
整数への変換
整数への変換はint(数値)
で整数に変換される。
print(int(2.9))
2
print(int(3.0))
3
print(int(3.1))
3
x = -2.9
print(int(x))
-2
x = -3.0
print(int(x))
-3
x = -3.1
print(int(x))
-3
x = "10"
print(int(x))
10
x = "010"
print(int(x))
10
a, x, b = input()
print(int(a)*int(b))
ABC050 A - Addition and Subtraction Easy | 提出結果 | 提出結果
A, op, B = input().split()
A = int(A)
B = int(B)
if op == "+":
print(A+B)
if op == "-":
print(A-B)
A, op, B = input().split()
if op == "+":
print(int(A)+int(B))
if op == "-":
print(int(A)-int(B))
ABC125 A - Biscuit Generator | 提出結果
A, B, T = map(int, input().split())
print(int(B*((T+0.5)//A)))
N = int(input())
if int(1.08*N) < 206:
print("Yay!")
elif int(1.08*N) == 206:
print("so-so")
else:
print(":(")
X = int(input())
print(int(X**(1/4)))
5.2 浮動小数点数(float)
浮動小数点数への変換
浮動小数点数への変換はfloat(数値)
で浮動小数点数に変換される。
x = 10
print(float(x))
10.0
x = "10"
print(float(x))
10.0
ABC226 A - Round decimals | 提出結果
X = float(input())
print(int(X+0.5))
5.3 文字列(str)
キーポイント
- 文字列の定義は文字列をダブルクォーテーション
"
、またはシングルクォーテーション'
で囲う。 - 文字列への変換は
str(データ)
で文字列に変換される。 - 文字列の連結は
+
演算子を使用する。 - 文字列の繰り返しは
*
演算子を使用する。 - 文字列の参照は
文字列[インデックス]
となる。 - 文字列の探索は
index
メソッドを使用する。 - 文字列を前方から検索する場合は
find
メソッドを使用する。 - 文字列を後方から検索する場合は
rfind
メソッドを使用する。 - 文字列のカウントは
count
メソッドを使用する。 - 文字列のスライスは
文字列[開始のインデックス:終了のインデックス:ステップ数]
となる。 - 文字列の逆順は
文字列[::-1]
となる。 - 文字列の置換は
replace
メソッドを使用する。 - 文字列の大文字変換は
upper
メソッドを使用する。 - 文字列の小文字変換は
lower
メソッドを使用する。 - 文字列の大文字判定は
isupper
メソッドを使用する。 - 文字列の小文字判定は
islower
メソッドを使用する。 - 文字列のゼロ埋めは
zfill
メソッドを使用する。 - 文字列のフォーマットはフォーマット済み文字列リテラルを使用する。
文字列の定義
文字列の定義は文字列をダブルクォーテーション"
、またはシングルクォーテーション'
で囲う。
print("Hello World!")
Hello World!
x = "Hello World!"
print(x)
Hello World!
文字列への変換
文字列への変換はstr(データ)
で文字列に変換される。
x = 10
print(str(x))
10
ABC248 A - Lacked Number | 提出結果
S = input()
for i in range(10):
if str(i) not in S:
print(i)
break
文字列の連結
文字列の連結は+
演算子を使用する。
print("Hello"+"World")
HelloWorld
x = "Hello"
y = "World"
print(x+y)
HelloWorld
W = input()
print(W+"s")
S = input()
print(S+"pp")
N = input()
print("ABC"+N)
S, T = input().split()
print(T+S)
ABC325 A - Takahashi san | 提出結果
S, T = input().split()
print(S+" san")
a, b, c = input().split("|")
print(a+c)
ABC216 A - Signed Difficulty | 提出結果
X, Y = input().split(".")
if 0 <= int(Y) <= 2:
print(X+"-")
if 3 <= int(Y) <= 6:
print(X)
if 7 <= int(Y) <= 9:
print(X+"+")
ABC230 A - AtCoder Quiz 3 | 提出結果
N = int(input())
if N <= 9:
print("AGC00"+str(N))
elif N <= 41:
print("AGC0"+str(N))
else:
print("AGC0"+str(N+1))
K = int(input())
if K < 60:
if K < 10:
print("21:0"+str(K))
else:
print("21:"+str(K))
else:
if K-60 < 10:
print("22:0"+str(K-60))
else:
print("22:"+str(K-60))
a, b, c = input()
abc = a+b+c
bca = b+c+a
cab = c+a+b
print(int(abc)+int(bca)+int(cab))
r, g, b = input().split()
if int(r+g+b) % 4 == 0:
print("YES")
else:
print("NO")
N = int(input())
S = input()
ans = ""
for s in S:
ans += s+s
print(ans)
S = input()
ans = ""
for s in S:
if s != ".":
ans += s
print(ans)
ABC348 A - Penalty Kick | 提出結果
N = int(input())
s = ""
for i in range(1, N+1):
if i % 3 == 0:
s += "x"
else:
s += "o"
print(s)
文字列の繰り返し
文字列の繰り返しは*
演算子を使用する。
print("HelloWorld!"*2)
HelloWorld!HelloWorld!
print("1"*5)
11111
N = int(input())
print("L"+"o"*N+"ng")
ABC341 A - Print 341 | 提出結果 | 提出結果
N = int(input())
print("1"+"01"*N)
N = int(input())
print("10"*N+"1")
ABC333 A - Three Threes | 提出結果 | 提出結果
N = input()
print(N*int(N))
N = int(input())
print(str(N)*N)
ABC115 A - Christmas Eve Eve Eve | 提出結果
D = int(input())
print("Christmas"+" Eve"*(25-D))
N = int(input())
S = input()
if S in "MF"*51:
print("Yes")
else:
print("No")
文字列の参照
文字列の参照は文字列[インデックス]
となる。範囲外の参照はIndexError
が返却される。
x = "abc"
print(x[0], x[1], x[2])
a b c
x = "abc"
print(x[-1], x[-2], x[-3])
c b a
x = "abc"
print(x[3])
IndexError: string index out of range
S = input()
print(int(S[0])*int(S[2]))
ABC048 A - AtCoder *** Contest | 提出結果
s = input()
print("A"+s[8]+"C")
ABC090 A - Diagonal String | 提出結果 | 提出結果
c1 = input()
c2 = input()
c3 = input()
print(c1[0]+c2[1]+c3[2])
c1 = input()[0]
c2 = input()[1]
c3 = input()[2]
print(c1+c2+c3)
s = input()
i = int(input())
print(s[i-1])
ABC218 A - Weather Forecast | 提出結果
N = int(input())
S = input()
if S[N-1] == "o":
print("Yes")
else:
print("No")
ABC244 A - Last Letter | 提出結果 | 提出結果
N = int(input())
S = input()
print(S[N-1])
N = int(input())
S = input()
print(S[-1])
S = input()
if S[-1] == "T":
print("YES")
else:
print("NO")
S = input()
if S[-1] != "s":
print(S+"s")
else:
print(S+"es")
A, B, C = input().split()
if A[-1] == B[0] and B[-1] == C[0]:
print("YES")
else:
print("NO")
C = input()
if C[0] == C[1] == C[2]:
print("Won")
else:
print("Lost")
N = input()
if N[0] == N[1] == N[2] == N[3]:
print("SAME")
else:
print("DIFFERENT")
S = input()
if S[2] == S[3] and S[4] == S[5]:
print("Yes")
else:
print("No")
ABC079 A - Good Integer | 提出結果
N = input()
if N[0] == N[1] == N[2] or N[1] == N[2] == N[3]:
print("Yes")
else:
print("No")
ABC131 A - Security | 提出結果 | 提出結果
S = input()
if S[0] != S[1] and S[1] != S[2] and S[2] != S[3]:
print("Good")
else:
print("Bad")
S = input()
if S[0] != S[1] != S[2] != S[3]:
print("Good")
else:
print("Bad")
ABC070 A - Palindromic Number | 提出結果
N = input()
if N[0] == N[2]:
print("Yes")
else:
print("No")
ABC226 A - Round decimals | 提出結果
a, b = input().split(".")
if int(b[0]) < 5:
print(int(a))
else:
print(int(a)+1)
S = input()
T = input()
count = 0
if S[0] == T[0]:
count += 1
if S[1] == T[1]:
count += 1
if S[2] == T[2]:
count += 1
print(count)
N = int(input())
S = input()
count = 0
for i in range(1, N-1):
if S[i-1] == "#" and S[i] == "." and S[i+1] == "#":
count += 1
print(count)
S = "XACABABAABABA"
x, y = map(int, input().split())
if S[x] == S[y]:
print("Yes")
else:
print("No")
S = input()
N = int(input())-1
print(S[N//5]+S[N % 5])
文字列の探索
文字列の探索はindex
メソッドを使用する。探索される文字列.index(探索する文字列)
で探索する。探索する文字列
が含まれる場合は最小のインデックスが返却され、探索する文字列
が含まれない場合はValueError
が返却される。
x = "abcdef"
print(x.index("c"))
2
x = "abcdcc"
print(x.index("c"))
2
x = "12345"
print(x.index("3"))
2
x = "abc"
print(x.index("z"))
ValueError: substring not found
ABC013 A - A | 提出結果 | 提出結果
X = input()
print("ABCDE".index(X)+1)
X = input()
print("0ABCDE".index(X))
ABC151 A - Next Alphabet | 提出結果
C = input()
letters = "abcdefghijklmnopqrstuvwxyz"
print(letters[letters.index(C)+1])
ABC360 A - A Healthy Breakfast | 提出結果
S = input()
if S.index("R") < S.index("M"):
print("Yes")
else:
print("No")
N = int(input())
S = input()
if "ABC" in S:
print(S.index("ABC")+1)
else:
print(-1)
文字列を前方から検索
文字列を前方から検索する場合はfind
メソッドを使用する。検索される文字列.find(検索する文字列)
で検索する。検索する文字列
が含まれる場合は最小のインデックスが返却され、検索する文字列
が含まれない場合は-1
が返却される。
x = "abcabc"
print(x.find("b"))
1
x = "abcabc"
print(x.find("z"))
-1
ABC013 A - A | 提出結果 | 提出結果
X = input()
print("ABCDE".find(X)+1)
X = input()
print("0ABCDE".find(X))
ABC151 A - Next Alphabet | 提出結果
C = input()
letters = "abcdefghijklmnopqrstuvwxyz"
print(letters[letters.find(C)+1])
ABC360 A - A Healthy Breakfast | 提出結果
S = input()
if S.find("R") < S.find("M"):
print("Yes")
else:
print("No")
N = int(input())
S = input()
if "ABC" in S:
print(S.find("ABC")+1)
else:
print(-1)
文字列を後方から検索
文字列を後方から検索する場合はrfind
メソッドを使用する。検索される文字列.rfind(検索する文字列)
で検索する。検索する文字列
が含まれる場合は最大のインデックスが返却され、検索する文字列
が含まれない場合は-1
が返却される。
x = "abcabc"
print(x.rfind("b"))
4
x = "abcabc"
print(x.rfind("z"))
-1
S = input()
idx = S.rfind("a")
if idx != -1:
print(idx+1)
else:
print(-1)
ABC299 A - Treasure Chest | 提出結果
N = int(input())
S = input()
if S.find("|") < S.find("*") < S.rfind("|"):
print("in")
else:
print("out")
文字列のカウント
文字列のカウントはcount
メソッドを使用する。カウントされる文字列.count(カウントする文字列)
でカウント数が返却される。
x = "abbccc"
print(x.count("c"))
3
x = "abbccc"
print(x.count("d"))
0
x = "123435"
print(x.count("3"))
2
ABC081 A - Placing Marbles | 提出結果
s = input()
print(s.count("1"))
S = input()
print(S.count("v")+2*S.count("w"))
ABC101 A - Eating Symbols Easy | 提出結果
S = input()
print(S.count("+")-S.count("-"))
ABC095 A - Something on It | 提出結果
S = input()
print(700+100*S.count("o"))
N = input()
if N.count("7") > 0:
print("Yes")
else:
print("No")
ABC175 A - Rainy Season | 提出結果
S = input()
if S.count("R") != 2:
print(S.count("R"))
elif S[1] == "R":
print(2)
else:
print(1)
ABC298 A - Job Interview | 提出結果
N = int(input())
S = input()
if S.count("o") >= 1 and S.count("x") == 0:
print("Yes")
else:
print("No")
ABC301 A - Overall Winner | 提出結果
N = int(input())
S = input()
T = S.count("T")
A = S.count("A")
if T > A:
print("T")
elif T < A:
print("A")
else:
if S[-1] == "A":
print("T")
else:
print("A")
ABC345 A - Leftrightarrow | 提出結果
S = input()
if S[0] == "<" and S.count("<") == 1 and S[-1] == ">" and S.count(">") == 1:
print("Yes")
else:
print("No")
ABC280 A - Pawn on a Grid | 提出結果
H, W = map(int, input().split())
S = [input() for i in range(H)]
ans = 0
for s in S:
ans += s.count("#")
print(ans)
文字列のスライス
文字列のスライスは文字列[開始のインデックス:終了のインデックス:ステップ数]
となる。
x = "012345"
print(x[1:4])
123
x = "012345"
print(x[1:4:2])
13
x = "012345"
print(x[:3])
012
x = "012345"
print(x[3:])
34
x = "012345"
print(x[:-1])
01234
x = "012345"
print(x[-1:])
5
x = "012345"
print(x[::2])
024
x = "012345"
print(x[1::2])
135
ABC254 A - Last Two Digits | 提出結果
N = input()
print(N[1:])
N = int(input())
pi = "3.1415926535897932384626433832795028841971693993751"\
"058209749445923078164062862089986280348253421170679"
print(pi[:N+2])
ABC085 A - Already 2018 | 提出結果
S = input()
print("2018"+S[4:])
S = input()
print("0"+S[:3])
ABC282 A - Generalized ABC | 提出結果
K = int(input())
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print(letters[:K])
ABC264 A - "atcoder".substr() | 提出結果
L, R = map(int, input().split())
print("atcoder"[L-1:R])
S = input()
print(S[:-1]+"4")
S = input()
print(S[1:]+S[0])
S = input()
a, b = map(int, input().split())
print(S[:a-1]+S[b-1]+S[a:b-1]+S[a-1]+S[b:])
S = input()
dot = S.rfind(".")
print(S[dot+1:])
ABC251 A - Six Characters | 提出結果
S = input()
print((S*6)[:6])
ABC348 A - Penalty Kick | 提出結果
N = int(input())
S = "oox"*34
print(S[:N])
ABC167 A - Registration | 提出結果
S = input()
T = input()
if S == T[:-1]:
print("Yes")
else:
print("No")
ABC374 A - Takahashi san 2 | 提出結果
S = input()
if S[-3:] == "san":
print("Yes")
else:
print("No")
S = input()
if S[-2:] == "er":
print("er")
else:
print("ist")
N = int(input())
S = input()
count = 0
for i in range(1, N-1):
if S[i-1:i+2] == "#.#":
count += 1
print(count)
s = input()
print(s[::2])
文字列の逆順
文字列の逆順は文字列[::-1]
となる。
x = "Hello World"
print(x[::-1])
dlroW olleH
ABC070 A - Palindromic Number | 提出結果
N = input()
if N == N[::-1]:
print("Yes")
else:
print("No")
c1 = input()
c2 = input()
if c1 == c2[::-1]:
print("YES")
else:
print("NO")
S = input()
ans = ""
for s in S[::-1]:
if s == ".":
break
else:
ans += s
print(ans[::-1])
文字列の置換
文字列の置換はreplace
メソッドを使用する。文字列.replace("置換前文字列","置換後文字列")
で置換する。
x = "abcabcabc"
print(x.replace("b", "p"))
apcapcapc
S = input()
print(S.replace(".", ""))
s = input()
print(s.replace("0", "x").replace("1", "0").replace("x", "1"))
ABC111 A - AtCoder Beginner Contest 999 | 提出結果
n = input()
print(n.replace("1", "x").replace("9", "1").replace("x", "9"))
S = input()
print(S.replace("a", "")
.replace("e", "")
.replace("i", "")
.replace("o", "")
.replace("u", ""))
ABC299 A - Treasure Chest | 提出結果
N = int(input())
S = input()
if S.replace(".", "") == "|*|":
print("in")
else:
print("out")
ABC303 A - Similar String | 提出結果
N = int(input())
S = input().replace("1", "l").replace("0", "o")
T = input().replace("1", "l").replace("0", "o")
if S == T:
print("Yes")
else:
print("No")
文字列の大文字/小文字変換
文字列の大文字変換はupper
メソッド、小文字変換はlower
メソッドを使用する。
x = "Hello World!"
print(x.upper())
HELLO WORLD!
x = "Hello World!"
print(x.lower())
hello world!
S = input()
T = S.upper()
print(T)
ABC059 A - Three-letter acronym | 提出結果 | 提出結果
s1, s2, s3 = input().split()
print((s1[0]+s2[0]+s3[0]).upper())
S = input().split()
for s in S:
print(s[0].upper(), end="")
ABC126 A - Changing a Character | 提出結果
N, K = map(int, input().split())
S = input()
print(S[:K-1]+S[K-1:K].lower()+S[K:])
ABC338 A - Capitalized? | 提出結果
S = input()
if S == S[0].upper()+S[1:].lower():
print("Yes")
else:
print("No")
文字列の大文字/小文字判定
文字列の大文字判定はisupper
メソッド、小文字判定はislower
メソッドを使用する。
x = "ABC"
print(x.isupper())
True
x = "abc"
print(x.islower())
True
S = input()
idx = 1
for s in S:
if s.isupper():
break
else:
idx += 1
print(idx)
文字列のゼロ埋め
文字列のゼロ埋めはzfill
メソッドを使用する。引数では0
で埋める桁数を指定する。
x = "12"
print(x.zfill(4))
0012
x = "12"
print("ABC"+x.zfill(3))
ABC012
x = "5"
print("12:"+x.zfill(2))
12:05
N = input()
print(N.zfill(4))
ABC230 A - AtCoder Quiz 3 | 提出結果
N = int(input())
if N < 42:
print("AGC"+str(N).zfill(3))
else:
print("AGC"+str(N+1).zfill(3))
文字列のフォーマット
文字列のフォーマットはフォーマット済み文字列リテラルを使用する。
ゼロ埋め
ゼロ埋めはf"{変数または式:0ゼロ埋めする桁数}"
で指定する。
x = 12
print(f"{x:04}")
0012
x = 12
print(f"ABC{x:03}")
ABC012
x = 5
print(f"12:{x:02}")
12:05
N = int(input())
print(f"{N:04}")
ABC230 A - AtCoder Quiz 3 | 提出結果
N = int(input())
if N < 42:
print(f"AGC{N:03}")
else:
print(f"AGC{N+1:03}")
小数点桁数
小数点桁数はf"{変数または式:.小数点桁数f}"
で指定する。
x = 1.23456
print(f"{x:.0f}")
print(f"{x:.1f}")
print(f"{x:.2f}")
print(f"{x:.3f}")
print(f"{x:.4f}")
1
1.2
1.23
1.235
1.2346
ABC274 A - Batting Average | 提出結果
A, B = map(int, input().split())
print(f"{B/A:.3f}")
進数
進数はf"{変数または式:進数の変換型}"
で指定する。進数の変換型は下記の表の通りとなる。
変換 | 意味 |
---|---|
b |
2進数 |
o |
8進数 |
d |
10進数 |
x |
16進数小文字 |
X |
16進数大文字 |
num = 10
print(f"bin(b):{num:b}")
print(f"oct(o):{num:o}")
print(f"dec(d):{num:d}")
print(f"hex(x):{num:x}")
print(f"HEX(X):{num:X}")
bin(b):1010
oct(o):12
dec(d):10
hex(x):a
HEX(X):A
N = int(input())
print(f"{N:02X}")
5.4 リスト(list)
キーポイント
- 要素の参照は
リスト[インデックス]
となる。 - 数値の要素に算術演算を使用することができる。
- 文字列の要素の連結は
+
演算子を使用する。 - リストの連結は
+
演算子を使用する。 - リストの繰り返しは
*
演算子を使用する。 - 要素の探索は
index
メソッドを使用する。 - 要素のカウントは
count
メソッドを使用する。 - 要素の追加は
append
メソッドを使用する。 - 要素の挿入は
insert
メソッドを使用する。 - 要素の取り出しは
pop
メソッドを使用する。 - 要素のユニーク化はリスト
list
型から集合set
型に変換することにより、要素がユニークとなる。ただし、要素の順序は保たれない。 - 要素のスライスは
リスト[開始のインデックス:終了のインデックス:ステップ数]
となる。
要素の参照
要素の参照はリスト[インデックス]
となる。範囲外の参照はIndexError
が返却される。
x = [1, 2, 3]
print(x[0], x[1], x[2])
1 2 3
x = [1, 2, 3]
print(x[-1], x[-2], x[-3])
3 2 1
x = ["a", "b", "c"]
print(x[0], x[1], x[2])
a b c
x = ["a", "b", "c"]
print(x[-1], x[-2], x[-3])
c b a
x = ["a", "b", "c"]
print(x[3])
IndexError: list index out of range
ABC255 A - You should output ARC, though this is ABC. | 提出結果
R, C = map(int, input().split())
A = [input().split() for i in range(2)]
print(A[R-1][C-1])
ABC241 A - Digit Machine | 提出結果 | 提出結果
a = list(map(int, input().split()))
print(a[a[a[0]]])
a = list(map(int, input().split()))
idx = 0
for i in range(2):
idx = a[idx]
print(a[idx])
S = input()
print(S.split(".")[-1])
ABC168 A - ∴ (Therefore) | 提出結果
N = input()
book = ["pon", "pon", "hon", "bon", "hon", "hon", "pon", "hon", "pon", "hon"]
print(book[int(N[-1])])
ABC284 A - Sequence of Strings | 提出結果 | 提出結果
N = int(input())
S = [input() for i in range(N)]
for i in range(N):
print(S[N-i-1])
N = int(input())
S = [input() for i in range(N)]
for i in range(N-1, -1, -1):
print(S[i])
N = int(input())
H = list(map(int, input().split()))
for i in range(1, N):
if H[0] < H[i]:
print(i+1)
break
else:
print(-1)
ABC364 A - Glutton Takahashi | 提出結果
N = int(input())
S = [input() for i in range(N)]
for i in range(N-2):
if S[i] == "sweet" and S[i+1] == "sweet":
print("No")
break
else:
print("Yes")
S = list(map(int, input().split()))
flag = True
for i in range(7):
if S[i] <= S[i+1]:
continue
else:
flag = False
for s in S:
if 100 <= s <= 675 and s % 25 == 0:
continue
else:
flag = False
print("Yes" if flag else "No")
要素の算術演算
- 数値の要素に算術演算を使用することができる。
x = [1, 2, 3]
print(x[0]+x[1])
3
x = [1, 2, 3]
print(x[-1]*x[-2])
6
ABC346 A - Adjacent Product | 提出結果
N = int(input())
A = list(map(int, input().split()))
for i in range(N-1):
print(A[i]*A[i+1], end=" ")
N = int(input())
A = list(map(int, input().split()))
total = 0
for i in range(N):
total += A[i]
print(total)
ABC290 A - Contest Result | 提出結果 | 提出結果
N, M = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
total = 0
for b in B:
total += A[b-1]
print(total)
N, M = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
total = 0
for i in range(M):
total += A[B[i]-1]
print(total)
ABC297 A - Double Click | 提出結果
N, D = map(int, input().split())
T = list(map(int, input().split()))
for i in range(N-1):
if T[i+1]-T[i] <= D:
print(T[i+1])
break
else:
print(-1)
要素の連結
- 文字列の要素の連結は
+
演算子を使用する。
x = ["Hello", "World", "!"]
print(x[0]+x[1])
HelloWorld
x = ["Hello", "World", "!"]
print(x[0]+x[-1])
Hello!
S = input().split("|")
print(S[0]+S[2])
リストの連結
- リストの連結は
+
演算子を使用する。
x = ["Hello"]
y = ["World"]
print(x+y)
['Hello', 'World']
x = [3, 4]
y = [1, 2, 3]
print(x+y)
[3, 4, 1, 2, 3]
リストの繰り返し
- リストの繰り返しは
*
演算子を使用する。
x = ["Hello", "World"]
print(x*2)
['Hello', 'World', 'Hello', 'World']
x = [1, 2, 3]
print(x*3)
[1, 2, 3, 1, 2, 3, 1, 2, 3]
要素の探索
要素の探索はindex
メソッドを使用する。探索されるリスト.index(探索する要素)
で探索する。探索する要素
が含まれる場合は最小のインデックスが返却され、探索する要素
が含まれない場合はValueError
が返却される。
x = [1, 2, 3, 4, 5]
print(x.index(3))
2
x = ["a", "b", "c", "d", "e", "f"]
print(x.index("c"))
2
x = ["a", "b", "c", "d", "c", "c"]
print(x.index("c"))
2
x = ["a", "b", "c"]
print(x.index("z"))
ValueError: 'z' is not in list
ABC013 A - A | 提出結果 | 提出結果
X = input()
print(["A", "B", "C", "D", "E"].index(X)+1)
X = input()
print(["0", "A", "B", "C", "D", "E"].index(X))
ABC170 A - Five Variables | 提出結果 | 提出結果
x = list(map(int, input().split()))
print(x.index(0)+1)
x = input().split()
print(x.index("0")+1)
ABC277 A - ^{-1} | 提出結果 | 提出結果
N, X = map(int, input().split())
P = list(map(int, input().split()))
print(P.index(X)+1)
N, X = input().split()
P = input().split()
print(P.index(X)+1)
ABC300 A - N-choice question | 提出結果
N, A, B = map(int, input().split())
C = list(map(int, input().split()))
print(C.index(A+B)+1)
ABC146 A - Can't Wait for Holiday | 提出結果 | 提出結果
S = input()
week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
print(7-week.index(S))
S = input()
week = ["0", "SAT", "FRI", "THU", "WED", "TUE", "MON", "SUN"]
print(week.index(S))
ABC267 A - Saturday | 提出結果 | 提出結果
S = input()
week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
print(5-week.index(S))
S = input()
week = ["0", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday"]
print(week.index(S))
ABC141 A - Weather Prediction | 提出結果 | 提出結果
S = input()
weather = ["Sunny", "Cloudy", "Rainy", "Sunny"]
print(weather[(weather.index(S)+1)])
S = input()
weather = ["Sunny", "Cloudy", "Rainy"]
print(weather[(weather.index(S)+1) % 3])
ABC275 A - Find Takahashi | 提出結果
N = int(input())
H = list(map(int, input().split()))
bridge = 0
for h in H:
if h > bridge:
bridge = h
print(H.index(bridge)+1)
要素のカウント
要素のカウントはcount
メソッドを使用する。カウントされるリスト.count(カウントする要素)
でカウント数が返却される。
x = [1, 2, 3, 4, 3, 5]
print(x.count(3))
2
x = ["a", "b", "b", "c", "c", "c"]
print(x.count("c"))
3
x = ["a", "b", "b", "c", "c", "c"]
print(x.count("d"))
0
ABC359 A - Count Takahashi | 提出結果
N = int(input())
S = [input() for i in range(N)]
print(S.count("Takahashi"))
ABC042 A - 和風いろはちゃんイージー | 提出結果 | 提出結果
ABC = list(map(int, input().split()))
if ABC.count(5) == 2 and ABC.count(7) == 1:
print("YES")
else:
print("NO")
ABC = input().split()
if ABC.count("5") == 2 and ABC.count("7") == 1:
print("YES")
else:
print("NO")
N = int(input())
S = [input() for i in range(N)]
if S.count("For") > N/2:
print("Yes")
else:
print("No")
要素の追加
要素の追加はappend
メソッドを使用する。リスト.append(要素)
でリストの最後に要素が追加される。
x = ["a", "b", "c"]
x.append("d")
print(x)
['a', 'b', 'c', 'd']
x = [0, 1, 2]
x.append(3)
print(x)
[0, 1, 2, 3]
要素の挿入
要素の挿入はinsert
メソッドを使用する。リスト.insert(挿入先のインデックス, 要素)
でリストに要素が挿入される。
x = ["a", "b", "c"]
x.insert(1, "z")
print(x)
['a', 'z', 'b', 'c']
N, K, X = map(int, input().split())
A = list(map(int, input().split()))
A.insert(K, X)
print(*A)
要素の取り出し
要素の取り出しはpop
メソッドを使用する。リスト.pop(インデックス)
でインデックスの要素が取り出される。インデックスを指定しない場合リスト.pop()
、リストの最後の要素が取り出される。
x = ["a", "b", "c"]
print(x.pop(0))
print(x)
a
['b', 'c']
x = [1, 2, 3]
print(x.pop(1))
print(x)
2
[1, 3]
x = [1, 2, 3]
print(x.pop())
print(x)
3
[1, 2]
x = [1, 2, 3]
print(x.pop(3))
print(x)
IndexError: pop index out of range
x = []
print(x.pop())
IndexError: pop from empty list
N, K = map(int, input().split())
A = list(map(int, input().split()))
for i in range(K):
A.pop(0)
A.append(0)
print(*A)
要素のユニーク化
要素のユニーク化はリストlist
型から集合set
型に変換することにより、要素がユニークとなる。ただし、要素の順序は保たれない。また、集合set
型からリストlist
型に変換することもできる。
x = [1, 2, 3, 2, 1, 3]
print(list(set(x)))
[1, 2, 3]
x = ["b", "a", "c", "a", "b"]
print(list(set(x)))
['b', 'c', 'a']
要素のスライス
要素のスライスはリスト[開始のインデックス:終了のインデックス:ステップ数]
となる。
x = ["0", "1", "2", "3", "4", "5"]
print(x[1:4])
['1', '2', '3']
x = ["0", "1", "2", "3", "4", "5"]
print(x[1:4:2])
['1', '3']
x = ["0", "1", "2", "3", "4", "5"]
print(x[:3])
['0', '1', '2']
x = ["0", "1", "2", "3", "4", "5"]
print(x[3:])
['3', '4', '5']
x = ["0", "1", "2", "3", "4", "5"]
print(x[:-1])
['0', '1', '2', '3', '4']
x = ["0", "1", "2", "3", "4", "5"]
print(x[-1:])
['5']
x = ["0", "1", "2", "3", "4", "5"]
print(x[::2])
['0', '2', '4']
x = ["0", "1", "2", "3", "4", "5"]
print(x[1::2])
['1', '3', '5']
x = ["0", "1", "2", "3", "4", "5"]
print(x[::-1])
['5', '4', '3', '2', '1', '0']
x = ["0", "1", "2", "3", "4", "5"]
print(x[::-2])
['5', '3', '1']
ABC284 A - Sequence of Strings | 提出結果
N = int(input())
S = [input() for i in range(N)]
print(*S[::-1], sep="\n")
ABC286 A - Range Swap | 提出結果 | 提出結果
N, P, Q, R, S = map(int, input().split())
A = list(map(int, input().split()))
A[P-1:Q], A[R-1:S] = A[R-1:S], A[P-1:Q]
print(*A)
N, P, Q, R, S = map(int, input().split())
A = input().split()
A[P-1:Q], A[R-1:S] = A[R-1:S], A[P-1:Q]
print(*A)
ABC356 A - Subsegment Reverse | 提出結果
N, L, R = map(int, input().split())
A = list(range(1, N+1))
A[L-1:R] = A[L-1:R][::-1]
print(*A)
N, K = map(int, input().split())
A = list(map(int, input().split()))
print(*A[-K:]+A[:N-K])
ABC304 A - First Player | 提出結果
N = int(input())
S = []
A = []
for i in range(N):
s, a = input().split()
S.append(s)
A.append(int(a))
idx = A.index(min(A))
print(*S[idx:]+S[:idx], sep="\n")
5.5 集合(set)
キーポイント
- 集合への変換は
set(データ)
で集合に変換される。 - 集合の和は
|
を使用する。 - 集合の差は
-
を使用する。 - 集合の積は
&
を使用する。 - 集合の対称差は
^
を使用する。 - 部分集合は不等式を使用する。
- 要素の追加は
add
メソッドを使用する。 - 要素の取り出しは
pop
メソッドを使用する。 - 要素の取り除きは
discard
メソッドを使用する。
集合への変換
集合への変換はset(データ)
で集合に変換される。
x = "abcabc"
print(set(x))
{'b', 'c', 'a'}
x = ["a", "b", "c", "a", "b", "c"]
print(set(x))
{'c', 'a', 'b'}
集合の和
集合の和は|
を使用する。
print({"a", "b", "c"} | {"c", "d", "e"})
{'a', 'b', 'd', 'e', 'c'}
集合の差
集合の差は-
を使用する。
print({"a", "b", "c"} - {"c", "d", "e"})
{'a', 'b'}
U = {1, 2, 3}
AB = set(int(input()) for i in range(2))
print(list(U-AB)[0])
ABC248 A - Lacked Number | 提出結果 | 提出結果
U = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
S = set(input())
print(list(U-S)[0])
U = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
S = set(map(int, input()))
print(list(U-S)[0])
集合の積
集合の積は&
を使用する。
print({"a", "b", "c"} & {"c", "d", "e"})
{'c'}
ABC295 A - Probably English | 提出結果
N = int(input())
W = set(input().split())
S = {"and", "not", "that", "the", "you"}
if S & W:
print("Yes")
else:
print("No")
集合の対称差
集合の対称差は^
を使用する。
print({"a", "b", "c"} ^ {"c", "d", "e"})
{'a', 'b', 'e', 'd'}
部分集合
部分集合は不等式を使用する。
print({"a", "b"} <= {"a", "b", "c"})
True
print({"a", "z"} <= {"a", "b", "c"})
False
print({"a", "b", "c"} >= {"a", "b"})
True
print({"a", "b", "c"} >= {"a", "z"})
False
ABC062 A - Grouping | 提出結果 | 提出結果
x, y = map(int, input().split())
group1 = {1, 3, 5, 7, 8, 10, 12}
group2 = {4, 6, 9, 11}
if {x, y} <= group1 or {x, y} <= group2:
print("Yes")
else:
print("No")
x, y = input().split()
group1 = {"1", "3", "5", "7", "8", "10", "12"}
group2 = {"4", "6", "9", "11"}
if {x, y} <= group1 or {x, y} <= group2:
print("Yes")
else:
print("No")
要素の追加
要素の追加はadd
メソッドを使用する。
x = set()
x.add("a")
print(x)
{'a'}
x = set()
x.add(1)
print(x)
{1}
要素の取り出し
要素の取り出しはpop
メソッドを使用する。
x = {"a"}
print(x.pop())
a
U = {1, 2, 3}
AB = set(int(input()) for i in range(2))
print((U-AB).pop())
ABC248 A - Lacked Number | 提出結果 | 提出結果
U = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
S = set(input())
print((U-S).pop())
U = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
S = set(map(int, input()))
print((U-S).pop())
要素の取り除き
要素の取り除きはdiscard
メソッドを使用する。
x = {"a", "b", "c"}
x.discard("a")
print(x)
{'c', 'b'}
x = {"a", "b", "c"}
x.discard("z")
print(x)
{'b', 'a', 'c'}
ABC355 A - Who Ate the Cake? | 提出結果
A, B = map(int, input().split())
s = {1, 2, 3}
s.discard(A)
s.discard(B)
if A == B:
print(-1)
else:
print(s.pop())
5.6 辞書(dict)
キーポイント
- 値の参照は
辞書[キー]
となる。
値の参照
値の参照は辞書[キー]
となる。
x = {"a": 1, "b": 2, "c": 3}
print(x["a"])
1
x = {1: "a", 2: "b", 3: "c"}
print(x[2])
b
X = input()
alphabet = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5}
print(alphabet[X])
ABC141 A - Weather Prediction | 提出結果
S = input()
weather = {"Sunny": "Cloudy", "Cloudy": "Rainy", "Rainy": "Sunny"}
print(weather[S])
ABC146 A - Can't Wait for Holiday | 提出結果
S = input()
week = {"SUN": 7, "MON": 6, "TUE": 5, "WED": 4, "THU": 3, "FRI": 2, "SAT": 1}
print(week[S])
S = input()
week = {"Monday": 5, "Tuesday": 4, "Wednesday": 3, "Thursday": 2, "Friday": 1}
print(week[S])
ABC319 A - Legendary Players | 提出結果
rate = {
"tourist": 3858,
"ksun48": 3679,
"Benq": 3658,
"Um_nik": 3648,
"apiad": 3638,
"Stonefeang": 3630,
"ecnerwala": 3613,
"mnbvmar": 3555,
"newbiedmy": 3516,
"semiexp": 3481
}
S = input()
print(rate[S])
ABC168 A - ∴ (Therefore) | 提出結果
N = input()
book = {"0": "pon", "1": "pon", "2": "hon", "3": "bon", "4": "hon",
"5": "hon", "6": "pon", "7": "hon", "8": "pon", "9": "hon"}
print(book[N[-1]])
第6章 組み込み関数
第6章では組み込み関数について説明します。
6.1 長さ(len)
キーポイント
- 文字列とリストの長さを得る場合、
len
関数を使用する。
文字列の長さ
文字列の長さを得る場合、len(文字列)
となる。
x = "Hello"
print(len(x))
5
A = input()
B = input()
if len(A) > len(B):
print(A)
else:
print(B)
ABC266 A - Middle Letter | 提出結果
S = input()
print(S[len(S)//2])
N = input()
print("0"*(4-len(N))+N)
N = input()
if len(set(N)) == 1:
print("SAME")
else:
print("DIFFERENT")
C = input()
if len(set(C)) == 1:
print("Won")
else:
print("Lost")
S = input()
if len(set(S)) == 3:
print("Yes")
else:
print("No")
ABC158 A - Station and Bus | 提出結果
S = input()
if len(set(S)) != 1:
print("Yes")
else:
print("No")
ABC225 A - Distinct Strings | 提出結果
S = input()
kind = len(set(S))
if kind == 1:
print(1)
elif kind == 2:
print(3)
else:
print(6)
S = [input() for _ in range(12)]
count = 0
for i in range(12):
if len(S[i]) == i+1:
count += 1
print(count)
ABC293 A - Swap Odd and Even | 提出結果
S = input()
for i in range(0, len(S), 2):
print(S[i+1]+S[i], end="")
ABC345 A - Leftrightarrow | 提出結果
S = input()
flag = True
if S[0] != "<" or S[-1] != ">":
flag = False
for i in range(1, len(S)-1):
if S[i] != "=":
flag = False
if flag:
print("Yes")
else:
print("No")
S = input()
if S[0] == S[1]:
majority = S[0]
else:
majority = S[2]
for i in range(len(S)):
if S[i] != majority:
print(i+1)
break
リストの長さ
リストの長さを得る場合、len(リスト)
となる。
x = ["a", "b", "c", "a"]
print(len(x))
4
x = [0, 1, 2]
print(len(x))
3
ABC046 A - AtCoDeerくんとペンキ | 提出結果 | 提出結果
abc = input().split()
print(len(set(abc)))
abc = list(map(int, input().split()))
print(len(set(abc)))
ABC268 A - Five Integers | 提出結果 | 提出結果
ABCDE = input().split()
print(len(set(ABCDE)))
ABCDE = list(map(int, input().split()))
print(len(set(ABCDE)))
N = int(input())
A = list(map(int, input().split()))
if len(set(A)) == 1:
print("Yes")
else:
print("No")
ABC = input().split()
if len(set(ABC)) == 2:
print("Yes")
else:
print("No")
S = input()
c = list(set(S))
if len(c) == 2 and S.count(c[0]) == S.count(c[1]) == 2:
print("Yes")
else:
print("No")
6.2 ソート(sorted)
キーポイント
- ソートをする場合、
sorted
関数を使用する。 - ソートは昇順で行われる。
- ソートを降順にする場合、
sorted(データ)[::-1]
となる。
昇順
ソートをする場合、sorted
関数を使用する。ソートは昇順で行われる。
x = [2, 1, 3]
print(sorted(x))
[1, 2, 3]
abc = map(int, input().split())
print(sorted(abc)[1])
a, b, c = sorted(map(int, input().split()))
print(a+b)
x, y, z = sorted(map(int, input().split()))
print(y+z)
ABC103 A - Task Scheduling Problem | 提出結果 | 提出結果
A1, A2, A3 = sorted(map(int, input().split()))
print(A3-A1)
A = sorted(map(int, input().split()))
print(A[-1]-A[0])
ABC110 A - Maximize the Formula | 提出結果
A, B, C = sorted(input().split())
print(int(C+B)+int(A))
ABC201 A - Tiny Arithmetic Sequence | 提出結果 | 提出結果
A1, A2, A3 = sorted(map(int, input().split()))
if A3-A2 == A2-A1:
print("Yes")
else:
print("No")
A = sorted(map(int, input().split()))
if A[2]-A[1] == A[1]-A[0]:
print("Yes")
else:
print("No")
ABC047 A - キャンディーと2人の子供 | 提出結果
a, b, c = sorted(map(int, input().split()))
if a+b == c:
print("Yes")
else:
print("No")
ABC263 A - Full House | 提出結果 | 提出結果
A, B, C, D, E = sorted(input().split())
if (A == B == C and D == E) or (A == B and C == D == E):
print("Yes")
else:
print("No")
A, B, C, D, E = sorted(map(int, input().split()))
if (A == B == C and D == E) or (A == B and C == D == E):
print("Yes")
else:
print("No")
ABC260 A - A Unique Letter | 提出結果
a, b, c = sorted(input())
if a != b:
print(a)
elif b != c:
print(c)
else:
print(-1)
S = input()
d = sorted(S)
if d[0] != d[1]:
print(S.index(d[0])+1)
else:
print(S.index(d[-1])+1)
降順
ソートを降順にする場合、sorted(データ)[::-1]
となる。
x = [2, 1, 3]
print(sorted(x)[::-1])
[3, 2, 1]
x, y, z = sorted(map(int, input().split()))[::-1]
print(x+y)
ABC110 A - Maximize the Formula | 提出結果
A, B, C = sorted(input().split())[::-1]
print(int(A+B)+int(C))
ABC = [int(input()) for i in range(3)]
sorted_ABC = sorted(ABC)[::-1]
for idx in ABC:
print(sorted_ABC.index(idx)+1)
6.3 最大値(max)
キーポイント
- 最大値を得る場合、
max
関数を使用する。
整数の場合、max(整数A, 整数B, 整数C)
となる。
print(max(1, 2, 3))
3
変数の場合、max(変数A, 変数B, 変数C)
となる。
x = 1
y = 2
z = 3
print(max(x, y, z))
3
リストの場合、max(リスト)
となる。
x = [1, 2, 3]
print(max(x))
3
X, Y = map(int, input().split())
print(max(X, Y))
A, B = map(int, input().split())
print(max(A+B, A-B, A*B))
A, B = map(int, input().split())
print(max(A+B, A-B, A*B))
ABC052 A - Two Rectangles | 提出結果
A, B, C, D = map(int, input().split())
print(max(A*B, C*D))
A, B, C = map(int, input().split())
print(max(C//A, C//B))
A, B, C = map(int, input().split())
print(max(A+B, B+C, C+A))
A, B = map(int, input().split())
print(max(A+(A-1), B+(B-1), A+B))
A, D = map(int, input().split())
print(max((A+1)*D, A*(D+1)))
A, B = map(int, input().split())
print(max(0, B-A+1))
x = int(input())
print(max(0, x))
X, t = map(int, input().split())
print(max(0, X-t))
A, B = map(int, input().split())
print(max(0, A-2*B))
A, B, C = map(int, input().split())
print(max(0, C-(A-B)))
import math
X, Y = map(int, input().split())
print(max(0, math.ceil((Y-X)/10)))
import math
N, M, P = map(int, input().split())
print(max(0, math.ceil((N-M+1)/P)))
ABC100 A - Happy Birthday! | 提出結果
A, B = map(int, input().split())
if max(A, B) <= 8:
print("Yay!")
else:
print(":(")
ABC275 A - Find Takahashi | 提出結果
N = int(input())
H = list(map(int, input().split()))
print(H.index(max(H))+1)
N = int(input())
S = "0"+input()
print(max(S.find("A"), S.find("B"), S.find("C")))
A = int(input())
ans = 0
for x in range(1, A+1):
y = A-x
ans = max(ans, x*y)
print(ans)
ABC313 A - To Be Saikyo | 提出結果
N = int(input())
P = list(map(int, input().split()))
x = 0
for i in range(1, N):
x = max(x, P[i])
if P[0] > x:
print(0)
else:
print(x-P[0]+1)
6.4 最小値(min)
キーポイント
- 最小値を得る場合、
min
関数を使用する。
整数の場合、min(整数A, 整数B, 整数C)
となる。
print(min(1, 2, 3))
1
変数の場合、min(変数A, 変数B, 変数C)
となる。
x = 1
y = 2
z = 3
print(min(x, y, z))
1
リストの場合、min(リスト)
となる。
x = [1, 2, 3]
print(min(x))
1
N, A, B = map(int, input().split())
print(min(A*N, B))
N, A, B = map(int, input().split())
print(min(N*A, B))
a, b, c = map(int, input().split())
print(min(a+b, b+c, c+a))
P, Q, R = map(int, input().split())
print(min(P+Q, Q+R, R+P))
ABC092 A - Traveling Budget | 提出結果
A, B, C, D = [int(input()) for i in range(4)]
print(min(A, B)+min(C, D))
ABC120 A - Favorite Sound | 提出結果
A, B, C = map(int, input().split())
print(min(C, B//A))
n, x = map(int, input().split())
print(min(x-1, n-x))
ABC185 A - ABC Preparation | 提出結果
A = list(map(int, input().split()))
print(min(A))
ABC103 A - Task Scheduling Problem | 提出結果
A = list(map(int, input().split()))
print(max(A)-min(A))
ABC310 A - Order Something Else | 提出結果
N, P, Q = map(int, input().split())
D = list(map(int, input().split()))
print(min(P, Q+min(D)))
R, G, B = map(int, input().split())
C = input()
if C == "Red":
print(min(G, B))
if C == "Green":
print(min(R, B))
if C == "Blue":
print(min(R, G))
ABC261 A - Intersection | 提出結果
L1, R1, L2, R2 = map(int, input().split())
print(max(0, min(R1, R2)-max(L1, L2)))
6.5 合計値(sum)
キーポイント
- 合計値を得る場合、
sum
関数を使用する。
リストの要素の合計値を得る場合、sum(リスト)
となる。
x = [1, 2, 3]
print(sum(x))
6
N = int(input())
A = list(map(int, input().split()))
print(sum(A))
A = list(map(int, input().split()))
if sum(A) >= 22:
print("bust")
else:
print("win")
abc = list(map(int, input().split()))
print(21-sum(abc))
ABC351 A - The bottom of the ninth | 提出結果
A = list(map(int, input().split()))
B = list(map(int, input().split()))
print(sum(A)-sum(B)+1)
ABC349 A - Zero Sum Game | 提出結果
N = int(input())
A = list(map(int, input().split()))
print(0-sum(A))
abc = list(map(int, input().split()))
print(sum(sorted(abc)[:2]))
ABC307 A - Weekly Records | 提出結果
N = int(input())
A = list(map(int, input().split()))
for i in range(N):
print(sum(A[i*7:(i+1)*7]), end=" ")
数字和
map
関数を使用して、sum(map(int, 整数の文字列データ))
で数字和を求めることができる。
x = 1234
print(sum(map(int, str(x))))
10
x = "1234"
print(sum(map(int, x)))
10
X = input()
print(sum(map(int, X)))
ABC187 A - Large Digits | 提出結果
A, B = input().split()
a = sum(map(int, A))
b = sum(map(int, B))
if a > b:
print(a)
else:
print(b)
ABC248 A - Lacked Number | 提出結果
S = input()
print(45-sum(map(int, S)))
6.6 絶対値(abs)
キーポイント
- 絶対値を得る場合、
abs
関数を使用する。
絶対値を得る場合、abs(数値)
となる。
x = -1
print(abs(x))
1
x = -1.1
print(abs(x))
1.1
ABC071 A - Meal Delivery | 提出結果
x, a, b = map(int, input().split())
if abs(a-x) < abs(b-x):
print("A")
else:
print("B")
ABC188 A - Three-Point Shot | 提出結果
X, Y = map(int, input().split())
if abs(X-Y) < 3:
print("Yes")
else:
print("No")
ABC123 A - Five Antennas | 提出結果
a, b, c, d, e, k = [int(input()) for i in range(6)]
if abs(a-e) <= k:
print("Yay!")
else:
print(":(")
ABC097 A - Colorful Transceivers | 提出結果
a, b, c, d = map(int, input().split())
if abs(a-c) <= d or (abs(a-b) <= d and abs(b-c) <= d):
print("Yes")
else:
print("No")
ABC305 A - Water Station | 提出結果
N = int(input())
dist = 100
for i in range(0, 101, 5):
if abs(N-dist) > abs(N-i):
dist = i
print(dist)
6.7 文字(ord/chr)
キーポイント
- 文字の Unicode コードポイントを得る場合、
ord
関数を使用する。 - Unicode コードポイントの文字を得る場合、
chr
関数を使用する。
文字の Unicode コードポイントを得る場合、ord(文字)
となる。Unicode コードポイントの文字を得る場合、chr(整数)
となる。
x = "a"
print(ord(x))
97
x = 97
print(chr(x))
a
x = "A"
print(ord(x))
65
x = 65
print(chr(x))
A
N = int(input())
print(chr(N))
ABC151 A - Next Alphabet | 提出結果
C = input()
print(chr(ord(C)+1))
ABC282 A - Generalized ABC | 提出結果
K = int(input())
s = ""
for i in range(K):
s += chr(ord("A")+i)
print(s)
ABC257 A - A to Z String 2 | 提出結果 | 提出結果
N, X = map(int, input().split())
print(chr(ord("A")+(X-1)//N))
N, X = map(int, input().split())
string = ""
for i in range(26):
for j in range(N):
string += chr(ord("A")+i)
print(string[X-1])
第7章 関数定義
第7章では関数定義について説明します。
7.1 関数定義
キーポイント
- 関数は
def
で定義する。 -
def
文で関数名と引数名を指定する。 - 返り値(戻り値)は
return
文で指定する。 -
return
文を指定しない場合、None
が返る。
関数はdef
で定義する。def
文で関数名と引数名を指定する。返り値(戻り値)はreturn
文で指定する。
def add(a, b):
return a+b
print(add(1, 2))
3
ABC234 A - Weird Function | 提出結果
def f(x):
return x**2+2*x+3
t = int(input())
print(f(f(f(t)+t)+f(f(t))))
return
文を指定しない場合、None
が返る。
def add(a, b):
print(a+b)
print(add(1, 2))
3
None
def add(a, b):
print(a+b)
add(1, 2)
3
7.2 再帰関数
再帰関数は下記のように記述することできる。
def factorial(N):
if N == 0:
return 1
else:
return N*factorial(N-1)
print(factorial(4))
24
def fibonacci(N):
if N == 0:
return 0
elif N == 1:
return 1
else:
return fibonacci(N-1)+fibonacci(N-2)
print(fibonacci(10))
55
ABC273 A - A Recursive Function | 提出結果
def f(x):
if x == 0:
return 1
else:
return x*f(x-1)
N = int(input())
print(f(N))
付録
付録では 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 = {1, 2, 3, 4, 5}
print(x)
print(type(x))
{1, 2, 3, 4, 5}
<class 'set'>
x = {"one": 1, "two": 2, "three": 3}
print(x)
print(type(x))
{'one': 1, 'two': 2, 'three': 3}
<class 'dict'>
エラーの例
エラーの例を紹介します。
- 全角スペースがある
print( ) # 全角スペースを出力している
print( ) # 全角スペースを出力している
^
SyntaxError: invalid non-printable character U+3000
- 括弧を閉じていない
print(
print(
^
SyntaxError: '(' was never closed
- ダブルクォーテーション(またはシングルクォーテーション)を閉じていない
x = "a
x = "a
^
SyntaxError: unterminated string literal (detected at line X)
- コロンがない
if True
print()
if True
^
SyntaxError: expected ':'
- インデントを間違える
print()
print()
print()
IndentationError: unexpected indent
- スペルを間違える
pirnt()
pirnt()
^^^^^
NameError: name 'pirnt' is not defined. Did you mean: 'print'?
- ゼロで割る
print(1/0)
print(1/0)
~^~
ZeroDivisionError: division by zero
- ゼロで余りを求める
print(1 % 0)
print(1 % 0)
~~^~~
ZeroDivisionError: integer modulo by zero
- 範囲外を参照する
x = ["a"]
print(x[1])
print(x[1])
~^^^
IndexError: list index out of range
x = "a"
print(x[1])
print(x[1])
~^^^
IndexError: string index out of range
x = ["a"]
print(x.pop(1))
print(x.pop(1))
^^^^^^^^
IndexError: pop index out of range
- 存在しない要素を探索する
x = ["a"]
print(x.index("b"))
print(x.index("b"))
^^^^^^^^^^^^
ValueError: 'b' is not in list
- 存在しない文字列を探索する
x = "a"
print(x.index("b"))
print(x.index("b"))
^^^^^^^^^^^^
ValueError: substring not found
- 辞書に登録されていないキーを参照する
x = {"a": 0}
print(x["b"])
print(x["b"])
~^^^^^
KeyError: 'b'
- 空のオブジェクトから要素を取り出す
x = []
print(x.pop())
print(x.pop())
^^^^^^^
IndexError: pop from empty list
x = set()
print(x.pop())
print(x.pop())
^^^^^^^
KeyError: 'pop from an empty set'