2016-09-07 2 views
0
number_of_people = input("Enter number of people attending the picnic: ") 
if number_of_people.isnumeric(): 

    number_of_donuts = input("Enter number of donuts each person will want: ") 
    if number_of_donuts.isnumeric(): 

     min_box = (number_of_people * number_of_donuts) // 12 
     box_remainder = (number_of_people * number_of_donuts) % 12 
     if box_remainder != 0: 
      min_box = min_box + 1 

     print("Minimum boxes of donuts needed: ", min_box) 

     donuts_left = (min_box * 12) - (number_of_people * number_of_donuts) 
     print("Donuts left over:", donuts_left) 

     if min_box <= 5: 
      donut_cost = 8 * min_box 
     elif min_box <= 20: 
      donut_cost = 7.50 * min_box 
     else: 
      donut_cost = 6 * min_box 

     print ("Donuts cost: ",format(donut_cost, '.2f')) 

    else: 
     print(number_of_donuts, "is not a valid number") 

else: 
    print (number_of_people, "is not a valid number") 

나는 정말로 혼란 스럽다. 나는 사람들에게 그들이 잘못된 입력을하고 있다고 말할 수 있기를 원하지만 입력을 int (입력)로 변경하면 int를 넣지 않으면 사용자에게 알려주는 방법을 모른다.비 Int 파이썬으로 시퀀스를 곱할 수 없다

오류 내가받을 형식 오류 : 타입 'STR'

+0

내가 그것을 추측 할 수 있었다 생각 (나는. int들에 str들 변환 할 x = int(x) 라인을 추가),하지만 나중에 참조 할 수 있도록, 우리에게 오류 (특히 부분의 나머지 부분을 포함하십시오 어느 선이 있는지). – smarx

답변

0

의 비 INT에 의해 순서를 곱 수 없습니다 나는 문제는이 라인에 가정

donuts_left = (min_box * 12) - (number_of_people * number_of_donuts) 

나는 문제가있다 생각 number_of_peoplenumber_of_donuts은 두 문자열이지만 숫자를 다루는 것이 좋습니다.

다음을 시도해보십시오.

number_of_people = input("Enter number of people attending the picnic: ") 
if number_of_people.isnumeric(): 
    number_of_people = int(number_of_people) 

    number_of_donuts = input("Enter number of donuts each person will want: ") 
    if number_of_donuts.isnumeric(): 
     number_of_donuts = int(number_of_donuts) 

     min_box = (number_of_people * number_of_donuts) // 12 
     box_remainder = (number_of_people * number_of_donuts) % 12 
     if box_remainder != 0: 
      min_box = min_box + 1 

     print("Minimum boxes of donuts needed: ", min_box) 

     donuts_left = (min_box * 12) - (number_of_people * number_of_donuts) 
     print("Donuts left over:", donuts_left) 

     if min_box <= 5: 
      donut_cost = 8 * min_box 
     elif min_box <= 20: 
      donut_cost = 7.50 * min_box 
     else: 
      donut_cost = 6 * min_box 

     print ("Donuts cost: ",format(donut_cost, '.2f')) 

    else: 
     print(number_of_donuts, "is not a valid number") 

else: 
    print (number_of_people, "is not a valid number") 
+0

일반적으로 'int'변환을 수행하고 오류를 잡아 내려면 'isnumeric' 테스트를 수행하지 말고 변환하십시오. 단순한 경우조차도, 'isnumeric'은 int보다 더 엄격합니다. (int가 매끄럽게 무시하는) 음수 나 앞뒤 공백을 받아들이지 않을 것입니다. OP는'isnumeric' 테스팅을 사용하고 있었지만 어쨌든'int' 변환을 추가해야하므로'isnumeric'가 될 수 있습니다. 떨어졌다. downvoting (OP 코드의 변경을 최소화하는 것은 괜찮습니다.), OP의 이익을 위해 언급하십시오. – ShadowRanger

+0

@ShadowRanger 확실히 동의 함. (그리고 OP의 코드 변경을 최소화하기 위해 특별히이 경로를 선택했다는 것이 옳은 것입니다.) – smarx

+0

@RanniRoscios 나는 당신이 무엇을 요구하는지 확신하지 못합니다. 이미 코드에이 줄을 추가했습니다. 나는 내가 바꾼 것을 지적하고 있었다. (코드의 제 3 행은 최초의 변경입니다.) – smarx

관련 문제