4

我在 StackOverflow 上看到过其他类似的例子,但我不明白任何答案(我还是一个新程序员),我看到的其他例子也不像我的,否则我不会发布这个问题。

我在 Windows 7 上运行 Python 3.2。

我以前从来没有遇到过这种情况,而且我已经多次以这种方式上课,所以我真的不知道这次有什么不同。唯一的区别是我没有制作所有的 Class 文件。我得到了一个模板来填写和一个测试文件来试一试。它适用于测试文件,但不适用于我的文件。我一直在以与测试文件完全相同的方式调用类中的方法(例如 Lineup.size())

这是我的课:

类队列:

    # 构造函数,它创建一个新的空队列:
    def __init__(self):
        self.__items = []

    # 将新项目添加到队列的后面,并且不返回任何内容:
    def 队列(自我,项目):
        self.__items.insert(0,item)
        返回

    # 移除并返回队列中最前面的项目。  
    # 如果队列为空,则不返回任何内容。
    def 出队(自我):
        如果 len(self.__items) == 0:
            返回无
        别的:
            返回 self.__items.pop()

    # 返回队列中最前面的项目,并且不更改队列。  
    def 窥视(自我):
        如果 len(self.__items) == 0:
            返回无
        别的:
            返回 self.__items[(len(self.__items)-1)]

    # 如果队列为空,则返回 True,否则返回 False:
    def is_empty(self):
        返回 len(self.__items) == 0

    # 返回队列中的项目数:
    默认尺寸(自我):
        返回 len(self.__items)

    # 从队列中删除所有项目,并将大小设置为 0:
    def 清除(自我):
        del self.__items[0:len(self.__items)]
        返回

    # 返回队列的字符串表示形式:
    def __str__(self):
        return "".join(str(i) for i in self.__items)

这是我的程序:

from queue import Queue

Lineup = Queue()

while True:
  decision = str(input("Add, Serve, or Exit: ")).lower()
  if decision == "add":
    if Lineup.size() == 3:
      print("There cannot be more than three people in line.")
      continue
    else:
      person = str(input("Enter the name of the person to add: "))
      Lineup.queue(person)
      continue
  elif decision == "serve":
    if Lineup.is_empty() == True:
      print("The lineup is already empty.")
      continue
    else:
      print("%s has been served."%Lineup.peek())
      Lineup.dequeue()
      continue
  elif (decision == "exit") or (decision == "quit"):
    break
  else:
    print("%s is not a valid command.")
    continue

这是我输入“添加”作为决策变量时的错误消息:

第 8 行,在 builtins.AttributeError: 'Queue' object has no attribute 'size'

那么,这里发生了什么?这个有什么不同?

4

2 回答 2

11

Python 3 已经有一个queue模块(你可能想看看)。当你找到你时import queue,Pythonqueue.py在找到你的queue.py.

将您的queue.py文件重命名为my_queue.py,将您的导入语句更改为from my_queue import Queue,您的代码将按您的意愿运行。

于 2013-02-04T00:37:10.300 回答
-3

尝试重命名其他名称的大小或对列表 __items 实施计数器,例如

def get_size(self):
    cnt = 0
    for i in self.__items:
        cnt++
    return cnt
于 2013-02-04T00:30:51.210 回答