第8回【Python】奇数だけ出力、割り切れる数だけ出力、偶奇の判定

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

はじめに

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

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

ただ眺めるだけでなく、手を動かしてみるといいと思うよ。手を動かすと、自然と頭に入ってくるものです。また、ただ眺めているだけでは気づかなかった点に気づくことができるかもしれません。

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

奇数だけ出力

N 個の整数 a_1, a_2, …, a_N が与えられます。
この N 個の整数のうち、a_1 から順に奇数か偶数か判定し、奇数の場合のみ改行区切りで出力してください。
また、N 個の整数には奇数が少なくとも 1 つ含まれています。

うーむ。ここのテーマは、while 文ではなかったのか。どう考えても、while 文で書く必要はないような問題。とりあえず、for 文でやってみよう。

Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
    if A[i] % 2 == 1:
        print(A[i])

きちんと N を使っているし、無駄のない満点解答だと思うのだけれど。

最後の条件、奇数が少なくとも 1 つ含まれています、はどういった意味になるんだろう。このコードだと、奇数が 1 つも含まれていなくても、エラーにはならない気がする。

気を取り直して(?)VBA でも書いてみる。
セル A1 に N が、セル A2 に数列 A が半角スペース区切りで入っています。

VBA
A = Split(Cells(2, 1), " ")
For i = 0 To UBound(A)
    If A(i) Mod 2 = 1 Then Debug.Print A(i)
Next

とりあえず、N を無視して、お手軽に書いてみた。Python とあまり変わらないんだよなぁ。

割り切れる数だけ出力

N 個の整数 a_1, a_2, …, a_N が与えられます。
この N 個の整数のうち、a_1 から順に 3 で割り切れるか判定し、割り切れる場合のみ改行区切りで出力してください。
また、N 個の整数には 3 で割り切れる数が少なくとも 1 つ含まれています。

前問とあまり変わらない。

Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
    if A[i] % 3 == 0:
        print(A[i])

割り切れる、というのは言い換えれば余りがない、ということ。

剰余計算(A % B)がなければ、とても面倒だったと思う。

div = X // 3
if x == div * 3: # True であれば割り切れた → X は 3 で割り切れる。

VBA でも前問とほとんど変わらない。

VBA
A = Split(Cells(2, 1), " ")
For i = 0 To UBound(A)
    If A(i) Mod 3 = 0 Then Debug.Print A(i)
Next

偶奇の判定

N 個の整数 a_1, a_2, …, a_N が与えられます。
この N 個の整数について、a_1 から順に 奇数か偶数か判定し、奇数なら odd 、偶数なら even を改行区切りで出力してください。

前問、前々問をやっていれば、難なくできそうな問題。

Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
    if A[i] % 2 == 0:
        print("even")
    else:
        print("odd")

2 で割ってみて、余りがなければ「偶数」、そうでない数は「奇数」としているだけ。

VBA でもやることは同じ。

VBA
A = Split(Cells(2, 1), " ")
For i = 0 To UBound(A)
    If A(i) Mod 2 = 0 Then
        Debug.Print "even"
    Else
        Debug.Print "odd"
    End If
Next

最後に

とても簡単な問題だけれど、こういう判定って、結構使う機会はあるように感じる。

X 行ごとに、とか、1 行おきに、とか。

X 行ごとに、であれば、X で割った余りが 0 であれば良いわけだし、1 行おきに、であれば、2 で割った余りの有無によって分岐させてやれば良い。

おぉ、今日やったのを理解していれば、できるじゃん。

引き続き、お付き合いお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki