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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1803閲覧

Pythonのif~elifで条件分岐がうまくいかない

poipoi5819

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/29 11:22

前提・実現したいこと

Pythonで、PDFファイルのサイズ(A0A3)を判定したいと思っています。
PDFファイルを読み込み、PDFの.mediaBox.upperRight を取得して、その情報によってサイズを判定させるために、
if
elifを用いていますが、うまくいきません。
下記例で、.mediaBox.upperRight が (3370.4, 2383.94) の場合、「A0サイズです」と出て欲しいのですが、
「A1サイズです」 と出てしまいます。 
.mediaBox.upperRightは問題なく取得されていますので、if~elif文の書き方が悪いのかどうかわかりません。
ご教示の程、お願い致します。

発生している問題・エラーメッセージ

runfile('C:/Users/1080045023/Desktop/pdf_spec - コピー.py', wdir='C:/Users/1080045023/Desktop')
(3370.4, 2383.94)
A1サイズです
*** 開始 ***
*** 終了 ***

該当のソースコード

 #-- coding: utf-8 --
import sys
import PyPDF2

sys.stderr.write("*** 開始 ***\n")
file_in = 'C:/tmp/A0.pdf'
pdf_first = open(file_in,'rb')

pdf_reader = PyPDF2.PdfFileReader(pdf_first)
page_a = pdf_reader.getPage(0)
print(page_a.mediaBox.upperRight)

page_a.mediaBox.upperRight = (1683.78, 1190.56)
page_a.mediaBox.upperRight = (1190.56, 841.89)
page_a.mediaBox.upperRight = (841.89, 1190.56)
page_a.mediaBox.upperRight = (3370.4, 2383.94)
page_a.mediaBox.upperRight = (2383.94, 1683.78)

if page_a.mediaBox.upperRight == (1190.56, 841.89):
print("A3サイズです")
elif page_a.mediaBox.upperRight == (841.89, 1190.56):
print("A3サイズです")
elif page_a.mediaBox.upperRight == (1683.78, 1190.56):
print("A2サイズです")
elif page_a.mediaBox.upperRight == (2383.94, 1683.78):
print("A1サイズです")
elif page_a.mediaBox.upperRight == (3370.4, 2383.94):
print("A0サイズです")

pdf_first.close()
sys.stderr.write("*** 終了 ***\n")

補足情報(FW/ツールのバージョンなど)

python3、PyPDF2ライブラリを使ってPDF操作をしています。

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

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

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

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

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

tachikoma

2020/05/29 11:29

カード部分は<code>のボタンを使ってインデントが崩れないように修正して下さい
x98000

2020/05/29 11:39

これは何をやってるんでしょうね。 page_a.mediaBox.upperRight = (1683.78, 1190.56) page_a.mediaBox.upperRight = (1190.56, 841.89) page_a.mediaBox.upperRight = (841.89, 1190.56) page_a.mediaBox.upperRight = (3370.4, 2383.94) page_a.mediaBox.upperRight = (2383.94, 1683.78)
ForestSeo

2020/05/29 11:42

if ~ elif の文型自体はあっていると思います。
ozwk

2020/05/29 11:57 編集

if文の直前でA1サイズを代入してません?
poipoi5819

2020/06/01 06:48 編集

tachikomaさん ありがとうございます。teratailの使い方から勉強しないと、質問を投稿するにも大変失礼ですね。申し訳ございません。
poipoi5819

2020/06/01 06:39

x98000さん ありがとうございます。確かにおっしゃるとおりでした。 ソースから削除しました。
poipoi5819

2020/06/01 06:42

ForestSeo さん ありがとうございます。if ~ elif の文型については、間違っていないと思うので、page_a.mediaBox.upperRight の取得結果をどのように出力させるか?をちゃんとしないといけなかったです。
poipoi5819

2020/06/01 06:43

ozwkさん ありがとうございます。page_a.mediaBox.upperRight = (2383.94, 1683.78) を直前に書いてしまっているので、確かに直前でA1サイズを代入してしまっています。
guest

回答1

0

ベストアンサー

小数点数を==で判断してはダメです。
10進の数値は誤差を含みます

投稿2020/05/29 11:43

y_waiwai

総合スコア88042

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

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

poipoi5819

2020/06/01 07:01

y_waiwaiさん ありがとうございます。 page_a.mediaBox.upperRightで得られたものを文字型にformat変換し、文字列どうしで比較させてみたら、得たい処理ができました。pmu = format(page_a.mediaBox.upperRight)。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問