2010-03-15 196 views
-1

出于某种原因,此代码似乎无法在解释器中运行。当我碰到F5时,什么也没有发生,即使调试器似乎也没有认出它。我认为它与课程有关,因为当解释器被移除时似乎认识到其余的代码。请告诉我我做错了什么。 编辑:我已经多次重新启动解释器,我试图加载的任何其他代码运行良好,只是这个有问题。Python初学者无法运行代码

编辑:删除了初始打印语句 编辑:修改了邮政编码中的缩进。 编辑:我已经更新了以下注释中提到的修补程序的代码;然而,当我尝试运行代码时,空闲仍然没有做任何事情。顺便说一句,我正在使用python 3.1.1。

class sorting_class: 
    def __init__(self): 
     self.globali = 0 
     self.order = ['a', 'b', 'c', 'd'] 
     self.orderi = 0 
     self.sortedlist = [] 
    def sort(self, array): 
     carry, leave = [] 
     for arrayi in array: 
      print ('run', arrayi) 
      if self.order[self.orderi] == arrayi[self.globali]: 
       carry.append(arrayi) 
      else: 
       if self.globali != 0: 
        leave.append(arrayi) 
     return carry, leave 
    def srt(self, array): 
     globalii = 0 
     carry, leave = my.sort(array) 
     while len(self.sortedlist) != len(array): 
      if len(carry) == 1: 
       self.sortedlist.append(carry) 
       arrayt = leave 
       self.globali = 1 
       self.orderi = 0 
       carry, leave = my.sort(arrayt) 
      elif len(carry) == 0: 
       if len(leave) != 0: 
        arrayt = leave 
        self.globali = 1 
        self.orderi = 1 
        my.sort(arrayt) 
       else: 
        self.arrayt 
        globalii += 1 
        self.orderi = globalii 
        self.globali = 0 
        my.sort(arrayt) 
        self.orderi = 0 
      else: 
       arrayt = carry 
       carry = [] 
       self.globali += 1 
       carry, leave += my.sort(arrayt) 
my = sorting_class() 
x = ['ac', 'bc' ,'ab', 'da'] 
prin = my.srt(x) 
print (prin) 
+0

我会建议不要在你的班级内调用my.sort()。只需使用self.sort()。 – 2010-03-15 05:31:20

+0

'carry,leave = []'应该做什么?还'携带,离开+ = my.sort(arrayt)'? – 2010-03-15 05:46:13

+0

进位,leave = []定义进位并保留为空列表。 – Pax 2010-03-15 05:57:43

回答

2

源代码突出显示应该给你一个提示。您或者需要切换到双引号,或者跳过won't中的'

变化

print ('Why won't this work?') 

print ('Why won\'t this work?') 
+0

我实际上在测试后添加了这个代码。即使删除了print语句,程序仍然不会运行。 – Pax 2010-03-15 04:52:09

+0

这也适用:“为什么这不能工作?” – inspectorG4dget 2010-03-15 04:52:20

0

看来你有一个问题,你的缩进

...  my = sorting_class() 
    File "<stdin>", line 45 
    my = sorting_class() 
        ^
IndentationError: unindent does not match any outer indentation level 
>>>  x = ['ac', 'bc' ,'ab', 'da'] 
    File "<stdin>", line 1 
    x = ['ac', 'bc' ,'ab', 'da'] 
    ^
IndentationError: unexpected indent 
>>>  my.srt(x) 

一旦你的缩进整理你或许应该考虑有一个print声明某处

+0

感谢您的帮助,不幸的是,错误来自我不正确张贴代码,并没有解决我的问题。我现在修复了帖子中的缩进。 – Pax 2010-03-15 05:01:23

0

你是my = sorting_class()是在类中定义的。拿出课堂定义,你应该全部设置。

+0

这是我发布代码的错误。我已经修复了格式以反映它应该是什么。 – Pax 2010-03-15 05:02:12

0

如果你的类方法显然不在任何地方,你可以参考my。我不确定这应该指的是什么。

另外,它缩进了一层。

File "sss.py", line 44 
    carry, leave += my.sort(arrayt) 
SyntaxError: illegal expression for augmented assignment 

你应该得到类似的错误消息也:

2

我运行代码时有以下错误消息。顺便说一句,我使用python 2.6.4进行测试。

+0

你不能这样追加。就我所知,您必须制作一些虚拟变量,将它们设置为my.sort(arrayt),然后追加以进行并离开。 – 2010-03-15 05:30:39

1

我不知道你是否在使用IDLE时遇到问题。你在别处提到调试器只是说“无”。当我从IDLE解释器窗口调试菜单中选择“调试器”时,它会弹出另一个窗口,标题为“调试控制”,并在该窗口中显示“无”。

该窗口只是一个控制面板。您仍然需要运行该程序,方法是从窗口的“运行”菜单中选择“运行”,该窗口中包含代码。这会使某些东西出现在“调试控制”窗口中,并且它将使该窗口中的按钮(“Go”,“Step”等)灰化,以便您可以真正使用调试器来运行或逐步浏览程序。


当我切&粘贴代码到空闲窗口,并使用运行/检查模块选项,它报告的第44行非法表达式:

   carry, leave += my.sort(arrayt) 

这看起来很奇特。 LHS是一个元组;元组是不可变的,你不能用+ =来修改它们。看起来你的意思是一个简单的等号,因为sort方法返回一个元组。

   carry, leave = my.sort(arrayt) 

ETA:啊,斯特凡&约翰的也是正确的。当你从另一个实体变量中调用一个类的方法时,你有时会使用用于实例变量的名称(我的)而不是self

+0

你用什么来运行它?当我尝试一个代码时,代码什么也没有发生,空闲只是保持空闲状态。 – Pax 2010-03-15 05:40:20

+0

这就是我所做的: - 开始IDLE - 选择文件/新窗口打开一个非解释器窗口 - 在该窗口中,我粘贴了您的代码 - 该窗口有一个“运行”菜单,从中我选择了“检查模块”。 然后它保存文件,导入等同于导入语法错误检查阶段的文件,并弹出错误消息。 – 2010-03-15 05:54:09

0

+=而不是在=在别人提到

然后行44:你的类,你必须的.sort(.....)在里面你应该有的.sort(。 ....) - 有三个地方可以解决。

然后跌倒在第8行:

carry, leave = []

什么Python版本您使用的?我注意到,当它碰到第44行=“thingy”时,Python 3.1发布了香蕉(报告“”“SystemError:无效节点类型(24),用于控制台模式下的扩展赋值”“),这可以解释为什么你什么都看不到闲。

下一个问题是:self.carry应该只是carry的线21和26

还有更多:

File "my.py", line 28, in srt 
    if len(self.leave) != 0: 
AttributeError: sorting_class instance has no attribute 'leave' 

固定的是,它运行,打印一些东西,然后再死之后:

File "my.py", line 11, in sort 
    if self.order[self.orderi] == arrayi[self.globali]: 
IndexError: list index out of range 

现在我们正处于我们必须尝试理解您认为自己应该做什么的领域......

你能回答Python版本的问题吗?看起来有一个要报告的错误。

+0

我正在使用3.1.1。即使你的改变没有任何反应,调试器在我尝试运行它后会直接说'没有'。运行我编写的任何其他代码时,我没有任何问题。有没有另一个程序,我可以使用其他然后空闲来运行它? – Pax 2010-03-15 05:56:11

+0

@Protean:编辑你的问题,说出你正在做什么,从开始IDLE('尝试运行它'不是足够的细节),以及发生了什么。 – 2010-03-15 06:03:04

+0

@Protean:“None”是一个特殊的Python常量,由不返回任何东西的方法或函数返回。你的方法不会返回任何东西,它们在适当的地方运作;他们不打印任何东西;所以你的程序现在可能正在工作。尝试在srt方法中的while循环后面输入* print“all done”*语句,然后在调用my.srt()之后尝试在最后打印my.sorted_list。 – 2010-03-15 06:12:17

0

代码中的错误太多。用简单的英文写下你的要求,并从头开始。

你到底想干什么?它是:

x = ['ac', 'bc' ,'ab', 'da'] 
order = ['d', 'b', 'c', 'a'] 
assert len(order) == len(x) 
x = [item for o, item in sorted(zip(order, x))] 
print x 
# -> ['da', 'bc', 'ab', 'ac']