3

cmathの除算関数から導出された数値を「整数」に丸めようとしていますが、プログラムの性質上、結果がマイナスになることがよくあります。

コード例:

strength = input("Input Strength Stat: ")
str_mod = round(strength/2)

ただし、この結果、Pythonの奇妙さのために、たとえばstr_mod、丸めの前に-1.5のような結果になる場合(必要に応じて-2ではなく-1になります) 、常にゼロに近くなります。

これは、カスタムのペンと紙のRPGシステム用に自動派生された統計計算スクリプトを作成しようとしているため、望ましい動作ではありません。私が望んでいるのは、丸め時にスクリプトが-1.5、-2.0で戻ることです。同様に正の数を切り上げながら、これを実行できる必要があります。

4

4 に答える 4

4

これは、(切り捨てられた)intをから取得しているためです。strength/2

試すstrength/2.0

これはPythonの奇妙なことではありませんが、ほとんどの言語が数値の型をキャストする方法です

5/2 = 2

5 / 2.0 = 2.5

于 2012-07-13T22:01:15.287 に答える
3

あなたはこれを安全な方法で行うことができます:

strength = float(raw_input("Input Strength Stat:"))
str_mod = round(strength/2)

divisionこの場合、強度はフロートであることが保証されているため、切り捨てやからのインポートを気にすることなく、安全に2で除算できます__future__。ボーナスとして、あなたはあなたのゲームの巨大なセキュリティ責任も取り除きます。

入力を使用すると、ユーザーはシステムに重大な損傷を与える可能性があります。

RPG console> Input Strength Stat: __import__('os').system('rm -r ~')
                                 #^ User input (don't try this!)
于 2012-07-13T22:08:22.380 に答える
0

RPGと同じ丸めを取得するには、Decimalを使用する必要がある場合があります。Decimalを使用すると、丸めモードを上、下、半分上などに設定できます。

于 2012-07-13T22:03:42.567 に答える
0

または、次のことを試すこともできます。

from __future__ import division

py3k除算を使用するため。(たとえば、結果は常にフロートになります)

于 2012-07-13T22:05:24.923 に答える