2014-11-21 1 views
-5

다음 함수 각각에 대해 함수가 True을 반환하게 할 인수 값을 찾습니다. 당신의 일을 보여주세요. 힌트 : 이것을 통해 당신의 방법. 가능한 입력 만 고려하십시오. 예를 들어 x + y == 16이고 x> y> 0 인 경우 (15,1), (14,2), ..., (9,7) 만 고려하면됩니다. 총 7 점 (x, y) 밖에 없으며 그 중 하나가 정확해야합니다!파이썬에서이 함수가 True를 반환하게하는 값은 무엇입니까?

def f2(x): 
    return ((type(x) != type(int(x))) and ((x % 1)**2 == int(x % 1)) and 
      (100 > x**2 > 8*x > 0)) 

def f6(x): 
    assert ((type(x) == int) and (1000 > x > 0)) 
    y = x % 10*100 + x/10%10*10 + x/100 
    return ((x == y) and (int(x**0.5) == 11) and (x/125) > (x/135)) 
+0

내 숙제가 아닙니다. 나는 혼자서 CMU 웹 사이트에서 자료를 배우고 있습니다. – SFTB2014

+1

적어도, 당신이 시도한 것을, 비록 그들이 작동하지 않더라도, 그리고 당신이 붙어있는 곳에 보여 주어야합니다. 그리고 교과서 문제와 같은 질문을 쓰지 마십시오. – Rufflewind

+0

그것은 Python2로 작성되었습니다. – SFTB2014

답변

1

질문이 재미처럼 보였다 때문에 내가 당신을 도울 수 있습니다 :

def f2 (x): 
    return ((type(x) != type(int(x))) and 
     # type of x is not the same as the type of (int) x 
     # since it has to be a number (otherwise it'll blow up), 
     # this implies that x is a decimal 
     ((x % 1)**2 == int(x % 1)) and 
     # (x mod 1) squared equals the integer part of (x mod 1) 
     # x has to be a whole number, i.e., 100.0 or 99.0 etc. etc. 
     # Let's see why. Try 8.5 
     # (8.5 % 1)**2 == (0.5 ** 2) == 0.25 
     # this does not equal int(8.5 % 1) == int(0.5) == 0 
     (100 > x**2 > 8*x > 0)) 
     # if x squared is greater than 8*x, x must be greater than 8, 
     # but less than 13. This leaves us with 9.0, 10.0, 11.0, and 12.0, 
     # since we know that x has to be a decimal of the form n.0 
     # 9.0 returns True 

def f6 (x): 
    # x is an integer and (0,1000) exclusive 
    # throws error otherwise 
    assert ((type(x) == int) and (1000 > x > 0)) 
    y = ((x % 10) * 100) + x/10%10*10 + x/100 
    # y is 
    # (x mod 10) * 100 PLUS 
    # ((x/10)%10)*10 PLUS 
    # (x/100) 
    return ((x == y) and (int(x ** 0.5) == 11) and (x/125) > (x/135)) 
    # x equals y 
    # the integer value of the square root of x is 11 
    # this puts x between 121 and 143 inclusive 
    # x/125 (int) is greater than x/135 (int) 
    # this puts x between 125 and 134 

손으로, 그래서 루프를 사용하게 확인하려고하지 :

for x in range(0,10): 
    print(str(x+125) + " " + str(f6(x+125))) 

# prints 
125 False 
126 False 
127 False 
128 False 
129 False 
130 False 
131 True 
132 False 
133 False 
134 False 
+0

고마워요! 문제의 힌트는 오해의 소지가 있습니다. – SFTB2014

+0

@ SFTB2014 실제로는 아닙니다. 그들은 단지 당신에게 입력을 제한하는 방법의 예를 보여줍니다. 예를 들어 입력을 [f6]에 대해 [125,134]로 제한하는 것과 같은 일을했습니다. – royhowie

+0

정수 만 고려합니다. – SFTB2014

0

파트 1 : f2 (x)

((type(x) != type(int(x))) 

"x"는 int가 아니어야하며 int 로의 변환을 지원해야합니다. 따라서 는 "X"는문자열

((x % 1)**2 == int(x % 1)) 

모듈러스 조작자가 제 1 및 제 2 분할 숫자 사이의 나머지를 반환하는 플로트 또는 형태이다. 이 경우 소수점 뒤에있는 숫자의 부분을 반환합니다. 그 결과 ") INT ("-1과 1 사이의 두 번째 부분 "X % 1"반환 번호 및부터는 어느 -1, 0, 또는 1 우리는 말할 수 후 리턴

((x % 1)**2 == -1, 0, or 1) 

더 단순화

((x % 1) == sqrt(-1), 0, or sqrt(1)) 
    ((x % 1) == sqrt(-1), 0, or 1) <--- x % 1 cannot return "1.0" so 
    ((x % 1) == sqrt(-1), 0) 

소수점 이하 자릿수는 "sqrt (-1)"또는 "0"이어야합니다. "sqrt (-1)"은 허수이고 정수로 조작하는 방법에 대한 나의 이해의 영역 밖에 있으므로 다음과 같이 편안하게 말할 수 있다고 생각합니다.

소수점 이하 자릿수는 " 0 ".

x = 9.0 

을하는 경우 :

10 > x > 8 

우리가 얻을 다음 세 가지 초기 조건에 TRUE를 반환하려면 다음

때문에 세 번째 조건을 만족시키기 위해

(100 > x**2 > 8*x > 0)) 
    8*x > 0 
    x > 0 

    100 > x**2 
    10 > x 

    min: x = 0 
    max: x = 10 

    x**2 > 8*x 
    x > 8 

에 이동 파트 2 :,210 F6 (X) :

우리의 첫 번째 가정은 "X"정수, 내가 돌아으로 "Y"의 할당을 건너 뛸 수 있습니다

우선 "X"에 대한 그래서 아무 소수점은 TRUE

"x == y" 
우리는 나중에

우리의 다음 조건을 다루는 것

(int(x**0.5) == 11) 

일부입니다 그의 작품은

11.5 > sqrt(x) > 11 
132.25 >= x >= 121 

(x/125) > (x/135) 

상당히 합리적인되는 최종 상태를 생성합니다.

125*(x/125) > 125*(x/135) 
    x > 125*(x/135) 
    x > (125/135)*x 
    x > 0.92592x 

모든 실수는 다음

1) x is an int 
2) x satisfies that big equation 
3) 132.25 >= x >= 121 
4) x is a real number 

1, 3을 만족시키기 위해 세 가지 조건을 만족하기 위해 해당 조건

을 만족해야하며, 4 : 더 잘 이해 것

x = 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132 

큰 공식을 통해 실행하고 "x == y"를 확인하면

01이 생성됩니다.
x = 131 
관련 문제