2013-02-13 344 views
4

我正在处理来自HP代码大战2012的字母分布问题。我不断收到一条错误消息,指出标识符中的字符无效。这是什么意思,如何解决。这里是包含信息的页面。 hpcodewars.org/past/cw15/problems/2012ProblemsFinalForPrinting.pdf 这里是代码标识符中的字符无效

import string 

def text_analyzer(text): 
'''The text to be parsed and 
the number of occurrences of the letters given back 
be. Punctuation marks, and I ignore the EOF 
simple. The function is thus very limited. 

''' 
    result = {} 

# Processing 
    for a in string.ascii_lowercase: 
    result [a] = text.lower(). count (a) 

    return result 


def analysis_result (results): 

# I look at the data 
    keys = analysis.keys() 
    values \u200b\u200b= list(analysis.values \u200b\u200b()) 
    values.sort (reverse = True) 

# I turn to the dictionary and 
# Must avoid that letters will be overwritten 
    w2 = {} 
    list = [] 

    for key in keys: 
     item = w2.get (results [key], 0) 
     if item = = 0 : 
      w2 [analysis results [key]] = [key] 
     else : 
      item.append (key) 
      w2 [analysis results [key]] = item 

# We get the keys 
    keys = list (w2.keys()) 
    keys.sort (reverse = True) 

    for key in keys: 
     list = w2 [key] 
     liste.sort() 
     for a in list: 
      print (a.upper(), "*" * key)   


text = """I have a dream that one day this nation will rise up and live out the true 
meaning of its creed: "We hold these truths to be self-evident, that all men 
are created equal. "I have a dream that my four little children will one day 
live in a nation where they will not be Judged by the color of their skin but 
by the content of their character. 
# # # """ 

analysis result = text_analyzer (text) 
analysis_results (results) 
+1

请发布整个追溯 - 它将包括行号,并可能指向无效字符,这将使这个微不足道的答案。 – abarnert 2013-02-13 00:57:40

+1

另外,你是否真的写了这段代码,或者是否复制并粘贴了PDF或HTML文件或其他东西?如果是后者,来源是什么;也许我们可以告诉你如何正确地复制它。 – abarnert 2013-02-13 01:10:15

+0

@abarnert非常感谢您的帮助,但现在它说出了未解决的字符后续续字符 – user2052898 2013-02-13 04:38:38

回答

25

错误SyntaxError: invalid character in identifier意味着你有一个变量名,函数中,等等,这不是一个字母出现一些字符,数字或下划线。实际的错误信息会是这个样子:

File "invalchar.py", line 23 
    values = list(analysis.values()) 
       ^
SyntaxError: invalid character in identifier 

,告诉你实际的问题是什么,所以你不必去猜测“我在哪里有一个无效字符”?那么,如果你看看那条线,那里就有一堆非打印垃圾角色。把它们拿出来,你会过去的。

如果你想知道实际的乱码是什么,我从你的代码复制出错的行并粘贴成一个字符串在Python解释器:

>>> s=' values ​​= list(analysis.values ​​())' 
>>> s 
' values \u200b\u200b= list(analysis.values \u200b\u200b())' 

所以,这是\u200b,或ZERO WIDTH SPACE。这就解释了为什么你不能在页面上看到它。最常见的是,你得到这些是因为你已经从一个网站(如StackOverflow或Wiki)复制了一些格式化(而非纯文本)代码,或者从PDF文件中复制了代码。

如果您的编辑器不能让您找到并修复这些字符,只需删除并重新输入该行即可。

当然你也有至少两个IndentationError期从没有缩进的事情,至少多了一个SyntaxError从住宿的空格(= =而不是==)或下划线变成空间(像analysis results代替analysis_results)。

问题是,你是如何让你的代码进入这种状态的?如果您使用的是Microsoft Word之类的代码编辑器,那就是您的问题。使用文本编辑器。如果不是,那么无论根本问题是什么导致您最终都会遇到这些垃圾字符,缩进和额外空格,请在尝试修复代码之前解决该问题。

+0

感谢您的帮助,但现在它说明未处理的字符一行接续字符。 – user2052898 2013-02-13 01:49:06

+3

正如我在答案中已经提到的那样,我可以立即在代码中发现至少3个错误,并且从一瞥中我可以看到更多(例如,当您定义函数时在最后一行中调用名为'analysis_results'的函数名为'analysis_result')。但是没有人会坐下来尝试猜测你的代码试图做什么,并为你调试所有的问题,特别是如果你提供比解释器更糟的错误信息。 – abarnert 2013-02-13 18:41:21

0

如果你只是运行模块,你不会在IDLE中得到一个好的错误信息。尝试从IDLE shell中输入一个导入命令,你会得到更多信息的错误信息。我有同样的错误,并造成了所有的差异。

(是的,我从一本电子书复制的代码,它充满了看不见的“错”字。)

-1

不知道这是正确的,但是当我复制了一些代码形式的纸张上使用pgmpy并将其粘贴到Spyder下的编辑器中,但我始终得到“标识符中的无效字符”错误,尽管它对我来说并不糟糕。特定行是grade_cpd = TabularCPD(variable='G',\

因为没有很好的理由,我在整个代码中将'替换为"并且它工作正常。不知道为什么,但它确实工作

0

如果您的键盘设置为英文美国(国际)而不是英文美国双引号不起作用。这就是为什么单引号适用于你的情况。