2013-06-11 3 views
-1
#this is my very first python attempt 
#Getting the name 
print "" 
name = raw_input("Hello, adventurer. Before we get started, why don't you tell me your name.") 
while name in (""): 
    print "Sorry, I didn't get that." 
    name = raw_input("What is your name?") 

if len(name) > 0: 
    print "" 
    print "%s? Good name! I hope you are ready to start your adventure!" % name 

#getting right or left 
print "" 
print "Well %s, we are going to head north along the river, so get a move on!" % name 
print "" 
question = "As you head out, you quickly come across a fork in the road. One path goes right, the other goes left. Which do you chose: right or left?" 
lor = raw_input(question).strip().lower() 
while not "left".startswith(lor) and not "right".startswith(lor): 
    print "That's not a direction." 
    lor = raw_input(question).strip().lower() 

if len(lor) > 0: 
    if "left".startswith(lor): 
     print "You went left" 
    elif "right".startswith(lor): 
     print "You went right" 
else: 
    print "That's not a direction." 
    lor = raw_input(question).strip().lower() 

내가 잘못하고있는 것을 이해하지 못합니다. 이 코드를 실행하면 question이 표시됩니다. as raw_input. 내가 아무 것도 넣지 않으면 올바르게 "그건 방향이 아니야"라고 말하면서 두 번째 질문을 제기합니다. 그러나 다음에 내가 무엇을 넣을 때, 내가 입력 한 것과 상관없이 대답으로 비어 있습니다. 왜 계속 반복되지 않습니까?내 코드가 올바르지 않습니다.

+1

질문을 편집하면 요청한 내용이 더 분명해질 수 있습니까? (그렇지 않으면, 모드가 당신의 질문을 닫을 것입니다.) – 2rs2ts

+5

''left ".startswith (lor)'는 다른 길을 가야합니다 :'lor.startswith ('left')'. 그것은 아마 그 방식으로도 더 의미가 있습니다. – Blender

+2

또한 매우 비슷한 질문을 게시하고있는 것을 보았습니다. 각 질문에 "이것은 내 첫번째 파이썬 시도입니다."라고 말합니다. 그게 확실한가요? – 2rs2ts

답변

4

문제는 "left".startswith("")이 True를 반환한다는 것입니다. 따라서 처음에 대답하지 않으면 while 루프에서 깨어납니다 ("left"""으로 시작하기 때문에). if/else로 이동합니다.

if 문에서 lor의 값은 ""이므로 else 포크로 끝납니다. 이 시점에서 질문이 다시 제기되지만 사용자가 응답하면 lor의 새 값으로는 아무 것도 수행되지 않습니다.

나는 읽을 수 있도록 while 루프를 편집하는 것이 좋습니다 :

while lor == "" or (not "left".startswith(lor) and not "right".startswith(lor)): 

대답은 "left"또는 "right"로 시작하고 빈 문자열이 아닌 경우에만 while 루프의 탈옥이 방법을.

유용 아무것도 :)

+1

나는이 솔루션이 의견에서 제안한 것보다 낫다. 아마도 이것은 ''왼쪽 ''의 모든 하위 문자열을 프롬프트에 대한 응답으로 사용할 수 있습니다. ''나는 –

2

"left".startswith(lor) 주위에 다른 방법으로해야하지 않기 때문에 당신은 또한 최종 else 문을 제거해야합니다 lor.startswith('left')
같은이 "right".startswith(lor)도 마찬가지입니다.

관련 문제