2013-04-12 2 views
3

그래서 파이썬으로 간단한 게임을 만들어서 언어에 대해 더 익숙해지며, 이전에 물어 본 경우 검색 방법을 찾지 못했습니다. : P Any-way,이 코드 블록이 실행될 때, 나는 항상 나의 "Position"이 .y +10이된다.python if 문 항상 사용

print('Lage: X:', Me.Position.X, ' Y:', Me.Position.Y, ' Z:', Me.Position.Z) 

어떠한 방식으로 : 나는 rearanged 및 몇 가지를 확인하지만, 기분이 한 나는 일반적으로

mv = input('N,S,E,W?') 

if mv == 'N' or 'n': 
    Me.Position.Y += 10  
elif mv == 'E' or 'e': 
    Me.Position.X += 10  
elif mv == 'W' or 'w': 
    Me.Position.X -= 10  
elif mv == 'S' or 's': 
    Me.Position.Y -= 10 
else: 
    print('Stand') 

다음 스위치 문으로 처리하는 것이 무엇의 아주 기본적인 부분을 누락 내 다른 옵션을 사용하고 있습니다.

고맙습니다!

+2

이 질문은 이미 수백 번을왔다, 그러나 나는 아직도 중복으로 표시하는 하나를 찾기 위해 실패합니다. 어리석은 unsearchable 문제점. – delnan

+1

@delnan - 여기 있습니다 ... :) - [a] (http://stackoverflow.com/questions/13305089/issues-with-a-if-else-loop-in-python?rq=1) [ 몇] (http://stackoverflow.com/questions/14173108/python-if-elif-else-usage-and-clarification?rq=1) [more] (http://stackoverflow.com/questions/15329646/python -program-error-elif-else-if? rq = 1) [유사] (http://stackoverflow.com/questions/15348879/if-else-statment-not-following-the-elif-correctly?rq=1) – mata

답변

4

문제는 if -statement에서 or입니다 : mv == 'N'False로 평가

경우에도 비어 있지 않은 문자열 'n'mv == 'N' or 'n' 항상 True되도록, True로 평가합니다.

은 당신이 원하는 것은 :

if mv in ['n', 'N']: 
    Me.Position.Y += 10 

또는 단지 :

if mv in 'nN': 
    Me.Position.Y += 10 
+1

아, 아마도 mv == 'N'또는 mv == 'n'이 더 좋았을 것입니다. 그러나 더 간결한 대답을 해주셔서 감사합니다. D – naMretupmoC

11

코드가 예상 한 것과 약간 다르게 해석됩니다. 이 줄 : 그래서 당신의 if 문은 항상 True이 될 것

if (mv == 'N') or ('n'): 

'n'가 truthy입니다 :

if mv == 'N' or 'n': 

는 것으로 해석되고있다.

if mv == 'N' or mv == 'n': 

또는 in 사용 :

if mv.lower() == 'n': 
2

더 좋은 방법은 당신의 대답은 튜플에 있는지 확인하는 것입니다 :

if mv in ['N', 'n']: 

또는 .lower()을 사용하여 좀 더 명시해야 가능한 답변 중

In [1]: mv in ('n', 'N') 
Out[1]: True 

튜플은 변경 불가능하므로 선호합니다. 당신이 당신의 원본 코드를 고수 할 경우

mv ='n' 

다음

In [2]: mv == 'n' 
Out[2]: True 

In [3]: mv == 'N' 
Out[3]: False 

In [4]: mv == 'N' or 'n' 
Out[4]: 'n' 

하지만

을 부여하기 때문에

그러나 , 당신은

if mv == 'N' or mv == 'n': 

를 사용하려면

In [5]: mv == 'n' or mv == 'N' 
Out[5]: True 

나는 원래의 의도가 무엇인지 믿습니다.