【问题标题】:problem getting my python script to work an to call my variable让我的 python 脚本工作并调用我的变量的问题
【发布时间】:2019-06-05 12:55:13
【问题描述】:

我正在为管道类构建一个 python 脚本,并在主脚本中定义一些变量,并制作了一个可执行脚本,该脚本调用主脚本并为具有真假逻辑的区域赋予值以确定是否需要一个地区与否。我对 python 了解不多,并且确实会很感激这方面的任何帮助。我将包括我的脚本中与提到的问题相关的部分。

#this is the main program 

import numpy as np
import sys

uCounter = 0

class Pipe(object):
   global uCounter

   def __init__(self, nPorts, volume):
      self.volume = volume
      self.rhoj = D(1)
      self.Pj = D(1)
      self.nPorts = nPorts  
      self.freePorts = []
      self.portSetm = []  
      self.portSetP = []
      self.portSetValue = []  
      self.portSetAreas = []  
      self.portSetAreasValue = [] 
      for i in range(nPorts):
         self.freePorts.append(i)
         self.portSetm.append(False)
         self.portSetP.append(False)
         self.portSetValue.append(0.0)
         self.portSetAreas.append(False)
         self.portSetAreasValue.append(0.0)
      self.m = D(self.nPorts)
      self.P = D(self.nPorts)
      self.Areas = D(self.nPorts)
      self.pd = np.zeros((self.nPorts))
      self.dt = 0.0  

   def logics(self, freePorts):                                                                                  
      for port in range(nPorts):
         if self.portSetAreas[self.freePorts[port]] != 0:
            self.Areas[port] = self.portSetAreasValue[self.freePorts[port]]

   def Values1(self):
      equation = Equation(1, uCounter)
      for p in range(self.nPorts):
         equation.A[0, self.m.gid[p]] = self.Areas[port]
      equation.c[0] = 0.0
      return(equation)

#and this is the executable 

import math
import numpy as np
import sys
import scipy.io
import mainproject

Pipe1.portSetAreas[0] = True
Pipe1.portSetAreasValue[0] = 0.1
Pipe1.portSetAreas[1] = True
Pipe1.portSetAreasValue[1] = 0.1

#0 refers to the inlet of the pipe
#1 refers to the outlet of the pipe
equation.A[0,self.m.gid[p]] = self.Areas[port]
NameError: global name 'port' is not defined

【问题讨论】:

  • for p in range(self.nPorts): equation.A[0, self.m.gid[p]] = self.Areas[port] 将 'p' 更改为 'port'。或者更好的“端口”到“p”。
  • 我已经尝试过了,我仍然得到一个错误 ' equation.A[0,self.m.gid[p]] = self.Areas[p] TypeError: 'D' object does not support索引'

标签: python arrays python-3.x


【解决方案1】:

您在 for 循环中定义 p 而不是 port

     for p in range(self.nPorts):
         equation.A[0, self.m.gid[p]] = self.Areas[port]

也就是说,您的代码中还有其他逻辑错误。

这段代码也会导致错误:

   def logics(self, freePorts):                                                                                  
      for port in range(nPorts):

您可能应该将您的范围调用更改为range(self.nPorts)

【讨论】:

  • 我按照你的建议试过了,我有一个新错误 ' equation.A[0,self.m.gid[port]] = self.Areas[port] TypeError: 'D' object does不支持索引'
  • 您会看到这部分脚本将多个值(每个端口的区域值)放在一个数组中。 D 指的是我在脚本中定义的一维域,它工作正常。当我决定要为每个端口包括不同的区域时,我的问题才刚刚开始。对于范围内的 p(self.nPorts): equation.A[0, self.m.gid[p]] = self.Areas[p]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多