64160


pythonでpillowを使用して画像のサイズに合わせて文字列を埋め込もうとして以下のようなコードを作成しました。

動作させたい内容としてwとhがテキストのwidthとheightになっていていてb_widthとb_heightが画像のサイズでこれに収まるようにフォントサイズを変更するプログラムを書きました。  
なのでw、hが画像のサイズより大きい場合はフォントサイズを下げ続けるはず予定なのですが、以下のプログラムだとhが画像以下になったところでループから抜けてしまいます。  
andの場合はテキストサイズ縦横が画像サイズ縦横より大きい場合はループ処理を続けると考えているのですが上手く行きません。

そしてなぜかandのところをorにすると行って欲しい動作を起こします。

andはかつなので両方がTrueで動作する。orはどちらか片方trueで動作すると思うのですが、何か解釈を間違えているような気がします。

[code]

    while  w > b_width and h > b_height:
        font_size = 100 - i
        font = ImageFont.truetype('/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf', font_size)
        w, h = d.textsize(message, font)
        i += 1
    
[/code]


CC BY-SA 4.0
2020-03-27T12:10:13.887
64157
2020-03-27T13:14:37.883
22565
question
python python3
Pythonのwhileの条件文で指定したorの動作おかしい。


確かに混乱しているようですね。  
ループを継続する条件が指定されているのか、ループを終了する条件を指定されているのかと、どちらが大きいという判定をしているのか、の組み合わせの違いを上手く解釈出来ていないのでは？

以下のような解釈になります。

`while`で`and`だと、両方がTrueの間ループを継続します。どちらかがFalseになったらループ終了です。  
文字列の縦も横も、両方が画像より大きい場合にループを継続します。  
文字列の縦か横か、どちらかが画像より小さくなったら、もう片方が画像より大きくてもループは終了します。

`or`の場合は、どちらかがTrueの間ループを継続します。両方がFalseになったらループ終了です。  
文字列の縦か横か、どちらかが画像より小さくなっても、もう片方が画像より大きければループは継続します。  
文字列の縦も横も、両方が画像より小さくなった時点でループを終了します。


CC BY-SA 4.0
2020-03-27T13:14:37.883
64160
2020-03-27T13:14:37.883
26370
64157
answer