6

Pythonで値のモジュラスを実行しようとしていますが、私の知識から、モジュラスを文字列のフォーマット定数として解釈しているため、エラーが発生します。私の最初の推測はこれを型キャストすることですが、それからハングします。

    val = pow(a,n,p)
    val = y1*val
    val = val % p

この質問に対応する2行のコードはありますか。現在、これを実行すると、次のようになります。TypeError:文字列のフォーマット中にすべての引数が変換されたわけではありません。2行目。

valを整数にラップして型キャストすると、計算に非常に時間がかかります。

私はPythonにあまり熟練していません、私の推測では、私は単純なものが欠けていると思いますが、何ですか?

4

2 に答える 2

5

yuがこのエラーを受け取っている場合、y1自体は文字列です。文字列を使用して数値計算を実行することはできません-"int(y1)"を実行すると、キャストではなく、文字列内の文字で表される数値を実際の数値に変換します-これが唯一の方法です数値演算を実行します。

これがtakinthtalogの場合、「y1 * val」をintに変換しようとしている可能性があります。これはすでに間違っています。y1が文字列の場合、「y1 * val」は、y1を「val」回連結したものになります。ですから、それは本当に膨大な数になるでしょう。乗算する前に、「y1」の値を数値として持つ必要があります-次のように。

val  = int(y1) * val
于 2012-03-20T18:13:27.603 に答える
2

このコードからわかるように、%演算子は文字列と数値では意味が異なります。

>>> 1 % 2
1
>>> '1' % 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

私の推測では、それy1は実際には文字列です。タイプの違いはy1次のとおりです。

>>> val = 10
>>> y1 = '2'
>>> val * y1
'2222222222'
>>> y1 = 2
>>> val * y1
20
于 2012-03-20T18:22:09.103 に答える