[Tutor] Python Error Message
Alan Gauld
alan.gauld at btinternet.com
Tue Jan 26 20:42:06 EST 2021
On 26/01/2021 17:18, Nirel Leitman wrote:
> Here is the main code for degrees.py -- it is very long:
>
> import csv
> import sys
> from util import Node, StackFrontier, QueueFrontier
> # Maps names to a set of corresponding person_ids
> names = {}
> # Maps person_ids to a dictionary of: name, birth, movies (a set of movie_ids)
> people = {}
> # Maps movie_ids to a dictionary of: title, year, stars (a set of person_ids)
> movies = {}
> def load_data(directory):
> """
> Load data from CSV files into memory.
> """
> # Load people
> with open(f"{directory}/people.csv", encoding="utf-8") as f:
> reader = csv.DictReader(f)
> for row in reader:
> people[row["id"]] = {
> "name": row["name"],
> "birth": row["birth"],
> "movies": set()
> }
> if row["name"].lower() not in names:
> names[row["name"].lower()] = {row["id"]}
> else:
> names[row["name"].lower()].add(row["id"])
> # Load movies
> with open(f"{directory}/movies.csv", encoding="utf-8") as f:
> reader = csv.DictReader(f)
> for row in reader:
> movies[row["id"]] = {
> "title": row["title"],
> "year": row["year"],
> "stars": set()
> }
> # Load stars
> with open(f"{directory}/stars.csv", encoding="utf-8") as f:
> reader = csv.DictReader(f)
> for row in reader:
> try:
> people[row["person_id"]]["movies"].add(row["movie_id"])
> movies[row["movie_id"]]["stars"].add(row["person_id"])
> except KeyError:
> pass
> def main():
> if len(sys.argv) > 2:
> sys.exit("Usage: python degrees.py [directory]")
> directory = sys.argv[1] if len(sys.argv) == 2 else "large"
> # Load data from files into memory
> print("Loading data...")
> load_data(directory)
> print("Data loaded.")
> source = person_id_for_name(input("Name: "))
> if source is None:
> sys.exit("Person not found.")
> target = person_id_for_name(input("Name: "))
> if target is None:
> sys.exit("Person not found.")
> path = shortest_path(source, target)
> if path is None:
> print("Not connected.")
> else:
> degrees = len(path)
> print(f"{degrees} degrees of separation.")
> path = [(None, source)] + path
> for i in range(degrees):
> person1 = people[path[i][1]]["name"]
> person2 = people[path[i + 1][1]]["name"]
> movie = movies[path[i + 1][0]]["title"]
> print(f"{i + 1}: {person1} and {person2} starred in {movie}")
> def shortest_path(source, target):
> """
> Returns the shortest list of (movie_id, person_id) pairs
> that connect the source to the target.
> If no possible path, returns None.
> """
> # TODO
> raise NotImplementedError
> def person_id_for_name(name):
> """
> Returns the IMDB id for a person's name,
> resolving ambiguities as needed.
> """
> person_ids = list(names.get(name.lower(), set()))
> if len(person_ids) == 0:
> return None
> elif len(person_ids) > 1:
> print(f"Which '{name}'?")
> for person_id in person_ids:
> person = people[person_id]
> name = person["name"]
> birth = person["birth"]
> print(f"ID: {person_id}, Name: {name}, Birth: {birth}")
> try:
> person_id = input("Intended Person ID: ")
> if person_id in person_ids:
> return person_id
> except ValueError:
> pass
> return None
> else:
> return person_ids[0]
> def neighbors_for_person(person_id):
> """
> Returns (movie_id, person_id) pairs for people
> who starred with a given person.
> """
> movie_ids = people[person_id]["movies"]
> neighbors = set()
> for movie_id in movie_ids:
> for person_id in movies[movie_id]["stars"]:
> neighbors.add((movie_id, person_id))
> return neighbors
> if __name__ == "__main__":
> main()
>
> Please let me know how I can proceed from here. Thank you again for
> your assistance.
>
> - Nirel
>
> On Monday, January 25, 2021, 06:04:41 PM MST, Alan Gauld via Tutor
> <tutor at python.org> wrote:
>
>
> On 25/01/2021 20:24, Nirel Leitman via Tutor wrote:
> > I keep getting this error message:
> > C:\Users\leitm>python C:\Users\leitm\Desktop\AI\degrees.py
> "C:\Users\leitm\Desktop\AI\degrees.py\small">
> C:\Users\leitm\AppData\Local\Programs\Python\Python39\python.exe:
>
> The error says:
> > can't find '__main__' module in
> 'C:\\Users\\leitm\\Desktop\\AI\\degrees.py'
>
> > Why can't my computer find my folder?
>
> It evidently can, it is a main module that it says is missing not
> that it can't find the file. It's looking in the file for main
> and not finding it.
>
> > What do I need to change for my computer to read this?
>
> It depends on what is in the file.
> Can you show us the main code for degrees.py?
>
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org <mailto:Tutor at python.org>
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos
More information about the Tutor
mailing list