使用用户输入获取类python3中的信息

时间:2018-09-17 18:34:27

标签: python-3.x

我是python的新手,我知道我做错了,但似乎找不到必须的方法。

我希望用户输入两次他想要的框。我想使用他选择的框的值并将它们彼此添加,然后打印该值,因此2x输入box1应该给出80的值。

稍后,我希望可以使用更多的盒子。

SharpZipLib

1 个答案:

答案 0 :(得分:0)

此代码的一些建议:

  • 保持类名单数
  • 仅类中的方法可以/应该使用参数self,因为self引用了在其上调用该方法的类的实例
  • 如果要检查是否存在Boxes实例,则需要将所有Boxes保留在列表中的某个位置
  • 使用变量命名并传递变量更明确
  • input函数接受一个prompt字符串作为参数,这比使用单独的print语句使事情更简洁

这里是重构:

class Box:
    '''Box with assigned weight'''
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight

boxes = [
    Box('box1', 40),
    Box('box2', 70),
    Box('box3', 110)
]

def get_box_weight_if_box_exists(box_name, boxes):
    for box in boxes:
        if box.name == box_name:
            return box.weight
    return 0


keep_adding = True
total = 0

while keep_adding:
    box_name = input('Enter a box name: ')
    total += get_box_weight_if_box_exists(box_name, boxes)
    print('Total: {}'.format(total))
    keep_adding = input('Add another? (y/n): ') == 'y'

运行时,以上代码将继续按名称询问新包装盒,并将指定包装盒的重量加到总计中,直到当用户要求输入'y'时输入除'Add another? (y/n)'以外的任何内容时。我不确定在没有给定box_name的框的情况下如何处理该情况,但是您可以将return 0中的get_box_weight_if_box_exists行更改为几乎所有其他内容

以下是一些示例输出:

> Enter a box name: box1
Total: 40
> Add another? (y/n): y
> Enter a box name: box2
Total: 110
> Add another? (y/n): y
> Enter a box name: nice
Total: 110
> Add another? (y/n): n

让我知道您是否有疑问。