2013-02-14 3 views
2

코드는 파이썬 3.3으로 작성되었으며 첫 번째 if 문에서만 작동하며 if 문이 잘못되어도 다른 elif 문은 인정하지 않습니다.원형 계산기가 올바르게 작동하지 않습니다.

calccircle() 

알고 계신 데이터가 있습니까? 반경

Enter Diameter def calccircle(): 
     x = input("What data do you know? ") 
     if x == "Diameter" or "diameter": 
      a = int(input("Enter Diameter ")) 
      print("Circumference is", a * math.pi) 
      print("Area is", math.pi * math.pow(a/2,2)) 
      print("Radius is:",a/2) 
     elif x == "Radius" or "radius": 
      b = input("Enter radius: ") 
      print("Circumference is", b * 2 * math.pi) 
      print("Area is", math.pi * math.pow(b,2)) 
      print("Diameter is", b * 2) 
     elif x == "area" or "Area": 
      c = input("Enter area: ") 
      print("Circumference is", ((math.sqrt(c))/math.pi) * b * 2 * math.pi) 
      print("Diameter is", math.sqrt(c) * math.pi * 2) 
      print("Radius is", math.sqrt(c) * math.pi) 
     elif x == "circumference" or "Circumference": 
      d = input("Enter Circumference: ") 
      print("Area is", math.pi * math.pow(d/math.pi,2)) 
      print("Diameter is", d/math.pi * 2) 
      print("Radius is", d/math.pi) 

입력 내용 ("Enter diameter :")이 표시되며 작성한 내용이나 if 문에주의하지 않습니다.

calccircle() 알고 계신 데이터가 있습니까? 반경 입력 직경

공지 사항 나는 반경을 작성, 입력 ("반지름을 입력은 :") 실행하는데, 해당 기능을 수행하지 못합니다. 도와주세요.

if (x == "Diameter") or "diameter": 

, x != "Diameter"이 같은입니다 : 항상 통과합니다

if "diameter": 

if x == "Diameter" or "diameter": 

같이 파이썬에 보이는 :

+0

어떤 언어입니까? 나는 혼란스러워. – Piccolo

+0

Python 3.3. 미안, 나는 그것을 언급했다고 생각했다. 내 실수 – user2070615

답변

4

귀하의 문제는 이것이다.

파이썬은 if 문장의 맥락에서 FalseFalse, None, "", [], {}, ... 취급 등 (또는 당신은 그 (것), 또는 다양한 다른 장소에 bool를 호출하는 경우) 및 True 등 다른 대부분의 모든 것을. 이것은 종종 편리하지만, or 문에 대한 약간의 혼란과 결합하여 Python에 익숙하지 않은 많은 사람들이 실수하게 만듭니다.

대신, 다음 중 하나를 수행합니다

if x == "Diameter" or x == "diameter": # most direct translation 
if x in {"Diameter", "diameter"}: # very slightly faster, a little less typing 
if x.lower() == "diameter": # also allows DIAmeter, etc 

그것은 당신이

if x == ("Diameter" or "diameter"): 

같은 것을 쓴 경우이

if x == "Diameter": 
와 같은 것이라고 주목할 가치

이후 "Diameter" or "diameter""Diameter"True ish 인 것을 확인하고이를 반환합니다.

+0

영어로 쉼표와 "또는"(및 "와")를 사용하여 다양한 대안을 나열 할 수 있습니다. 프로그래밍 언어에서 "또는"절대로 그런 식으로 작동하지 않습니다. 거의 항상 부울 연산자입니다. 짧은 컷 평가, 불리언 캐스팅, 정상적인 패턴을 깨지 않으면 서 유용한 유용한 트릭을 허용하는 파이썬이하는 일과 같은 몇 가지 일반적인 주름이 있습니다. 파이톤 스의 경우 이러한 추가 트릭은 "x if c else y"구문이 추가되기 전에 작성되었으며 대부분 같은 효과를 얻으려는 시도가 잘못되었습니다. 즉 가장 피해야합니다. – Steve314

+0

와우! 고맙습니다. 코드는 이제 다음과 같습니다 : – user2070615

+0

@ user2070615 기꺼이 도와 드리겠습니다! 일반적으로 SO에서 더 이상 문제가없는 한 수정 된 코드를 게시 할 필요가 거의 없으며,이 경우 답변으로 게시하는 대신 질문에 편집해야합니다. 또한 문제가 해결되면 [답변 수락]해야합니다 (http://meta.stackexchange.com/a/5235). – Dougal

관련 문제