我有这段代码。
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列设置为TEXT,而GRIDCODE设置为整数。
答案 0 :(得分:0)
根据您的评论,我想我会进一步详细说明答案以及您可能收到错误的原因。如上所述,您不应该像现在那样使用类。你想要的是:
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")
答案 1 :(得分:0)
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。然后你可以逐行进行,并为每一行运行更改函数。