0

一連の大学を巡る最短旅行を計算するための Python スクリプトを作成しようとしています。出発点を追加する必要がありますが、信じられないほど自分自身を混乱させ、後戻りできなくなりました。ここからどこへ行くべきかを理解するのを手伝ってくれる人はいますか

    from Tkinter import *
import tkMessageBox, tkFileDialog
import json
import re
from urllib import urlopen
import math
class Application(Frame):
    collegelist = []
    collegelist1 = []
    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()
    def createWidgets(self):
        self.top_frame = Frame(self)
        self.mid_frame = Frame(self)
        self.bot_frame = Frame(self, bg = 'red')
        self.top_frame.pack(side = 'top')
        self.mid_frame.pack(side = 'top')
        self.bot_frame.pack(side = 'top')
        #top frame

        self.label1 = Label(self.top_frame, text = "Your College Choices", bg ='red')
        self.label1.pack(side = 'left', padx='40', pady='0')
        self.label2 = Label(self.top_frame, text = "Your Tour Selections", bg ='green')
        self.label2.pack(side = 'right', padx='40')

        #mid frame
        self.mylist = Listbox(self.mid_frame,
                              bg = 'black',
                              fg = 'gold')
        self.mylist.pack(side='left')
        self.my_button1 = Button(self.mid_frame, text = '>>>', command=self.getlist)
        self.my_button2 = Button(self.mid_frame, text = '<<<', command=self.returnlist)
        self.my_button1.pack(side="left")
        self.my_button2.pack(side="left")
        self.mylist1 = Listbox(self.mid_frame, 
                              selectmode=DISABLED,
                              bg = 'black',
                              fg = 'gold')
        self.mylist1.pack(side='right')
        #bottom frame
        self.openbutton = Button(self.bot_frame, text='Open File', command=self.openfile, fg ='green')
        self.openbutton.pack(side='left')
        self.my_button = Button(self.bot_frame, text = 'Route', fg ='green', command=self.collegeroute)
        self.my_button.pack(side='left')
        self.quit_button = Button(self.bot_frame, text = 'Quit', 
                                  command = self.quit, fg = 'green')
        self.quit_button.pack(side='left')

    def openfile(self):
        filename = tkFileDialog.askopenfilename(title='Choose a file')
        if filename:
            clist = open(filename, "r")
        for line in clist.readlines():
            for i in line.split():
                self.collegelist.append(i)
        for college in self.collegelist:
            self.mylist.insert(1,college)
    def getlist(self):
    # get selected line index
        index = [int(x) for x in self.mylist.curselection()]
        print index
        for i in index:
            seltext = self.mylist.get(i)
            self.mylist.delete(i)
            self.mylist1.insert(1,seltext)
            self.collegelist1.append(seltext)
            print seltext
    def returnlist(self):
    # get selected line index
        index = [int(x) for x in self.mylist1.curselection()]
        for i in index:
            seltext = self.mylist1.get(i)
            self.mylist1.delete(i)
            seltext = seltext.strip()
            seltext = seltext.replace(' ', '')
            self.mylist.insert(0,seltext)
            self.collegelist1.remove(seltext)
    def collegeroute(self):
    # get selected line index
        global tuplist
        self.tuplist =[]
        for college in self.collegelist1:
            f = urlopen('http://graph.facebook.com/%s' % college) #load in the events
            d = json.load(f)
            longitude = d["location"]["longitude"]
            latitude = d["location"]["latitude"]
            name = d['name']
            self.tuplist.append((latitude, longitude))
        cartesian_matrix(self.tuplist)


def cartesian_matrix(coords):
    '''create a distance matrix for the city coords
      that uses straight line distance'''
    matrix={}
    for i,(x1,y1) in enumerate(coords):
        for j,(x2,y2) in enumerate(coords):
            dx,dy=x1-x2,y1-y2
            dist=math.sqrt(dx*dx + dy*dy)
            matrix[i,j]=dist
        tour_length(matrix,collegelist1)
        return matrix
def tour_length(matrix,tour):
    total=0
    num_cities=len(tour)
    print tour
    print num_cities
    for i in range(num_cities):
        j=(i+1)%num_cities
        city_i=tour[i]
        city_j=tour[j]
        total+=matrix[city_i,city_j]
    print total
def getRad(x):
    return float(x) * (math.pi/180.0)
def main():
    app = Application()
    app.master.title("My Application")
    app.mainloop()

if __name__ == "__main__":
    main()

tour_length を機能させるのに問題がある

4

2 に答える 2

0

tour_length を呼び出して、cartesian_matrix から間違った場所に戻っています。行列の 1 行だけを実行してから、tour_length を呼び出して戻ります。

于 2012-05-03T16:42:30.747 に答える
0

tour_length を機能させるのに問題がある

私が見る唯一の明らかな問題tour_lengthは、結果を返すことができないということです。最後に次を追加します。

return total

よく調べてみると、次のことも疑わしいようです。

    tour_length(matrix,collegelist1)
    return matrix

まず、インデントが間違っています。次に、 の戻り値を無視していますtour_length

インデントの誤りがおそらく例外の原因です(tour_length完全に初期化する前に呼び出していますmatrix)。

于 2012-05-03T16:31:10.790 に答える