2016-09-07 68 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 Python的序列

错误我收到 类型错误:无法按类型“STR”

+0

我想我能猜到,但以供将来参考,请包括它告诉我们错误(尤其是剩下的部分它在哪条线上)。 – smarx

回答

0

的非INT繁衍序列我认为这个问题是在这条线

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

我认为这个问题是number_of_peoplenumber_of_donuts都是字符串,但你可能想要处理数字。

请尝试以下。 (我加了x = int(x)线到str秒值进行转换,以int秒)

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'可能是下降。不要降低表现(尽量减少OPs代码的变化),只是为了OP的好处提及它。 – ShadowRanger

+0

@ShadowRanger肯定同意。 (你说得对,我特意选择了这条路径来最小化OP代码的变化。) – smarx

+0

@RanniRoscios我不确定你在问什么。我已经将这些行添加到代码中。我只是指出我改变了什么。 (我的代码版本的第三行是第一次更改。) – smarx

相关问题