プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

競技プログラミングの基本入出力(Python3)

競技プログラミングの基本入出力をPython3で説明します。
基本的過ぎて、ちゃんと説明されたサイトが無くって苦労しました。
Atcoderの先人の解答例は参考になります。

入力編

競技プログラミングでは以下のように入力が与えらるのが基本です。
最初の一行は、続く入力行の回数であることが多く、二行目以降はスペース区切りが多いです。
入力は「数値」に見えても「文字列」です。

3
6 5 6 8
1 2 3 
2 3 4 6 7

入力を数値に。

#入力→ '3'
n = int(input())
# 3

スペース区切りをlistに。この時点では文字列になっています。

#入力→ '6 5 6 8'
list = input().split()
# ['6', '5', '6', '8']

さらに数値に。

#入力→ '6 5 6 8'
list = [int(s) for s in input().split()]
# [6, 5, 6, 8]

入力の変数の数がわかっているとときはmapを使って以下のようにもできます。

#入力→ '1 2 3'
a,b,c=map(int, input().split()) 
# a=1 , b=2 , c=3

これらを組み合わせると、以下のような計算も可能になります。

n=int(input())
for i in range(n):
    list=[int(s) for s in input().split()]
print(list[0]+list[1])

文字列をListに(スペース区切りではないとき)

#入力→ '日月火水木金土'
list(input())
#  ['日', '月', '火', '水', '木', '金', '土']

これらを応用して、n行にわたって入力がある場合はforinput()を回します

出力編

スペース区切りで出力せよ、という回答の仕方はよく出ます。
listのjoinで複数の数値をスペース区切りの一つの文字列にします。

list=["6", "5", "6", "8"]
print(" ".join(list))
# 6 5 6 8

ただし、これは文字列のListでないとだめなので、文字列でない場合は変換します。

list=[6, 5, 6, 8]
list2=[str(s) for s in list]
print(" ".join(list2))
もしくは
print(" ".join( [str(s) for s in listl] ))

リストのアンパックという方法をコメントで教えていただきました。

list=[6, 5, 6, 8]
print(*list,sep=" ")
#もしくはprint(*list) #セパレータをスペースにするときは省略可能
# 6 5 6 8

セパレータが不要のときは以下のようになります。

list=[6, 5, 6, 8]
print(*list ,sep="")
# 6568