今回はpaiza 標準入力メニューセクション3【文字列の出力】を解説します。
セクション3は、指定された文字列を改行区切りや半角スペース区切りで出力する問題です。
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション3:【文字列の出力】
3-STEP1: 1 つの文字列を出力 (paizaランク D 相当)
1個の文字列 "paiza" を出力する問題です。
Ruby解答例
putsメソッドで出力しています。
# 解答例 s = "paiza" # 出力 puts(s)
Ruby NG解答例
pメソッドを使うとダブルクォーテーション ""も出力してしまいます。
# NG解答例 s = "paiza" # 出力 p(s) # ダブルクォーテーションも出力される # > "paiza"
Python解答例1
printメソッドで出力しています。
# 解答例 s = "paiza" # 出力 print(s)
3-STEP2: 2 つの文字列を出力 (paizaランク D 相当)
2個の文字列 "paiza", "learning" を半角スペース区切りで出力する問題です。
Ruby解答例1
式展開を使って半角スペース区切りの文字列を生成して出力しています。
# 解答例1 s1 = "paiza" s2 = "learning" # 出力 puts("#{s1} #{s2}")
Ruby解答例2
+ で半角スペース区切りになるよう文字列を連結して出力しています。
# 解答例2 s1 = "paiza" s2 = "learning" # 出力 puts(s1 + " " + s2)
Python解答例1
f文字列を使って半角スペース区切りの文字列を生成して出力しています。
# 解答例1 s1 = "paiza" s2 = "learning" # 出力 print(f"{s1} {s2}")
Python解答例2
+ で半角スペース区切りになるよう文字列を連結して出力しています。
# 解答例2 s1 = "paiza" s2 = "learning" # 出力 print(s1 + " " + s2)
3-STEP3: 入力された 2 つの文字列を出力 (paizaランク D 相当)
2行で入力された2個の文字列を改行区切りで出力する問題です。
Ruby解答例
gets.chomp
を2回実行して末尾の改行を除いた2個の文字列を取得し、各文字列をputsメソッドで出力しています。
# 解答例 s = gets.chomp t = gets.chomp # 出力 puts(s) puts(t)
Python解答例
inputメソッドを2回実行して末尾の改行を除いた2個の文字列を取得し、各文字列をprintメソッドで出力しています。
# 解答例 s = input() t = input() # 出力 print(s) print(t)
3-STEP4: 入力された 10 個の文字列を出力 (paizaランク D 相当)
10行で入力された10個の文字列を半角スペース区切りで出力する問題です。
Ruby解答例1
timesメソッドで10回のループを設定し、mapメソッドで末尾の改行を除いた文字列の配列を生成して配列aryに格納し、joinメソッドで半角スペース区切りの文字列を生成して出力しています。
# 解答例1 # 10 行の入力を配列 ary に格納 ary = 10.times.map { gets.chomp } # 出力 puts(ary.join(" "))
Ruby解答例2
空の文字列変数sを用意し、timesメソッドで10回のループを設定します。
ループの中で文字列を受け取って末尾の改行を除き、変数sに追加、さらに最後の入力以外は半角スペースも追加します。
ループを抜けたら文字列sを出力します。
# 解答例3 # 10 行の入力 s = "" 10.times do |i| s += gets.chomp # 最後の入力に半角スペースは追加しない break if i == n - 1 s += " " end # 出力 puts(s)
Python解答例1
リスト内包表記で10行分の入力文字列で配列aryを作成し、print(*ary)
でアンパックして出力しています。
アンパックして出力すると、配列の要素を半角スペース区切りで出力してくれます。
# 解答例1 # 10 行の入力を配列 ary に格納 ary = [input() for _ in range(10)] # 出力 print(*ary)
Python解答例2
空の文字列変数sを用意し、rangeメソッドで10回のループを設定します。
ループの中で文字列を受け取って末尾の改行を除き、変数sに追加、さらに最後の入力以外は半角スペースも追加します。
ループを抜けたら文字列sを出力します。
# 解答例2 n = 10 # 10 行の入力 s = "" for i in range(n): s += input() # 最後の入力に半角スペースは追加しない if i == n - 1: break s += " " # 出力 print(s)
3-FINAL: 【文字列の出力】入力された 10 個の文字列を出力 (paizaランク D 相当)
半角スペース区切りの10個の文字列を改行区切りで出力する問題です。
Ruby解答例1
gets.split
で半角スペースで分割した要素を配列aryに格納し、putsメソッドで出力しています。
# 解答例1 # 入力 ary = gets.split # 出力 puts(ary)
Ruby解答例2
gets.split
で半角スペースで分割した要素を配列aryに格納し、eachメソッドで配列aryの先頭から順に参照し、putsメソッドで出力しています。
# 解答例2 # 入力 ary = gets.split # 出力 ary.each do |s| puts(s) end
Ruby解答例3
gets.split
で半角スペースで分割した要素を配列aryに格納し、uptoメソッドでインデックスiを0からary.length-1の間でカウントアップして、ary[i]
で先頭から順に参照し、putsメソッドで出力しています。
# 解答例3 # 入力 ary = gets.split # 出力 0.upto(ary.length - 1) do |i| puts(ary[i]) end
Python解答例1
input().split()
で半角スペースで分割した要素を配列aryに格納し、リスト内包表記で配列aryの先頭から順に参照し、printメソッドで出力しています。
# 解答例1 # 入力 ary = input().split() # 出力 [print(s) for s in ary]
Python解答例2
input().split()
で半角スペースで分割した要素を配列aryに格納し、for s in ary:
で配列aryの先頭から順に参照し、printメソッドで出力しています。
# 解答例2 # 入力 ary = input().split() # 出力 for s in ary: print(s)
Python解答例3
input().split()
で半角スペースで分割した要素を配列aryに格納し、for i in range(len(ary)):
でインデックスiを0からlen(ary)-1の間でカウントアップして、ary[i]
で先頭から順に参照し、putsメソッドで出力しています。
# 解答例3 # 入力 ary = input().split() # 出力 for i in range(len(ary) - 1): print(ary[i])
今回のまとめ
文字列も数値も基本的な出力方法は一緒です。
Ruby
- 要素数が数個かつ固定の場合は式展開( #{} )を使う
- 要素数が多い場合や不定の場合はjoinメソッドを使う
Python
- 要素数が数個かつ固定の場合はf文字列( f"" )を使う
- 要素数が多い場合や不定の場合はjoinメソッドを使う
- 配列の要素を半角スペース区切りで出力する場合はアンパック(*配列)を使う
セクション3までで数値・文字列の基本的な出力を扱いました。
次からは繰り返しを使った「n 行の出力」です!