2015-07-20 340 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"))