2015-01-26 2 views
0

내 파이썬 코드는 임의의 함수 (더하기, 곱하기 또는 빼기)를 결정하기 위해 1에서 3 사이의 숫자를 임의로 생성 할 수 있어야합니다. 그건 잘 작동합니다. 임의로 두 개의 숫자를 생성하고이 임의의 함수를 가져와야합니다. 그래서 3 + 6 = 9와 같은 기본적인 수학 합계가 될 것입니다. 3은 number1로 저장되고 임의로 생성됩니다. +는 함수로 저장되며 무작위로 생성됩니다. 6은 number2로 저장되며 무작위로 생성됩니다.임의의 수학 연산 구현 (+, - 또는 *)

내가 겪고있는 문제는 모든 변수를 결합하여 수학을 해결하는 것입니다. 나는이 일을 왼쪽하고

number1 = 3 
number2 = 8 
function = 3 (for the purposes of this: addition) 

function then is changed to "+" 

(무작위로 생성되었을 것입니다 입력 한 번호) : 분명히 작동하지 않습니다

answer = number1, function, number2 

그래서 나는 다음을 수행 할 수있다.

+1

Google 검색에서 이번 달에 다른 질문이 있음을 알 수 있습니다. http://stackoverflow.com/questions/28000403/randomly-generating-math-questions http : // stackoverflow.com/questions/27755270/python-quiz-isnt-outputting-the-correct-code-at-times http://codereview.stackexchange.com/questions/77299/math-equation-generator-program – Paul

+0

아무도 신경 쓰지 않습니다. 가난한 부서? "수학"을 사용하지 마십시오. "초기 문법 학교 정수 산술"과 같습니다. 해당 수학 태그를 제거하십시오. – duffymo

답변

2

operator 모듈에 정의 된 이진 연산자 함수를 사용할 수 있습니다. operator.add(), operator.sub()operator.mul()은 이름에서 알 수있는 작업을 수행하기 위해 모두 두 개의 인수로 호출 할 수 있습니다.

임의의 세 가지 기능 중 하나를 선택하려면, 당신은 단순히 목록에 넣어 다음 random.choice()가 사용할 수 있습니다

result = random_operator(number1, number2) 
:

operators = [operator.add, operator.sub, operator.mul] 
random_operator = random.choice(operators) 

임의 조작이처럼 숫자에 적용 할 수 있습니다

5

함수를 사용해야합니다! +, -*에 대한 관련 기능은 이미 operator.add, operator.suboperator.mul으로 존재합니다.

import operator 
import random 

op_mappings = {"+":operator.add, 
       "-":operator.sub, 
       "*":operator.mul} 

op = random.choice(["+", "-", "/"]) 
# this is better than mapping them to numbers, since it's 
# immediately obvious to anyone reading your code what's going on 

number1 = random.randint(1,20) 
number2 = random.randint(1,20) 

answer = op_mappings[op](number1, number2) 

운영자 기능 그냥 보통의 표현처럼 작동, 그 말을하는 것입니다 :

operator.add(x,y) == x + y 
# et. al 

그래서 당신은 사전에 객체로 사용할 수있게되었습니다. 이전에 사전을 사용하지 않았다면 지금은 좋은 시간입니다! 위와 같이 해시 맵처럼 유용합니다.

+1

'op = random.choice ([operator.add, ...])'도 할 수 있습니다. – Kevin

+1

@Kevin 예, 원래는'randint (1,3)'지도를 운영자에게 저장하려고했으나 너무 추악하여 살 수 없었습니다. 이것은 내 타협이었습니다 –

1
number1 = randint(1,20) 
number2 = randint(1,20) 

if function == 1: 
    answer = number1 + number2 
elif function == 2: 
    answer = number1 - number2 
elif function == 3: 
    answer = number1 * number2 

당신은 그것을 생각할 필요가 없습니다.

+0

'운영자'솔루션보다 강력하지는 않지만이 간단한 경우에 대해 바람직한 대답 일 수 있습니다. –

0

연산자 모듈을 사용하면 옆에 있습니다. 문자열을 코드로 평가할 수 있습니다.

예 :

import random 

number1 = random.randint(1,9) 
operator = random.choice(r"+-/*") 
number2 = random.randint(1,9) 

result = eval(str(number1) + operator + str(number2)) 
print(number1,operator,number2,"=",result) 

출력 : eval가 사용자 상호 작용에서 오는 input에서 오는 사람들, 또는 같은 신뢰할 수없는 입력을 사용하지 않아야한다는

8 * 4 = 32 
  • 참고

    .본질적으로 코드를 실행하기 때문에 내부에 악의적 인 코드가 있으면 IT가 실행합니다.