第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 みたいなことができないかと考えて作った苦肉の策なので。ちょっと間違えると永久ループに突入するのが怖いですが。
コードは正解が一つでないところが面白いです。書こうと思えばもっともっと簡潔に書くこともできるし、その逆、冗長に書くこともできる。どちらにしても、一緒に作業しているメンバーには読みにくいものになると思います。何事もほどほどが一番。速度重視だとそうも言ってられないかも。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません