第68回【Python】ゼロ以外、0 が含まれていないか判定

現在取り組んでいるのは、paiza ラーニング問題集「条件分岐メニュー」になります。

はじめに

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

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

LeoSaki(旦那)が大好きな曲の一つに、さだまさしさんの「主人公」という曲があります。その中でも、if 「もしも」をイメージしたときに、真っ先に浮かんでくるのがこのフレーズ。

「或いは」「もしも」だなんてあなたは嫌ったけど
時を遡るチケットがあれば欲しくなる時がある
あそこの分かれ道で選びなおせるならって

さだまさし「主人公」

厳密さが必要なプログラムにおいて、こんな曖昧な if は認められないでしょうけれど、心に突き刺さるフレーズです。コードを書いているとき、if 文を連発していると、大抵、頭の中で流れているのはこの曲。このフレーズ。

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

ゼロ以外

整数 N が与えられます。Nが 0 ではない場合はYESを、 0 である場合はNOを出力してください。


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

・ N は -100 以上 100 以下の整数


5

わざわざゼロと言っているのだから、イコールゼロ以外のやり方はないのかの確認、なのかなぁ。

Python
N = int(input())
if N == 0:
    print("NO")
else:
    print("YES")
Python(別解)
N = int(input())
if N:
    print("YES")
else:
    print("NO")
VBA
N = Cells(1, 1)
If N = 0 Then
    Debug.Print "NO"
Else
    Debug.Print "YES"
End If
VBA(別解)
N = Cells(1, 1)
If N Then
    Debug.Print "YES"
Else
    Debug.Print "NO"
End If

0 が含まれていないか判定

長さ N の数列Aが与えられます。Aの中に 0 が含まれていない場合はYESを、 0 が含まれている場合はNOを出力してください。

N
A_1
A_2
...
A_N

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

・ N は 1 以上 18 以下の整数
・ A の各要素の値は 0 以上 3 以下


4
1
2
3
0

これもシンプルに思いつくパターンと、要素をひとつずつ確認するパターンを考えてみる。

Python
N = int(input())
A = [int(input()) for _ in range(N)]
if 0 in A:
    print("NO")
else:
    print("YES")
Python(別解)
N = int(input())
A = [int(input()) for _ in range(N)]
for a in A:
    if a == 0:
        print("NO")
        break
else:
    print("YES")
VBA
N = Cells(1, 1)
Dim A() As Integer
ReDim A(N - 1)
For i = 0 To N - 1
    A(i) = Cells(i + 2, 1)
Next
For Each v In A
    If v = 0 Then
        flag = True
        Exit For
    End If
Next
If flag Then
    Debug.Print "NO"
Else
    Debug.Print "YES"
End If
VBA(別解)
N = Cells(1, 1)
Dim A() As Integer
ReDim A(N - 1)
For i = 0 To N - 1
    A(i) = Cells(i + 2, 1)
Next
Do
    For Each v In A
       If v = 0 Then
           Debug.Print "NO"
           Exit Do
       End If
    Next
    Debug.Print "YES"
Loop Until True

最後に

VBA で最後に書いたのは、フラグ管理せずに書く方法を模索していて思いついたもの。これが正しかどうかはわかりません。なんとなく、Python の For Else みたいなことができないかと考えて作った苦肉の策なので。ちょっと間違えると永久ループに突入するのが怖いですが。

コードは正解が一つでないところが面白いです。書こうと思えばもっともっと簡潔に書くこともできるし、その逆、冗長に書くこともできる。どちらにしても、一緒に作業しているメンバーには読みにくいものになると思います。何事もほどほどが一番。速度重視だとそうも言ってられないかも。

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

Pythonpaiza,学習,Python

Posted by LeoSaki