- 1. 動的配列 Python3編
- 2. 複数回のランダムアクセス Python3編
- 3. ランダムアクセス Python3編
- 4. N 行 M 列のデータの入力】行ごとに要素数の異なる整数列の入力 Python3編
- 5. N 行 M 列の整数の入力 Python3編
- 6. 3 行 3 列の整数の入力 Python3編
- 7. 整数の組からの選択 Python3編
- 8. 2 行目で与えられる N 個の文字列の入力 Python3編
- 9. 2 行目で与えられる N 個の整数の入力 (large)
- 10. 5 行の整数の入力
- 11. 【出力形式を指定して出力】ペアの数値の入った表を罫線入りで出力 2 (paizaランク C 相当)
- 12. ペアの数値の入った表を罫線入りで出力 (paizaランク C 相当)
- 13. 九九表を罫線入りで出力
- 14. 文字列と N 個の整数の出力 Python3編
- 15. 2 つの文字列を出力 Python3編
- 16. 数値を半角スペース、0埋めで出力 Python3編
- 17. 実数をフォーマット指定して出力】複数の実数を出力 (paizaランク C 相当)
- 18. [Python]リストのコピーとfor文
- 19. Pythonで標準入力を受け取る方法
- 20. 【matplotlib】random_walkでお絵描きしてみた
動的配列 Python3編
https://paiza.jp/works/mondai/data_structure/data_structure__array_boss
>N 個の要素からなる数列 A が与えられます。数列 A に対し、次の 3 つの操作を行うプログラムを作成してください。
>・ push_back x : A の末尾に x を追加する
・ pop_back : A の末尾を削除する
・ print : A を半角スペース区切りで1行に出力する>例えば、入力例 1 において、数列 A は最初「1 2 3」です。最初の操作は「push_back 10」なので、末尾に 10 を追加して「1 2 3 10」となります。 2 つ目の操作は「push_back 12」なので、「1 2 3 10 12」となります。 3 つ目の操作は「print」なので「1 2 3 10 12」を出力します。 4 つ目の操作は「pop_back」なので末尾の「12」を削除して、「1 2 3 10」となります。最後の操作は「print」なので「1 2 3 10」を出力します。
というなかなかややこしい問題。
“
複数回のランダムアクセス Python3編
https://paiza.jp/works/mondai/data_structure/data_structure__array_step2
>要素数 N の数列 A と要素数 Q の数列 B が与えられます。 1 ≦ i ≦ Q の各 i について、i 行目に A の B_i 番目の値を出力してください。
という問題。
さっそく覚えた内包表記をつかってAとBの配列を作ってごにょごにょやる(言い方)“`py
N = int(input())
A =[int(x) for x in input().split()]
Q = int(input())
B =[int(y) for y in input().split()]
for i in B:
print(A[i-1])
“`Qをつかうならその次のfor文はこんな感じに。
わかりやすいのはどっちかな? 多分上?“`py
for i in range(Q):
print(A[B[i]-1])
“`内包表記を使うときれいに1行にまとまるね〜。
ランダムアクセス Python3編
今日のお題はここから
https://paiza.jp/works/mondai/data_structure/data_structure__array_step1> 要素数 N の数列 A と数値 M が与えられます。A の M 番目の値を出力してください。
今までの問題をやっていたら意外と!簡単にできてしまった。
“`py
N,M = map(int,input().split())
A = list(map(int,input().split()))
print(A[M-1])
“`
Aの配列に入れるところを、ループでやってみる
今までは、`arr= input().split()`と配列に入れていた部分を、
下のようにそのままループにしてしまえる。“`py
A =[]
for x in input().split():
A.append(int(x))
“`
そしてこれはもっと簡単にできて“`py
A = [int(x) for x in input().split()]
“`
こんな感じになる(なーんと!)
内包表記(ないほうひょうき)と
N 行 M 列のデータの入力】行ごとに要素数の異なる整数列の入力 Python3編
今日の最後の問題
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__matrix_data_boss>1 行目に整数 N が与えられます。
>2 行目から (N + 1) 行目までの先頭に整数 M_i (1 ≦ i ≦ N) が与えられます。それに続いて >M_i 個の整数 a_1, …, a_{M_i} が与えられます。
>上から i 番目、左から j 番目の整数は a_{i,j} です。
>N 行の a_1, …, a_M をそのまま出力してください。というもの。
以前の復習とちらっと新しい学習要素が。
どうしても次の要素からというのが見つからず。
じゃあ配列の要素を削除しちゃおう、ということで。
調べてきました。
配列の最初の要素を削除する、というもの。
`del tmp[0]`
でできる。
これを使って下記のようにした。“`py
N = int(input())
arr = []
for i in range(N):
tmp = input().split(” “)
del t
N 行 M 列の整数の入力 Python3編
前回と似たような課題
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__matrix_data_step4>1 行目で整数 N と整数 M が与えられます。
>2 行目以降で N 行 M 列の行列が与えられます。上から i 番目、左から j 番目の整数は >a_{i,j} です。
>N 行 M 列の行列をそのまま出力してください。“`py
arr = list(map(int,input().split()))
N = arr[0]
M = arr[1]arr = []
for i in range(N):
value = list(map(int,input().split(” “)))
arr.append(value)for i in range(N):
print(*arr[i])“`
内容としてはこれでOKなんだけど、
最初の部分はもっと簡単にできる方法があるそうだ。“`py
N, M = map(int, input().split())
“`
なるほど〜
3 行 3 列の整数の入力 Python3編
問題をいくつか飛ばしてこんな問題。
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__matrix_data_step1> 3 行 3 列の行列が与えられます。上から i 番目、左から j 番目の整数は a_{i,j} です。
> 3 行 3 列の行列をそのまま出力してください。まあ何も考えんとやれば。。。
“`py
print(input())
print(input())
print(input())
“`
となるけどそんなわけもない。
二次元配列を入れる方法で考えていく“`py
arr = []
for i in range(3):
value = list(map(int,input().split(” “)))
arr.append(value)for i in range(3):
print(*arr[i])
“`
見慣れない方法だけど、
print() でリストを出力するときに、先頭に * をつけることで、リストの要素を半角スペースで区切った文字列を出力すること
整数の組からの選択 Python3編
いくつか問題を飛ばして今回はこれ
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__pair_data_step3> 1 行目に整数 N が与えられます。
> 2 行目以降に、N 組の整数 a_i と b_i が N 行で与えられます。(1 ≦ i ≦ N)
> 8 組目の a_i と b_i を出力してください。わたしはというと、とりあえず文字列のまま配列に入れて7番目のを出力という方法。
でも可読性は悪いなと感じている。
これはN組というのは次元を暗示しているので普通なら配列に入れてやらないといけないと思う。“`py
N = int(input())
arr = []
for i in range(1,N+1):
arr.append(input())print(arr[7])
“`
なので再度考える“`py
N = int(input())
a = []
b = []
for i in range(N):
a_value, b_value = map(int,
2 行目で与えられる N 個の文字列の入力 Python3編
次はこれ(例のごとく何題か飛ばしてます(実際はクリアしてますがQiitaで飛ばしているという意味)
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__string_number_step21 行目に整数 N,2 行目に、N 個の文字列 s_1, … , s_N が半角スペース区切りで入力
⇒s_1, … , s_N を改行区切りで出力 という問題まあこれも簡単なのですがNを使えていません
“`py
N = int(input())
arr = input().split()
for i in arr:
print(i)“`
まあ使わなくてもいい場合があるのは知ってますがとりあえず使った場合を考えます
とはいってもそんなに差はない。
ポイントはN+1にならないこと(今まではN+1になってたので)
なぜN+1になるのかなぜNでよいのかというのを理解しておきたいところです“`py
N = int(input())
arr = input().split()
for i in range
2 行目で与えられる N 個の整数の入力 (large)
次はこれ(途中何題か簡単だったので飛ばしてます)
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__integer_number_step4これも一応簡単な部類に入るんだけど、
内容としてはこんな感じ。“`py
N = int(input())
arr = input().split()for i in arr:
print(int(i))
“`で、ここで`map()`というものを使えるようにしようということで
前半をmap()とlist()を使って書いてみます“`py
# map()を使わない書き方
arr = input().split()
for i in arr:
print(int(i))# map()を使う書き方(※split()はsplit(” “)でもOK)
arr = list(map(int, input().split()))#一応、下でもOK(list()がない)だった
arr = map(int,input().split())#こうすると次の
5 行の整数の入力
次のステップにはいって数題は簡単だったので飛ばしてここから
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__integer_row_step3整数 a_1, a_2, a_3, a_4, a_5 が 5 行で与えられる
⇒ a_1, a_2, a_3, a_4, a_5 を 5 行で出力 という問題
これは前回ステップの問題集にあったやり方
(input()にintで変換しておくの忘れてたけど通ってた)“`py
arr =[0] * 5
for i in range(5):
arr[i] = input()for i in arr:
print(i)“`
他にもphpにあったような配列の追加方法
どっちがいいかというと、下の方かな?
あらかじめ数が決まっているのはあんまりなくて
不定の場合が多いので
さっき間違えてたけど、appendをapendと書かないように注意
pは2文字必要“`py
arr =[]
for i in range(5):
value = int(i
【出力形式を指定して出力】ペアの数値の入った表を罫線入りで出力 2 (paizaランク C 相当)
今回はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_bossただし、AとBが9桁になるようにする
今までと同じように書いて
つぎに
(A, B) = 1+9+2+9+1=22文字(間は,と半スペで2文字)
| =3文字
あわせて25文字
それをW-1分繰り返し、最後は(A, B)だけなので22文字だから
count = 25 * (W -1) + 22
これを=でかければOK“`py
Arr = input().split()
H = int(Arr[0])
W = int(Arr[1])
A = int(Arr[2])
B = int(Arr[3])for j in range(1,H+1):
for i in range(1,W+1):
if i != W:
print(f”({A:>9}, {B:>9})”,end=” | “)
else:
print(f”({A:
ペアの数値の入った表を罫線入りで出力 (paizaランク C 相当)
今回の問題はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step4自然数 H, W, A, B が与えられるので
ヨコW行、縦H行の(A,B)を ” | ” で区切ることという問題。“`
2 3 7 8なら(7, 8) | (7, 8) | (7, 8)
========================
(7, 8) | (7, 8) | (7, 8)
“`
というふうに出力するまずは1行目を出力してみる
“`py
Arr = input().split()
H = int(Arr[0])
W = int(Arr[1])
A = int(Arr[2])
B = int(Arr[3])for i in range(1,W+1):
if i != W:
print(f”({A}, {B})”,end=” | “)
else:
print(f”({A}, {B})”)“`
次にH行分出力“`p
九九表を罫線入りで出力
今回はこの問題。今までの集大成に入った感じがする
– 九九表を、横の数値間では | (半角スペース 2 つとバーティカルライン)、縦の数値間では = で区切って出力
– 数値を出力する際は 2 けたになるよう半角スペース埋めで出力
– 縦の数値間で = を出力する際は、その上の行と文字数が等しくなるように出力まずは九九表を罫線なしで出力してみる
“`py
for i in range(1,9+1):
for j in range(1,9+1):
if j != 9:
print(i * j, end=” “)
else:
print(i * j)
“`
ひとまずここまではできた
次に、ヨコの数値間は、普通にendのほうに、` | `に変えればいいはず
そして数字は2桁になるように半スペ梅でやる必要があるので
“`py
for i in range(1,9+1):
for j in range(1,9+1):
if j != 9:
文字列と N 個の整数の出力 Python3編
次はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step2
文字列中に指定された整数を埋め込み、出力するという問題間違ってないはずだったが間違っていたので調べてみると、
()と()の間はコンマだけだと思ってたら半スペも入ってたから。“`py
Arr = input().split()
N = int(Arr[0])
A = int(Arr[1])
B = int(Arr[2])
for i in range(1,N+1):
if i != N:
print(f”({A}, {B})”,end=”, “)
else:
print(f”({A}, {B})”)“`
2 つの文字列を出力 Python3編
今回の問題はこれ
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_format_step1X
Y
と順番に文字列が出力されるのでそれを
X + Y = XYという形で出力せよという問題“`py
S = input()
T = input()
print(f”{S} + {T} = {S}{T}”)“`
fstringはformatと比べて直感的に書けて便利だな、と思うでもとりあえずformatでもかけるようにはしておこう(どこかで、、、役に立つ、、、はず)
formatの書き方は覚えにくいが、置き換える箇所を{}で書いて、あとで、順番に置き換える箇所のフォーマットを引数としていく感じで考えればいい
“`py
S = input()
T = input()
print(“{} + {} = {}”.format(S, T, S + T))“`
数値を半角スペース、0埋めで出力 Python3編
今回はこれ(半スペ埋め3桁)
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_step1fstringでこれも攻略
“`py
N = int(input())
print(f”{N:>3}”)
“`
次はこれ(0埋め3桁)
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__print_width_step2“`py
N = int(input())
print(f”{N:>03}”)
“`
その後も問題を解いたが、残り3問は全部今までの復習・応用問題だったので
一発合格だった
実数をフォーマット指定して出力】複数の実数を出力 (paizaランク C 相当)
今日はこの問題。
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__format_real_number_boss以前、f-stringを使うといいですよ、と教えて頂いたので、自分なりに書き方を理解して応用して書いてみた。
“`py
Q = int(input())for i in range(1,Q+1):
Arr = input().split()
N = float(Arr[0])
print(f”{N:.{i}f}”)
“`そしたら見事に正解しました。
あれ、、、この書き方すごい直感的で書きやすい。。。
教えてくれた@shiracamus(しらかみゅ)さんありがとうございます。。。(追記)
あのあと、テストケースを適用したらダメダメでした。
結果的にArr[1]を使わずiを使っちゃだめでした。
出力がすごいことになってしまってました。。。
正解は下“`py
Q = int(input())for i in range(1,Q+1):
Arr =
[Python]リストのコピーとfor文
## 目的
この記事を閲覧して,以下のことが分かる事
– list のコピー時の挙動
– シャローコピーとディープコピー
– for 文中の list の挙動## list のコピー
まずはこちらを考えてみましょう.Q.以下のコードを実行した場合,どのように出力されるでしょうか?
“`Python
a = [0, 1, 2, 3]
b = a # b に a をコピー
a.append(4) # a に 4 を追加print(a)
print(b)
“`選択肢 A
“`Python
[0, 1, 2, 3, 4]
[0, 1, 2, 3]
“`選択肢 B
“`Python
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
“`A. 選択肢 B
答えは選択肢 B です.a にだけ 4 を追加したのに何故 b にも 4 が追加されているの?
こう思いませんでしたか?
これ実は,a と b が同じリストになってしまっています.“`Python
print(id(a)) # 135764862582848
print(id(b))
Pythonで標準入力を受け取る方法
## はじめに
本記事は、競プロやpaizaスキルチェックなどで必要な標準入力からのデータ取得について、Pythonでデータを受け取るための備忘録です。## 標準入力について
標準入力(Standard Input)はユーザからデータを受け取るための方法。
プログラムへのキーボードなどからの入力を受けつける。
input()関数は、ユーザーから文字入力を受け取り、文字列として返す。## 基本的なデータ取得
“`Python
str = input()# 前後の空白を取り除く
str = input().strip()# 数としてintやfloatで取得する
int = int(input())
“`## 1行に複数個の入力データの場合
#### 文字列データ
“`:Input
りんご みかん ぶどう
“`
“`Python
strs = input().split()
print(strs)
#Output: [‘りんご’, ‘みかん’, ‘ぶどう’]
“`
#### 数値データ
“`:Input
2 1 -5
“`
“`Python
nums =
【matplotlib】random_walkでお絵描きしてみた
## はじめに
Pythonのmatplotlibを使用してドリッピングやマーブリングのような画像を出力します.
完全にお遊びです.
(GenerativeAIで画像生成できるってのに何やってんだか…)## 動作環境情報
– Python 3.12.0
– matplotlib 3.8.1## 手法
四方八方にランダムに動く線を重ねて重ねて描いてみます.### ソースコード
“`random_walk_paint.py
import numpy as np
from random import random
import matplotlib.pyplot as plt
from math import *def random_walk(N):
x, y = 0, 0x_list=[0]
y_list=[0]
for n in range(N):
theta=2.0*pi*random()
x = x+cos(theta)
y = y+sin(theta)
x_li