基于其他值来定义值是不可能的

2024-06-01 06:58:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段代码。你知道吗

  class GRIDCODE:
    pass
def change(BSMPW):
if GRIDCODE == "1":
  return "BSM"
elif GRIDCODE == "3":
  return "BSE"
elif GRIDCODE == "4":
  return "BSP"
else:
  return "None"

我想让它做的是,如果列a中的值是1,则填充列b中的值BSM,依此类推。如果没有数据,则不写入任何数据。 结果是它写入每一行“None”,这是错误的,因为我正在查看的列(GRIDCODE)中填充了值1、3和4。你知道吗

我做错什么了?你知道吗

编辑:2014年6月25日下午4:31

我想澄清一下:

我的桌子是这样的:

GRIDCODE     BSMPW
1            empty (that does not stand in there, its just blanc)
1            empty
3            empty
1            empty
4            empty

我希望它看起来像这样:

GRIDCODE     BSMPW
1            BSM
1            BSM
3            BSE
1            BSM
4            BSP

我以前用另一张桌子做过,效果很好。BSMPW列设置为文本,而GRIDCODE设置为整数。你知道吗


Tags: 数据代码nonereturndefpassbspclass
2条回答

根据你的评论,我想我会进一步详细的回答,为什么你可能会收到你的错误。如前所述,您不应该需要该类,因为它现在所在的位置没有被使用。您需要的是:

def change(BSMPW):
    if BSMPW == "1":
        return "BSM"
    elif BSMPW == "3":
        return "BSE"
    elif BSMPW == "4":
        return "BSP"
    else:
        return "None"

注意到我们现在是如何打开BSMPW而不是GRIDCODE的。您正在打开一个不存在的变量(这可能是它之前抛出全局错误的原因)。因为它从来没有等同于你的任何给定的情况,它总是返回没有。但是,您的代码中仍然有一个问题,我想在这里也表达出来。你知道吗

如果你给它一个int,它永远不会给你任何。这是因为您试图将整数与字符串进行比较。下面的示例对此进行了详细说明:

change(1)
>> None
change("1")
>> BSM

如果要传递一个整数,则需要将其与整数进行比较。所以您需要将代码更改为:

def change(BSMPW):
    if BSMPW == 1:
        return "BSM"
    elif BSMPW == 3:
        return "BSE"
    elif BSMPW == 4:
        return "BSP"
    else:
        return "None"

但是,如果您希望成为“pythonic”并实现一个高效的switch语句,那么您需要执行以下操作(如果您要比较字符串,请再次添加引号):

def change(BSMPW):
    switch = {1 : "BSM",
              3 : "BSE",
              4 : "BSP"}
    return switch.get(BSMPW, "None")

Bob和Aamir指出的问题是GRIDCODE没有值,因此不能等于任何值,这使得change()函数的其余部分变得毫无意义。如果您想使用GRIDCODE的某个值,您的代码可能如下所示。你知道吗

class GRIDCODE:
  def __init__(self, BSMPW):
    self.BSMPW = BSMPW

  def getBSMPW(self):
    return self.BSMPW

def change(BSMPW):
  if BSMPW == "1":
    return "BSM"
  elif BSMPW == "3":
    return "BSE"
  elif BSMPW == "4":
    return "BSP"
  else:
    return "None"

newGrid = GRIDCODE("1")
print change(newGrid.getBSMPW())
#prints "BSM"

但是,如果我正确理解您的意思,最简单的方法是完全跳过类并使用CSV模块,只要列可以转换为CSV。然后你可以一行一行地,为每一行运行change函数。你知道吗

相关问题 更多 >