Where Does "raw_input" Write To?

Now that I have the Python plug-in running under IntelliJ 8.1, I'm working my way through "Core Python" by Wesley Chun and "Programming Collective Intelligence" by Toby Segaran.


In "PCI" chapter 2, "Making Recommendations", there's a simple example showing how to calculate similarities between movie ratings by a number of critics.  The problem runs just fine if coded from the book.  But I decided to try and change it a bit to reinforce some of the ideas from "Core Python".  I made minor modifications to break the problem into three .py files, all in a module named "recommendations":

recommendations.py:

# A dictionary of movie critics and their ratings
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 LaSalle' :
    {
        '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,
        'Superman Returns' : 4.0,
        'You, Me and Dupree' : 1.0,
    },
}

similarity.py:

def distance(preferences, person1, person2) :
    "Calculate the similarity of two preferences using Euclidian distance sum of squares"

    # Find all the items shared between person1 and person2
    sharedItems = {}
    for item in preferences[person1] :
        if item in preferences[person2] :
            sharedItems[item] = 1;

    # If no shared items, return zero
    if len(sharedItems) == 0 : return 0

    # Calculate sum of squares of distances between shared items
    sumOfSquares = sum((preferences[person1][item]-preferences[person2][item])**2
                       for item in preferences[person1] if item in preferences[person2])

    return 1/(1+sumOfSquares)

driver.py:

import recommendations
import similarity

print recommendations.critics

#critic1 = raw_input('1st critic: ')
#critic2 = raw_input('2nd critic: ')

critic1 = 'Lisa Rose'
critic2 = 'Gene Seymour'

print similarity.distance(recommendations.critics, critic1, critic2)

If I run driver.py as is, I get the following output in my console, which is correct:

C:\Tools\Python-2.5\python.exe "driver.py"
{'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5}, 'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0}, 'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 2.5}, 'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.5}, 'Toby': {'Snakes on a Plane': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 1.0}, 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5}, 'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night Listener': 4.0}}
0.148148148148

Process finished with exit code 0

However, if I substitute the commented calls to raw_input the code simply sits without writing the prompt.  Why isn't raw_input writing to my console?  How can I tell it to do so?  Thanks.

Please sign in to leave a comment.