如何使用其他功能的返回答案到下一个?

时间:2017-11-11 14:13:07

标签: python python-3.x

我有这个程序,我想用菜单包计算表数的价格:

noPeople = int(input('enter no. of people:'))
def calculateTableTotal(noPeople):
    if noPeople <= 15:
        return('Tables:',1)

    elif (noPeople >= 16) or (noPeople <= 35):
        return('Tables:',3)

    elif (noPeople >= 36) or (noPeople <= 55):
        return('Tables:',5)

    elif (noPeople >= 56) or (noPeople <= 75):
        return('Tables:',7)
calculateTableTotal(noPeople)

print('''
-------------------------------------------------------------
Menu Option
-------------------------------------------------------------

[1] 768.88 Package          [3] 1118.88 Package
[2] 898.88 Package          [4] 1488.88 Package
''')

totalTable = calculateTableTotal(noPeople)
choice = input('enter menu choice:')
def calculateMenuPrice(totalTable,choice):
    if choice == '1':
        print('Total:',totalTable*(int(768.88)))

    if choice == '2':
        print('Total:',totalTable*(int(898.88))

    if choice == '3':
        print('Total:',totalTable*(int(1118.88))

    if choice == '4':
        print('Total:',totalTable*(int(1488.88)))

calculateMenuPrice(totalTable,choice)

似乎答案一直在重复(返回(&#39;表格:&#39;)):

enter no. of people:34

-------------------------------------------------------------
Menu Option
-------------------------------------------------------------

[1] 768.88 Package          [3] 1118.88 Package
[2] 898.88 Package          [4] 1488.88 Package

enter menu choice:1

    ('Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3, 'Tables:', 3,.....

我应该如何修复我的程序,以便计算菜单包的价格和表格数量:

enter no. of people:34

    -------------------------------------------------------------
    Menu Option
    -------------------------------------------------------------

    [1] 768.88 Package          [3] 1118.88 Package
    [2] 898.88 Package          [4] 1488.88 Package

    enter menu choice:1
    Total:2306.64

请帮助。我是python的新手。感谢

3 个答案:

答案 0 :(得分:3)

您的问题是函数的返回,例如

('Tables:',1)

是一个元组(一个容器),而不是一个数字。你在返回的元组上做乘法,而不是数字。只需摆脱“表格:”部分。

更改所有回报
return('Tables:',1)

return 1

我不确定为什么你把一个元组中的返回包装起来并给它一个“Tables”元素,但这肯定不是你想要达到最终目标的。

正如评论中所述,您的代码也包含语法错误;你在两条线路上错过了)(int(898.88))应为totalTable*(int(898.88))),其下方的行也需要右括号。

答案 1 :(得分:1)

首先,你的代码有很多问题。我确定你宁愿用这种方式定义calculateTableTotal(noPeople)

def calculateTableTotal(noPeople):
    if noPeople <= 15:
        return('Tables:', 1)

    elif noPeople <= 35:
        return('Tables:', 3)

    elif noPeople <= 55:
        return('Tables:', 5)

    elif noPeople <= 75:
        return('Tables:', 7)

或者,您可以使用and代替or。如果您使用or,则无论elif的值是多少,第一noPeople始终为真,因为每个数字都大于16或小于35。

至于你的问题,你有多个值的原因是因为在python中,将list / tuple与一个整数相乘会创建一个新的list / tuple,其值重复次数与整数指定的次数相同。例如,

print([1, 2] * 3)

会给你输出,

[1, 2, 1, 2, 1, 2]

如果您真的希望将'Tables'作为返回值的一部分,则可以使用此方法

table, totalTable = calculateTableTotal(noPeople)
choice = input('enter menu choice:')
calculateMenuPrice(totalTable,choice)

或者,您最好能够做Carcigenicate所说的并改变返回值。

答案 2 :(得分:0)

我已经纠正了您的源代码。只有一些评论。

我不了解一切,你做了什么!一些例子:如果你有16个人,那么他们在你的餐厅需要3个桌子,但如果有35个人(16 * 2 = 32个人!!!),那么他们还需要3个桌子吗?这些表格必须令人印象深刻。

为什么要免费为客户提供一些钱?为什么用整数计算(&#34; int(768.88)&#34;),当你可以用浮点数计算得更好?

我不喜欢你的菜单代码,我认为将数据存储在字典中并从那里动态制作菜单并使用相同的数据来计算价格。目前,您的源代码中有两次静态价格数据 - 不要重复自己。

def calculateTableTotal(noPeople):
    if noPeople <= 15:
        return 1 
    elif 16 <= noPeople <= 35:
        return 3
    elif 36 <= noPeople <= 55:
        return 5
    elif 56 <= noPeople <= 75:
        return 7
    else:
        return None

def calculateMenuPrice(totalTable, choice):
    if choice == '1':
        print('Total:', totalTable * (int(768.88)))  # ???

    if choice == '2':
        print('Total:', totalTable * (int(898.88)))  # ???

    if choice == '3':
        print('Total:', totalTable * (int(1118.88))) # ???

    if choice == '4':
        print('Total:', totalTable * (int(1488.88))) # ???

def print_menu():
    print('''
    ------------------------------------------------
    Menu Option
    ------------------------------------------------

    [1] 768.88 Package          [3] 1118.88 Package
    [2] 898.88 Package          [4] 1488.88 Package
    ''')     

noPeople = int(input('enter no. of people: '))

totalTable = calculateTableTotal(noPeople)

if totalTable == 1:
    print("You need {} table.".format(totalTable))
elif totalTable is None:
    print("We haven't enough tables. Sorry!")
    exit()
else:
    print("You need {} table.".format(totalTable))

print_menu()

choice = input('enter menu choice: ')

calculateMenuPrice(totalTable, choice)