2017-01-06 7 views
2

変数の代わりに%rを使用しようとしましたが、このコードのように(おそらく間違っていると言いました)。%rを方程式の置き換えに使用するにはどうすればよいですか?

s = int(input("How many sweets do you want to share?:")) 
p = int(input("How many people will they be divided between?:")) 
print("Each person will have %r sweets." % s/p) 
print("There will be %r sweets left over" % s%p) 

そして、これは私のエラーです:

File "pye7.py", line 3, in <module> 
    print("Each person will have %r sweets.") % s/p 
TypeError: unsupported operand type(s) for /: 'str' and 'int' 
+5

オペレータの優先順位。 –

+0

かっこを入れてみてください(%は前に評価されています) –

答えて

2

これは、構文の書式文字列です。基本的な使い方は、%sプレースホルダを使って文字列に値を挿入することです。あなたは括弧で式を囲む必要があるので、文字列に式を挿入しようとしている。

print("Each person will have %r sweets." %(s/p)) 
+3

オペレータの優先順位と括弧がどのように役立つかを少し説明すると、この回答がかなり良くなります。 – Basic

0

Pythonの演算子の優先順位のルールは%がここに/前に評価されていることを指示する(これらの二つの事業者が実際にそう、同じ固有の優先順位を持っています左端が最初に評価されます)。このコンテキストでは、最初の引数が文字列であり、演算子が変数値の書式設定に使用されていますが、両側の引数が数値の場合、ルールはおそらく最も驚くほどに公式化されていました。ルールはオペランドタイプの変更のために変更されません。これは混乱です。

2番目の例を考えてみると、問題がはっきりしています。空白は

fmt % s%p 

fmt%s % p 

ので、物事を変更しないと同じです。どちらが最初に評価されるべきである%? Pythonの答えは、最初の行です。

また
fmt % (arg) 

が、代わりに%のより現代的なfmt.format(...)アプローチを使用します。

はこれを修正するには、括弧を移動するための方法です。

関連する問題