第158回【Python】アルファベットの範囲の文字の出力、アルファベットの順番、アルファベット探し

現在取り組んでいるのは、paiza ラーニング問題集「B ランクレベルアップメニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 158 回目です。

不思議なもので、アラートが一つ発生すると連鎖的に別の案件でもアラートが発生します。しかし、今日は、何も起こらない静かな日でした。とてもとても暇でした。こんなに心穏やかに過ごしたのはどのくらい振りだろう。

それでは、今日も頑張ってみようと思います。

今回取り組む内容について

以下は、前回までに取り組んだ問題とまったく同じなので、飛ばします。
コードは数書いてナンボとかカッコつけたこと書いてましたが、あまりにも多いので挫折しました。

STEP: 1 文字列の出力

アルファベットの範囲の文字の出力 (paizaランク D 相当)

英大文字の文字列が入力されます。
この文字列の先頭1文字と末尾1文字で表される範囲に含まれる文字をすべて出力してください。

範囲とは、アルファベット順に並べた英大文字の列('A’, 'B’, 'C’, …, 'Z’)について、先頭の文字の出現位置から末尾の文字の出現位置までの部分列のことです。
たとえば、先頭の文字が’G’で末尾の文字が’O’で表される範囲は、('G’, 'H’, 'I’, 'J’, 'K’, 'L’, 'M’, 'N’, 'O’)となります。

出力はアルファベット順に表示し、1文字表示するたびに改行してください。

s

1行の文字列が入力されます。


期待する出力

先頭の文字から末尾の文字までの間のアルファベットを、1文字ごとに改行して出力してください。
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・文字列の先頭の1文字は、末尾の1文字よりもアルファベット順で先に出現
・1 ≦ (文字列の長さ) ≦10


入力例

GINO

出力例

G
H
I
J
K
L
M
N
O

●と●の間の文字を出力しなさい、ではなく、先頭文字と末尾文字の間の文字を出力しなさい。ちょっと捻ってあって面白い。

Python
s = input()
start = ord(s[0])
last = ord(s[-1]) + 1
for i in range(start,last):
    print(chr(i))
VBA
Sub alphabets_large_or_small_1()

    s = Cells(1, 1)
    Start = Asc(Left(s, 1))
    last = Asc(Right(s, 1))
    For i = Start To last
        Debug.Print Chr(i)
    Next
    
End Sub

アルファベットの順番 (paizaランク D 相当)

英大文字の文字列が入力されます。
文字列の先頭1文字が、末尾1文字よりもアルファベット順で先に出現するならば、"true"を出力し、そうでなければ"false"を出力してください。

s

1行の文字列が入力されます。


期待する出力

“true"または"false"を出力してください。


すべてのテストケースにおいて、以下の条件をみたします。

・最初のアルファベットは、最後のアルファベットと異なる文字
・文字列は半角英大文字で構成される
・1 ≦ (文字列の長さ) ≦10


入力例

VIOLIN

出力例

false

前問で条件に「文字列の先頭の1文字は、末尾の1文字よりもアルファベット順で先に出現」がなければ、本問をエラーチェックとして置いておく必要があるかも。

Python
s = input()
start = ord(s[0])
last = ord(s[-1])
if start < last:
    print('true')
else:
    print('false')
VBA
Sub alphabets_large_or_small_2()

    s = Cells(1, 1)
    Start = Asc(Left(s, 1))
    last = Asc(Right(s, 1))
    If Start < last Then
        Debug.Print "true"
    Else
        Debug.Print "false"
    End If
    
End Sub

アルファベット探し (paizaランク C 相当)

1行目の英大文字 X から、2行目の英大文字 Y の範囲に3行目のアルファベット C が含まれていれば"true", そうでなければ"false"と出力してください。
X が Y よりもアルファベット順で後ろになる場合(X = 'G’, Y = 'F’のときなど)も"false"と出力してください。

X
Y
C

力値最終行の末尾に改行が1つ入ります。


期待する出力

出力は、 “true" または “false" のどちらかです。


すべてのテストケースにおいて、以下の条件をみたします。

・X, Y, Cはそれぞれ英大文字です。


入力例

A
D
C

出力例

true

ちゃんとアンド条件で繋いでやれば、X が Y よりもアルファベット順で後ろになる場合っていう条件を作る必要はないんじゃなかろうか。

Python
x,y,c = [input() for _ in range(3)]
if ord(x) <= ord(c) <= ord(y):
    print('true')
else:
    print('false')
VBA
Sub alphabets_large_or_small_9()

    X = Cells(1, 1)
    y = Cells(2, 1)
    c = Cells(3, 1)

    If X <= c And c <= y Then
        Debug.Print "true"
    Else
        Debug.Print "false"
    End If
    
End Sub

最後に

Python の等号不等号式を並べる書き方は素敵。本当に分かりやすいと思う。分かりやすさのために、今回の問題の条件のような形を AND で繋ぐ場合は、不等号式が同じ方向を向くといいと思っている。これは調べてみてもまちまちで、検査対象を常に左に置いている方も多い。

明確なルールはない・・・のかな? まぁ、コーディングのルールは最初の決められていることが普通だと思うので、それに準ずればいいのだろうけれど。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki