정수, 즉 12,000보다 작은 가장 큰 큐브 루트를 찾으려고합니다.
processing = True
n = 12000
while processing:
n -= 1
if n ** (1/3) == #checks to see if this has decimals or not
정수인지 아닌지 확인하는 방법을 잘 모르겠습니다! 문자열로 변환 한 다음 색인을 사용하여 최종 값을 확인하고 값이 0인지 여부를 확인하면 다소 번거로울 수 있습니다. 더 간단한 방법이 있습니까?
답변
float 값이 정수인지 확인하려면 다음 float.is_integer()
방법을 사용하십시오 .
>>> (1.0).is_integer()
True
>>> (1.555).is_integer()
False
이 메소드는 float
Python 2.6 에서 유형에 추가되었습니다 .
파이썬 2 것을 고려 1/3
이다 0
(a는 (! 정수 피연산자 바닥 부문) 및 소수점 연산 부동 부정확가 될 수 있다는 float
이진 분수, 사용하여 근사 하지 정확한 실수를). 그러나 루프를 약간 조정하면 다음이 제공됩니다.
>>> for n in range(12000, -1, -1):
... if (n ** (1.0/3)).is_integer():
... print n
...
27
8
1
0
이는 앞에서 언급 한 부정확성으로 인해 3 큐브 이상 (10648 포함)이 누락되었음을 의미합니다.
>>> (4**3) ** (1.0/3)
3.9999999999999996
>>> 10648 ** (1.0/3)
21.999999999999996
대신 정수에 가까운 숫자를 확인 하거나 float()
숫자를 찾는 데 사용하지 않아야합니다 . 큐브 루트를 반올림하는 것처럼 12000
:
>>> int(12000 ** (1.0/3))
22
>>> 22 ** 3
10648
Python 3.5 이상을 사용하는 경우 math.isclose()
함수 를 사용하여 부동 소수점 값이 구성 가능한 여백 내에 있는지 확인할 수 있습니다 .
>>> from math import isclose
>>> isclose((4**3) ** (1.0/3), 4)
True
>>> isclose(10648 ** (1.0/3), 22)
True
이전 버전의 경우 PEP485에 언급 된 대로 해당 기능의 순진한 구현 (오류 검사 건너 뛰기 및 무한대 및 NaN 무시) :
def isclose(a, b, rel_tol=1e-9, abs_tol=0.0):
return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
답변
모듈로 (%) 연산자를 사용할 수 있습니다. 이것은 우리가 x를 y- 표현식으로 나눌 때 얼마나 많은 나머지를 가지고 있는지 알려줍니다 x % y
. 모든 정수는 1로 나눠야하므로 나머지가 있으면 정수가 아니어야합니다.
이 함수는 정수 인지 여부에 따라 부울 True
또는 을 반환합니다 .False
n
def is_whole(n):
return n % 1 == 0
답변
이것을 사용할 수 있습니다 :
if k == int(k):
print(str(k) + " is a whole number!")
답변
루핑하거나 확인할 필요가 없습니다. 12,000의 큐브 루트를 가져 와서 반올림하십시오.
r = int(12000**(1/3.0))
print r*r*r # 10648
답변
이를 위해 모듈로 연산을 사용할 수 있습니다 .
if (n ** (1.0/3)) % 1 != 0:
print("We have a decimal number here!")
답변
큐브 뿌리를 테스트하는 것이 쉽지 않습니까? 20 (20 ** 3 = 8000)으로 시작하고 30 (30 ** 3 = 27000)까지 올라갑니다. 그런 다음 10 개 미만의 정수를 테스트해야합니다.
for i in range(20, 30):
print("Trying {0}".format(i))
if i ** 3 > 12000:
print("Maximum integral cube root less than 12000: {0}".format(i - 1))
break
답변
어때요?
if x%1==0:
print "is integer"