2014-10-19 3 views
3

저는 현재 Zed Shaw의 Python에 관한 책을 읽고 있습니다. Python을 배우는 것은 어려운 길이며 기능에 대해 배우고 있습니다. 나는 수업과 함께 진행된 추가 크레딧 연습을 따르기로 결정하고 IF ELSE 흐름 진술을 추가했습니다. 이것은 아래에있는 코드입니다.if ... Python에서 raw_input을 사용하는 else 문 문제

print "How much bottles of water do you have?" 
water = raw_input("> ") 

print "How many pounds of food do you have?" 
food = raw_input("> ") 

if food == 1: 
    def water_and_food(bottles_of_water, food): 
     print "You have %s bottles of water" % bottles_of_water 
     print "And %s pound of food" % food 

else: 
    def water_and_food(bottles_of_water, food): 
     print "You have %s bottles of water" % bottles_of_water 
     print "And %s pounds of food" % food 

water_and_food(water, food) 

내가 원하는 것은 이것입니다. 사용자가 1 파운드의 음식을 입력하면 "1 파운드의 음식이 있습니다"라고 표시됩니다. 2 파운드 이상의 음식을 입력하면 "2 파운드의 음식을 먹었습니다", 파운드의 차이 단수 또는 복수.

그러나 1을 입력하면 "1 파운드의 음식"이 표시되지만 변수 물과 음식에 직접 숫자를 할당하면 작동합니다.

답변

4

반환 값 raw_input은 문자열이지만 음식 값을 확인할 때 int를 사용하고 있습니다. 즉, if food == 1은 결코 True이 될 수 없으므로 흐름은 항상 복수형으로 기본 설정됩니다. 위의 코드는 정수 타입에 food 캐스팅되지만, 사용자가 숫자를 입력하지 않을 경우 예외가 발생합니다

if int(food) == 1: 

:

당신은 두 가지 옵션이 있습니다.

if food == '1': 

위의 코드는 문자열 '1'이 아닌 정수 (주변 시세를 참고) 확인하고 있습니다.

+1

도움을 주셔서 대단히 감사합니다. 그는 raw_input이 항상 문자열을 반환한다고 언급했을 지 모르지만 나는 잊어 버렸을 것입니다. 지금은 잘 작동하는데 도움을 주셔서 감사합니다. – Matt

+1

@Matt 도움이된다면 유효한 답으로 Narpar1217의 답변을 수락하십시오. – user3378649

1

Python 2.x에서 raw_input은 문자열을 반환합니다. 코드를 살펴보면 정수를 반환하는 input을 사용할 수도 있습니다. 나는 이것이 파이썬 2를 사용하는 가장 explicit 옵션이라고 생각한다.

그런 다음 % s 대신 % d를 사용하여 코드 전체에서 음식을 int로 처리 할 수 ​​있습니다. 비 int를 입력하면 프로그램에서 예외가 발생합니다.