質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

446閲覧

Python and条件の記述方法

mtttttttttttt

総合スコア5

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/04 16:36

前提・実現したいこと

HackerRank で Python の問題を解いていました。

(問題)
入力された数値nが
nが奇数であれば、”Weird”
偶数であり、2<=n<=5であれば、” Not Weird”
偶数であり、6<=n<=20であれば、”Weird”
偶数であり、20<nであれば、” Not Weird” と表示しなさい。
n の範囲は、1<=n<=100とする。

プログラムを書いて実行し、無事に意図どおりのプログラムができたのですが
動作確認でわからないところがあり質問しました。

該当のソースコード

<修正前> 不正解

python

1 n = int(input().strip()) 2 3 if((n%2 ==0) & 2<=n<=5): 4 print("Not Weird"); 5 elif((n%2 ==0) & 6<=n<=20): 6 print("Weird"); 7 elif((n%2 ==0) & 20 < n): 8 print("Not Weird"); 9 else: 10 print("Weird")

<修正後> 仕様通りで、正解

python

1 n = int(input().strip()) 2 3 if((n%2 ==0) & (2<=n & n<=5)): 4 print("Not Weird"); 5 elif((n%2 ==0) & (6<=n & n <=20)): 6 print("Weird"); 7 elif((n%2 ==0) & (20 < n)): 8 print("Not Weird"); 9 else: 10 print("Weird")

質問

if((n%2 ==0) & 2<=n<=5): と if((n%2 ==0) & (2<=n & n<=5)):では動作に違いがおきました

修正前では3を入力値としたところ、"Weird"と表示されると思ったのですが"Not Weird"と表示されました。
また、29を入力値とすると"Not Weird"と表示されました。

if((n%2 ==0) & 2<=n<=5): と if((n%2 ==0) & (2<=n & n<=5)):の &条件の()括り に違いがあるとは思うのですが、なぜ動作に違いが起きるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

shiracamus様の言う通り、&ではなく、andです(今回の場合は奇跡的に同じ動作をする)
比較演算子と&は、&が優先されるからです。
(n%2 ==0) & 2<=n<=5

((n%2 ==0) & 2) <= n <= 5
このように解釈されます。
参考


あと、

Python

1n = int(input().strip()) 2if n % 2 ==0: 3 if 6 <= n <= 20: 4 print("Weird"); 5 else: 6 print("Not Weird"); 7else: 8 print("Weird") 9```こんな感じに短くできる気がします。 10*** 11ちなみに`&`は、

{1, 2, 3} & {2, 3, 4}

{2, 3}

投稿2020/08/04 23:48

編集2020/08/04 23:56
ForestSeo

総合スコア2720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mtttttttttttt

2020/08/07 21:54

詳しい解説と、ソースコード例を回答していただきありがとうございます。 自分で公式ドキュメントを読んでも、奇跡的に動作している理由がわからなかったのですが、回答頂いてスッキリしました。 ありがとうございました。
ForestSeo

2020/08/08 00:18

> 奇跡的に動作している理由が... True,Falseは1,0と認識されるからです。
guest

0

& はビット論理積演算子ですよ。
条件演算子は andor です。
演算優先順位が違います。

参考:
https://docs.python.org/ja/3/library/stdtypes.html#truth-value-testing
https://docs.python.org/ja/3/reference/expressions.html#operator-summary

投稿2020/08/04 16:41

編集2020/08/04 16:49
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mtttttttttttt

2020/08/07 21:57

初歩的な間違いで申し訳ありません。 公式ドキュメントURL、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問