前提・実現したいこと
atcoderの「 ABC 081 B - Shift only」を解いているが、web上にて公開されているコードで無限ループに陥らない理由がわからない。
(問題概要)
問題文
黒板に N 個の正の整数 A1 A2 ,,, Anが書かれています.
すぬけ君は,黒板に書かれている整数がすべて偶数であるとき,次の操作を行うことができます.
黒板に書かれている整数すべてを,
2
で割ったものに置き換える.
すぬけ君は最大で何回操作を行うことができるかを求めてください.
入力
入力は以下の形式で標準入力から与えられる。N
A1 A2,,, AN出力
すぬけ君は最大で何回操作を行うことができるかを出力せよ.
発生している問題・エラーメッセージ
↓のコードで、ループ中に例えばnums=[0,0]となったときにも、5行目のリストは[]となりfalseと判定され、breakが実行されず、nums=[0,0]のまま永遠にループから抜け出せないのでは?と思っていますが、実行したところ抜け出して答えを出すことに成功します。なぜ抜け出せるのでしょうか、、、
該当のソースコード
python
1n = int(input()) 2nums = [int(i) for i in input().split()] 3ans = 0 4while True: 5 if [i for i in nums if i % 2 == 1]: 6 break 7 nums = [i//2 for i in nums] 8 ans += 1 9print(ans)
試したこと
自分はnums内の要素に0が含まれたら確実にbreakするよう、以下のコードを考えておりました。(正常に動きます)
python
1n = int(input()) 2nums = list(map(int, input().split())) 3ans = 0 4while True: 5 if [i for i in nums if i ==0] or [i for i in nums if i %2 ==1 ]: 6 break 7 nums = [i //2 for i in nums] 8 ans += 1 9print(ans)
補足情報(FW/ツールのバージョンなど)
jupyter notebookを使っています
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/26 04:37
2019/12/26 05:23 編集
2019/12/26 06:46