2015-07-20 229 views
-4

我是新來的Python編程,我寫了一個模塊「建議」:無法加載Python模塊

from math import sqrt 

# A dictionary of movie critics and their ratings of a small set of movies 
critics = { 
    'Lisa Rose': { 
     'Lady in the Water': 2.5, 
     'Snakes on a Plane': 3.5, 
     'Just My Luck': 3.0, 
     'Superman Returns': 3.5, 
     'You, Me and Dupree': 2.5, 
     'The Night Listener': 3.0}, 
    'Gene Seymour': { 
     'Lady in the Water': 3.0, 
     'Snakes on a Plane': 3.5, 
     'Just My Luck': 1.5, 
     'Superman Returns': 5.0, 
     'You, Me and Dupree': 3.5, 
     'The Night Listener': 3.0}, 
    'Michael Phillips': { 
     'Lady in the Water': 2.5, 
     'Snakes on a Plane': 3.0, 
     'Superman Returns': 3.5, 
     'The Night Listener': 4.0}, 
    'Claudia Puig': { 
     'Snakes on a Plane': 3.5, 
     'Just My Luck': 3.0, 
     'Superman Returns': 4.0, 
     'You, Me and Dupree': 2.5, 
     'The Night Listener': 4.5}, 
    'Mick LaSelle': { 
     'Lady in the Water': 3.0, 
     'Snakes on a Plane': 4.0, 
     'Just My Luck': 2.0, 
     'Superman Returns': 3.0, 
     'You, Me and Dupree': 2.0, 
     'The Night Listener': 3.0}, 
    'Jack Matthews': { 
     'Lady in the Water': 3.0, 
     'Snakes on a Plane': 4.0, 
     'Superman Returns': 5.0, 
     'You, Me and Dupree': 3.5, 
     'The Night Listener': 3.0}, 
    'Toby': { 
     'Snakes on a Plane': 4.5, 
     'You, Me and Dupree': 1.0, 
     'Superman Returns': 4.0} 
} 

# Returns a distance-based similarity score for person1 and person2 
def sim_distance(prefs, person1, person2): 
    # Get the list of shared_items 
    si = {} 
    for item in prefs[person1]: 
     if item in prefs[person2]: 
      si[item] = 1 
    # if they have no ratings in common, return 0 
    if len(si) == 0: 
     return 0 
    # Add up the squares of all the differences 
    sum_of_squares = sum([pow(prefs[person1][item] - prefs[person2] [item], 2) 
          for item in prefs[person1] 
          if item in prefs[person2]]) 
    return 1/(1 + sum_of_squares) 

每當我跑這個模塊我面對這樣的錯誤:

Python 2.7.10 (default, May 23 2015, 09:40:32) 
[MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> reload(recommendations) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'recommendations' is not defined 
>>> 

recommendations.py也沒有加工。

實際上,無論何時我嘗試呼叫我的功能sim_distance,都會產生一個 錯誤,表明sim_distance未定義。

+1

這很難說這是怎麼回事,因爲壓痕全亂了。第1行中有哪些內容會出現錯誤? – jester112358

+0

Gene Seymour:超人歸來 - 5.0真的嗎? – jester112358

回答

0

你的代碼有很多問題。 主要問題是縮進。你似乎在隨機縮進你的代碼,但是Python需要一個非常嚴格的縮進機制。 You can read more about it here

我還沒有看太多你的代碼,但它沒有運行後,我修正了縮進。

不過,我希望你的第一個問題是,是,你忘了先導入您的模塊,像這樣:

>>> import recommendations 
1

我格式化你的代碼你。它現在有效。如果你把sim_distance函數放在一個名爲recommendations.py的文件中,那麼你應該可以導入它。我沒有檢查,如果你的代碼,雖然產生正確的輸出...

# Returns a distance-based similarity score for person1 and person2 
def sim_distance(prefs, person1, person2): 
    # Get the list of shared_items 
    si = {} 
    for item in prefs[person1]: 
     if item in prefs[person2]: 
      si[item] = 1 
    # if they have no ratings in common, return 0 
    if len(si) == 0: 
     return 0 
    # Add up the squares of all the differences 
    sum_of_squares = sum([ 
     pow(prefs[person1][item] - prefs[person2][item], 2) 
     for item in prefs[person1] if item in prefs[person2]]) 
    return 1/(1 + sum_of_squares) 

和運行

from recommendations import sim_distance 
# A dictionary of movie critics and their ratings of a small 
# set of movies 
critics = { 
    'Lisa Rose': { 
     'Lady in the Water': 2.5, 
     'Snakes on a Plane': 3.5, 
     'Just My Luck': 3.0, 
     'Superman Returns': 3.5, 
     'You, Me and Dupree': 2.5, 
     'The Night Listener': 3.0}, 
    'Gene Seymour': { 
     'Lady in the Water': 3.0, 
     'Snakes on a Plane': 3.5, 
     'Just My Luck': 1.5, 
     'Superman Returns': 5.0, 
     'You, Me and Dupree': 3.5, 
     'The Night Listener': 3.0}, 
    'Michael Phillips': { 
     'Lady in the Water': 2.5, 
     'Snakes on a Plane': 3.0, 
     'Superman Returns': 3.5, 
     'The Night Listener': 4.0}, 
    'Claudia Puig': { 
     'Snakes on a Plane': 3.5, 
     'Just My Luck': 3.0, 
     'Superman Returns': 4.0, 
     'You, Me and Dupree': 2.5, 
     'The Night Listener': 4.5}, 
    'Mick LaSelle': { 
     'Lady in the Water': 3.0, 
     'Snakes on a Plane': 4.0, 
     'Just My Luck': 2.0, 
     'Superman Returns': 3.0, 
     'You, Me and Dupree': 2.0, 
     'The Night Listener': 3.0}, 
    'Jack Matthews': { 
     'Lady in the Water': 3.0, 
     'Snakes on a Plane': 4.0, 
     'Superman Returns': 5.0, 
     'You, Me and Dupree': 3.5, 
     'The Night Listener': 3.0}, 
    'Toby': { 
     'Snakes on a Plane': 4.5, 
     'You, Me and Dupree': 1.0, 
     'Superman Returns': 4.0} 
} 

print(sim_distance(critics, "Lisa Rose", "Gene Seymour"))