雾行@ 2022-12-03 16:38 采纳率: 83.3%
浏览 83
已结题

python 函数撰写

TS = TE+C(TE,D,O_),这行有问题,如果TE是个常数,结果正常,但TE里有方法C(TS,D,O_),这要怎么搞,如何让这个式子TS = TE+C(TE,D,O_)正常运行

img

import numpy as np
import random
import re
import math
opt_travel=[[0,23,14,19,24],[23,0,34,42,7],[14,34,0,10,38],[19,42,10,0,43],[24,47,38,43,0]]
opt_travel=np.array(opt_travel,dtype=np.float32) #列表元素转浮点型,方便后续计算
opt_travel_eh=opt_travel*1.4
opt_travel_es=opt_travel*1.1
opt_travel_lh=opt_travel*1.5
opt_travel_ls=opt_travel*1
message={1:[3,4,1,3,30,60,60,90],2:[6,2,2,4,50,80,100,130],3:[5,3,3,4,150,180,180,210],
         4:[8,1,4,3,200,230,240,270],5:[8,9,4,2,290,320,320,350],6:[4,7,3,1,320,350,380,410],
         7:[8,2,0,2,0,0,110,140],8:[1,1,0,3,0,0,200,230],9:[3,6,0,3,0,0,400,430]}
TW_O_L=message.get(1)[4]
TW_O_R=message.get(1)[5]
TW_D_L=message.get(1)[6]
TW_D_R=message.get(1)[7]
O = message.get(1)[2]
D=message.get(1)[3]
O_=message.get(2)[2]
TS=opt_travel_eh[0][O] + 10
def C(TS,O,D):
    CS=(TS+10+15)/30
    CS=math.ceil(CS) #向上取整
    if CS==1 or CS==2:
        opt_travelc = opt_travel_eh[O][D]
    elif CS==3 or CS==4:
        opt_travelc = opt_travel_es[O][D]
    elif CS==5 or CS==6:
        opt_travelc = opt_travel_lh[O][D]
    elif CS==7 or CS==8:
        opt_travelc = opt_travel_ls[O][D]
    return opt_travelc
TF=TS+10+15+C(TS,O,D)
TE=TF+15
TL = TE+C(TE,D,O_)
for i in range(5):
    i=i+2
    TW_O_L = message.get(i)[4]
    TW_O_R = message.get(i)[5]
    TW_D_L = message.get(i)[6]
    TW_D_R = message.get(i)[7]
    O = message.get(i)[2]
    D = message.get(i)[3]
    O_ = message.get(i + 1)[2]
    TS = TE+C(TE,D,O_)
    TF = TS + 10 + 15 + C(TS, O, D)
    TE = TF + 15

  • 写回答

4条回答 默认 最新

  • Ko-walski 2022-12-03 17:14
    关注

    保存都提示你了
    UnboundLocalError:赋值前引用了局部变量opt_travelc
    也就是你在没赋值前就引用了这个变量

    def C(TS,O,D):
        CS=(TS+10+15)/30
        CS=math.ceil(CS) #向上取整
        if CS==1 or CS==2:
            opt_travelc = opt_travel_eh[O][D]
        elif CS==3 or CS==4:
            opt_travelc = opt_travel_es[O][D]
        elif CS==5 or CS==6:
            opt_travelc = opt_travel_lh[O][D]
        elif CS==7 or CS==8:
            opt_travelc = opt_travel_ls[O][D]
        return opt_travelc
    你的这个代码确定四个条件必定每次有一个满足?
    如果都不满足你return肯定报错,你为何不在if前面给个默认值比如opt_travel=0
    然后打印下如果返回0说明之前你的代码就没赋值
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 修改了问题 12月3日
  • 创建了问题 12月3日