どうやってmath.ceil
次の10のべき乗に番号が割り当てられるように?
# 0.04 -> 0.1
# 0.7 -> 1
# 1.1 -> 10
# 90 -> 100
# ...
私の現在の解決策は入力数の範囲をチェックする辞書ですが、それはハードコードされており、1行の解決策を好みます。多分私はここで単純な数学のトリックまたは対応する派手な関数を欠いていますか?
これをチェック!
_>>> i = 0.04123
>>> print i, 10 ** len(str(int(i))) if int(i) > 1 else 10 if i > 1.0 else 1 if i > 0.1 else 10 ** (1 - min([("%.100f" % i).replace('.', '').index(k) for k in [str(j) for j in xrange(1, 10) if str(j) in "%.100f" % i]]))
0.04123 0.1
>>> i = 0.712
>>> print i, 10 ** len(str(int(i))) if int(i) > 1 else 10 if i > 1.0 else 1 if i > 0.1 else 10 ** (1 - min([("%.100f" % i).replace('.', '').index(k) for k in [str(j) for j in xrange(1, 10) if str(j) in "%.100f" % i]]))
0.712 1
>>> i = 1.1
>>> print i, 10 ** len(str(int(i))) if int(i) > 1 else 10 if i > 1.0 else 1 if i > 0.1 else 10 ** (1 - min([("%.100f" % i).replace('.', '').index(k) for k in [str(j) for j in xrange(1, 10) if str(j) in "%.100f" % i]]))
1.1 10
>>> i = 90
>>> print i, 10 ** len(str(int(i))) if int(i) > 1 else 10 if i > 1.0 else 1 if i > 0.1 else 10 ** (1 - min([("%.100f" % i).replace('.', '').index(k) for k in [str(j) for j in xrange(1, 10) if str(j) in "%.100f" % i]]))
90 100
_
このコードは、len(str(int(float_number)))
の10のべき乗の原理に基づいています。
4つのケースがあります。
int(i) > 1
。
Float
数値-int
に変換され、その後、それから文字列str()
がstring
をlength
に変換します。正確に見ています。したがって、最初の部分は、入力_i > 1.0
_の場合、この長さの10の_10
_です。
i > 1.0
_および_i > 0.1
_ <=>それぞれ_10
_および_1
_です。i < 0.1
_の場合:ここで、10は負のべき乗になります。コンマの後に最初のゼロ以外の要素を取得するために、このような構造_("%.100f" % i).replace('.', '').index(k)
_を使用しました。ここで、kは_[1:10]
_間隔にわたって実行されます。その後、結果リストを最小限にしてください。そして、1ずつ減少します。これは最初のゼロであり、カウントされます。また、ここで標準のpythonのindex()
は、_[1:10]
_間隔からゼロ以外の要素が1つも見つからない場合、クラッシュする可能性があります。そのため、結局、発生によってリストを「フィルター」する必要があります: if str(j) in "%.100f" % i
。さらに、より正確に取得するために、_%.100f
_は異なる場合があります。私は最も簡単な方法だと思います:
import math
number = int(input('Enter a number: '))
next_pow_ten = round(10 ** math.ceil(math.log10(number)))
print(str(10) + ' power ' + str(round(math.log10(number))) + ' = '\
+ str(next_pow_ten))
これがお役に立てば幸いです。
y = math.ceil(x)
z = y + (10 - (y % 10))
このような何か?それは私の頭の上にありますが、ターミナルでいくつかの数字を試したときにうまくいきました。