On 09/07/15 18:40, George wrote:

and i am not looking for route solving problems but rather a peculiar
problem of running different lines of code arbitarily.

I'm not sure what you mean by that.
What is arbitrary? What determines which lines are run?

either start from any direction.  So i have to devise a way by which i
can run all the posibilities to find the best route. so i have to run
4*3*3*3 runs to find out the shortest route.  My code is as below, any
way i can achieve it in python without typing all the posibilites.

The normal way to deal with this kind of thing is to a) create
a function that does the work and b) make it data driven so
you can code the choices as data.

But i don;t pretend to know what your algorithm would look like
so I'll somply make some suggestions to tidy the code below in
the hope that they might fire some ideas.

def GetShortestRoute(source:list,destination:City,recursion=0):
     print("recursion",recursion)

recursion may not be the best solution for this since Pythons
recursion limit is not huge (1000 last time I looked) and you
could easily hit that with this type of problem.

     #print(source)
     assert type(source)==list,"Source must be a list of list"
     assert len(source)>0,"Source must contain atleast 1 item"
     assert type(source[0])==list,"Sub items of source must be a list"

Just an observation but you seem very concerned with typechecking. Thats not usually necessary in Python since it will check for incompatible types as you go and raise exceptions.

     #found something
     foundlist=[]
     for miniroute in source:
         if destination in miniroute:
             print("found",destination," in ",miniroute,":", destination
in miniroute)
             foundlist.append(miniroute)
         else:
             print("Not found",destination," in ",miniroute,":",
destination in miniroute)

     shortestRoute=[None,9999999.9]
     if len(foundlist)>0:

This is more usually written as

if foundlist:

         for miniroute in foundlist:
             distance=calculateRouteDistantce(miniroute)
             if distance<shortestRoute[1]:
                 shortestRoute[1]=distance
                 shortestRoute[0]=miniroute
         return shortestRoute

     duplicatesource=source[:]
     for route in source:
         lastCity=route[len(route)-1]

It would be easierv to access the last element directly rather than looping:

lastCity = route[-1]

     #the part i do not want to recode everytime to find the shortest route
         if lastCity.NE!=None and
isCityInRouteList(lastCity.NE,source)==False:
             tmproute=route[:]
             tmproute.append(lastCity.NE)
             if tmproute not in duplicatesource:
                 duplicatesource.append(tmproute)

You repeat the if clause each time so put it in a function.
I'm not sure what you would call it but it will look like:

def add_route(direction,source):
    node = getattr(lastCity,direction)
    if node and not isCityInRouteList(node,source):
       tmproute=route[:]
       tmproute.append(lastCity.NE)
       if tmproute not in duplicatesource:
          duplicatesource.append(tmproute)

And you can apply it by iterating over a list of 'directions'.

for dir in ['NE','NW','SE','SW']:
    add_route(dir,source)

     return GetShortestRoute(duplicatesource,destination,recursion+1)

HTH

--
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@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to