ITP1_9_A: Finding a Word
単語の検索 | プログラミング入門 | Aizu Online Judge
指定された単語の数を出力する問題
解答
count()
を使用することで、リスト内の指定の値を持つ要素の数を取得することができます。
# coding: utf-8 count = 0 W = input().lower() while True: T = input() if T == 'END_OF_TEXT': break count += T.lower().split().count(W) print(count)
ITP1_8_D: Ring
リング | プログラミング入門 | Aizu Online Judge
指定した文字列が含まれるかどうか判定する問題
解答1. 入力値を2倍
入力値と同じ内容の文字列を加えます。
in
を使用し、文字列に指定した値があるかどうかを調べます。
# coding: utf-8 s = input() p = input() if p in (s + s): print('Yes') else: print('No')
解答2. 文字列を1字ずつ移動
まず、in
を使用し、指定した値があるかどうかを調べます。
値がある場合、Yesを出力し、処理を終了します。
値がない場合、先頭の文字を最後に移動し、またin
を使用して値があるかどうかを調べます。
sの長さ分まで繰り返しても値がない場合、Noを出力して処理を終了します。
# coding: utf-8 s = input() p = input() flg = False for i in range(len(s)): if p in s: flg = True break s = s[1:] + s[:1] if flg: print('Yes') else: print('No')
文字列sを破壊したくない場合はこちら
# coding: utf-8 s = input() p = input() flg = False for i in range(len(s)): if p in s[i:] + s[:i]: flg = True break if flg: print('Yes') else: print('No')
ITP1_8_C: Counting Characters
文字のカウント | プログラミング入門 | Aizu Online Judge
アルファベットの数を数える問題
解答
まずアルファベットのaからzまでを含んだ文字列を用意します。
入力値は、終了条件が指定されていないため、例外をキャッチしたタイミングで入力値を受け取る処理から抜けます。
アルファベットの数を求めるのには、count()を使用します。
count()は文字列に対して、引数で指定した値がいくつ含まれているのかを返します。
アルファベットをaから順番に1文字ずつ取り出し、入力値にいくつ含まれているかを出力します。
# coding: utf-8 alpha = 'abcdefghijklmnopqrstuvwxyz' text = '' while True: try: text += input().lower() except EOFError: break for a in alpha: print('{} : {}'.format(a, text.count(a)))
ITP1_8_B: Sum of Numbers
数字の和 | プログラミング入門 | Aizu Online Judge
文字列操作に関する問題
1. 入力を文字列として受け取った場合
map()
を使用し、受け取った文字列を1文字ずつ整数型に変換し、その合計を出力します。
# coding: utf-8 while True: line = input() if line == '0': break else: print(sum(map(int, line)))
2. 入力を整数として受け取った場合
入力値を10で割り続け、0になるまでの間、10で割った剰余を加算し、最後にその合計を出力します。
# coding: utf-8 while True: n = int(input()) if n == 0: break else: sum = 0 while n > 0: sum += n % 10 n //= 10 print(sum)
ITP1_8_A: Toggling Cases
小文字と大文字の変換 | プログラミング入門 | Aizu Online Judge
文字列操作に関する問題
1. swapcase()を使う場合
swapcase()
を使用することで、大文字を小文字に、小文字を大文字に変換することができます。
print(input().swapcase())
2. islower()、もしくはisupper()を使う場合
入力文字列を1文字ずつ比較し、True
の場合に変換します。
s = input() for c in s: if c.islower(): print(c.upper(), end="") else: print(c.lower(), end="") print()
ITP1_7_D: Matrix Multiplication
行列の積 | プログラミング入門 | Aizu Online Judge
行列, の積を求める問題
行列の各要素は行列の行目の各要素と、行列の列目の各要素の積を合計したものです。
行列の行列を入れ替えた転置行列を用意すれば、行同士の演算で行列が求められます。
- 行列, を作成し、転置行列は
zip()
を使用し求めます。 - 次に、for文を使用し、行列の行
a
を取り出します。a
に対して、転置行列の行b
を取り出し、それぞれの要素を掛け合わせたものの合計を求め、結果をリストc
に格納します。 - 転置行列のすべての行
b
に対して同様の処理をし、c
を出力することで、行列の1行目を出力したことになります。 - これを、行列のすべての行
a
に対して同様の処理をすることで、行列を出力します。
解答
n, m, l = map(int, input().split()) matrix_A = [list(map(int, input().split())) for _ in range(n)] matrix_B = [list(map(int, input().split())) for _ in range(m)] matrix_B_transposed = list(map(list, zip(*matrix_B))) for a in matrix_A: c = [] for bt in matrix_B_transposed: c.append(sum(x * y for (x, y) in zip(a, bt))) print(*c)
ITP1_7_C: Spreadsheet
表計算 | プログラミング入門 | Aizu Online Judge
行列に関する問題
はじめに、r × c の表を作成します。
次に、各行の合計をappend()
を使用してmatrix
の各行の最後に結合し、 r × (c + 1) の表を作成します。
そして、各列の合計をzip()
を使用して、matrix
の最後に結合し、 (r + 1) × (c + 1) の表を作成します。
解答
r, c = map(int, input().split()) matrix = [list(map(int, input().split())) for _ in range(r)] for i in range(r): matrix[i].append(sum(matrix[i])) matrix.append(list(map(sum, zip(*matrix)))) # matrix.append([sum(i) for i in zip(*matrix)]) for row in matrix: print(' '.join(str(e) for e in row))