2013-02-13 163 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

如果您的鍵盤設置爲英文美國(國際)而不是英文美國雙引號不起作用。這就是爲什麼單引號適用於你的情況。