【发布时间】:2014-04-27 23:46:43
【问题描述】:
似乎main() 底部的最后一个If statement 永远不会是True。输出应显示"G"。但事实并非如此。
要么就是这样,要么方法 decide() 永远不会将 self.choice 更改为 "G"。
有什么想法吗?
这是我的代码:
## FF Encounter Mapper - New OOP ##
RNLUT = (*snip* - a massive tuple)
class Field(object):
"""A field segment."""
def __init__(self, name, danger_inc, distance):
self.name = name
self.danger_inc = danger_inc
self.distance = distance
def get_seg(self):
# return current segment
return self.segment
def get_stats(self):
# return field stats
return self.name, self.danger_inc, self.distance
def dinc(self):
# return field danger increment
return self.danger_inc
class Player(object):
"""A player."""
def __init__(self, step_id, danger, b_loop):
self.step_id = step_id
self.danger = danger
self.b_loop = b_loop
self.rnd = (RNLUT[self.step_id] - self.b_loop) & 0xFF
self.danger_limit = ((self.rnd + 1) * 256)
self.segment = []
self.choice = "W"
def get_stats(self):
# return player stats
return self.step_id, self.danger, self.danger_limit, self.b_loop, self.choice
def step(self, dinc):
# take one step and update stats
self.choice = "W"
self.danger = (self.danger + dinc)
if self.danger > 65535:
self.danger = dinc
self.step_id += 1
if self.step_id > 255:
self.step_id = 0
if self.step_id == 0:
self.b_loop = self.b_loop + 13
if self.b_loop > 255:
self.b_loop = 0
self.step_id += 1
if self.step_id > 255:
self.step_id = 0
if self.step_id == 0:
self.b_loop = self.b_loop + 13
if self.b_loop > 255:
self.b_loop = 0
self.rnd = (RNLUT[self.step_id] - self.b_loop) & 0xFF
self.danger_limit = ((self.rnd + 1) * 256)
def is_fight(self):
# return true if the current step is a battle
return self.danger > self.danger_limit
def decide(self, choice):
# make a decision: glitch or battle (default: walk)
if choice == "G":
self.choice == "G"
elif choice == "B":
self.choice == "B"
self.danger = 0
print self.choice
def log(self):
# add stats to segment log
self.segment.append(self.get_stats())
def main():
myfield = Field("test_field", 113, 256)
cloud = Player(250,0,13)
dinc = myfield.dinc()
print "initial: ", cloud.get_stats()
print "Run the whole segment:"
while len(cloud.segment) < 128: # walk field distance
cloud.step(dinc)
if cloud.is_fight() == True: # if there's a battle
cloud.decide("G") # perform Glitch every battle
cloud.log() # add stats and decision to segment log
for i in cloud.segment:
print i # output log
main()
输出错误:
...
(86, 5198, 9472, 26, 'W')
(88, 5311, 48640, 26, 'W')
(90, 5424, 4096, 26, 'W') # THIS SHOULD BE "G"
(92, 5537, 65280, 26, 'W') # BECAUSE self.danger > self.danger_limit
...
如果decide() 正常工作,则条目“90”应为“G”...
【问题讨论】:
-
不用写
if cloud.is_fight() == True:if cloud.is_fight():就够了 -
请注意,这个
if cloud.is_fight() == True是多余的。如果is_fight()返回bool,你可以直接说if cloud.is_fight()。 -
@RubenBermudez 是的。但它不起作用,所以我试图让它明确,以防万一。
-
这似乎是题外话,因为问题是由一个简单的、不可重现的印刷错误引起的。
标签: python class oop python-2.7