2017-04-20 5 views
-2

이것은 내 계산기입니다. 내 친구가 내게 12 줄을 써서 도전했기 때문에 나는 그것을 만들었다. 나는 죽었다! 이제는 더 짧게하려고 시도했지만 이론적으로는 더 짧아 질 수 없습니다. 프로그램은 다음을 준수해야합니다. 1 : 모든 것을 설명하고 입력 (첫 번째 줄)을 묻습니다. 2 : 입력 (두 번째 줄) 3 : print (the answer) 4 to 12 :은 논리와 연산으로 구성됩니다.내 계산기 코드 단축 (python3)

나는 내 코드를보고 새로운 것을 가르쳐달라고한다. 12 줄 이하로 만드는 법!

미리 감사드립니다. (. 추신 : 내가 학교에 대한이 일을하고 있지 않다, 이것은 단지 재미를 위해 내가 내 자신의 시간에 알아보기)

파이썬 3 다음과 같습니다

print("\n enter 'first number' \n then the 'second number' \n then enter the 'type of operation': + - */ ") 
a,b,c = [(input("Enter : ")) for i in range(0,3) ] 
def op(a,b,c): 
    if c == '+': 
     return(float(a)+float(b)) 
    elif c == '*': 
     return(float(a)*float(b)) 
    elif c == '/': 
     return(float(a)/float(b)) 
    elif c == '-': 
     return(float(a)-float(b)) 
print('your answer is: ',op(a,b,c)) 
+0

: 1과 2가 결합 될 수있다 , 당신의'if /'elif' 문장은 모두 2 줄에서 1 줄로 줄일 수 있습니다. 하지만 대신 operator' 모듈의 연산자 사전을 사용할 것입니다 :'ops = { '+': operator .__ add__, ...} ' –

답변

1

하나를 들어, 사용할 수 있습니다 astliteral_eval 문자열 리터럴을 안전하게 평가할 수 있습니다.

import ast 
print("\n enter 'first number' \n then the 'second number' \n then enter the 'type of operation': + - */ ") 
a,b,c = [(input("Enter : ")) for i in range(0,3) ] 
def op(a,b,c): 
    return ast.literal_eval("%f%s%f"%(a, c, b)) 
print('your answer is: ',op(a,b,c)) 

또는 당신은 될 줄하는 cheaty하지만, 지저분한, 한 줄 솔루션을 계산하기를 원한다면 :이 라인의 수를 단지 인 경우

print("\n enter 'first number' \n then the 'second number' \n then enter the 'type of operation': + - */ ");print('your answer is: ',__import__("ast").literal_eval("{0}{2}{1}".format(*[float(input("Enter : ")) if i != 2 else input("Enter : ") for i in range(0,3)]))) 
+0

메소드 정의가 필요하지 않습니다. –

+0

@abccd wOw. 감사 – KOOLz