我在做游戏。为了让用户能够移动,他们需要解决数学问题。上/下/左/右各有问题。在游戏开始时,生成4道数学题。代码如下:
def generate_first_4_problems(level, operation, game_object, player_type):
creator_problems = ['p1up', 'p1right', 'p1down', 'p1left']
opponent_problems = ['p2up', 'p2right', 'p2down', 'p2left']
problems = []
answers = []
while len(problems) < 4:
problem = generate_problem(level, operation)
answer = x(problem).expr()
if answer not in answers:
problems.append(problem)
answers.append(answer)
print('problems')
print(problems)
if player_type == 'creator':
for i, d in enumerate(creator_problems):
setattr(game_object, d, problems[i])
print('creator_problem %s' % d)
print(getattr(game_object, d))
game_object.save()
elif player_type == 'opponent':
for i, d in enumerate(opponent_problems):
setattr(game_object, d, problems[i])
print('opponent_problem %s' % d)
print(getattr(game_object, d))
game_object.save()
game_object.save()
print('after save')
print(game_object.p1up)
return problems
此代码对每个玩家(创建者和对手)运行两次 此外,打印内容如下:
problems
['7 + 3', '1 + 4', '10 + 9', '8 - 10']
creator_problem p1up
7 + 3
creator_problem p1right
1 + 4
creator_problem p1down
10 + 9
creator_problem p1left
8 - 10
after save
7 + 3
{'problem_list': ['7 + 3', '1 + 4', '10 + 9', '8 - 10']}
problems
['2 + 6', '2 + 3', '4 - 8', '0 + 3']
opponent_problem p2up
2 + 6
opponent_problem p2right
2 + 3
opponent_problem p2down
4 - 8
opponent_problem p2left
0 + 3
after save
None
调用第一个func的代码:
def generate_first_4_problems_game(level, operation, game_object, player_type):
problem_list = generate_first_4_problems(
level, operation, game_object, player_type)
context['problem_list'] = problem_list
有人能帮忙吗
回溯
Traceback (most recent call last):
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/channels/worker.py", line 119, in run
consumer(message, **kwargs)
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/channels/sessions.py", line 78, in inner
return func(*args, **kwargs)
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/channels/auth.py", line 42, in inner
return func(message, *args, **kwargs)
File "/home/michael/projects/gameapollius/engine/game_consumers.py", line 439, in ws_receive_game
signals[signal]()
File "/home/michael/projects/gameapollius/engine/game_consumers.py", line 421, in send_answer
if is_correct_answer(getattr(game, d), int(answer)):
File "/home/michael/projects/gameapollius/engine/game_consumers.py", line 60, in is_correct_answer
answer = x(problem_string).expr()
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/parsley.py", line 85, in invokeRule
ret, err = self._grammar.apply(name, *args)
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 462, in apply
val, err = self._apply(r, ruleName, args)
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 495, in _apply
[rule(), self.input])
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 198, in rule_expr
_G_apply_55, lastError = self._apply(self.rule_expr2, "expr2", [])
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 495, in _apply
[rule(), self.input])
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 218, in rule_expr2
_G_apply_61, lastError = self._apply(self.rule_value, "value", [])
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 495, in _apply
[rule(), self.input])
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 62, in rule_value
_G_or_19, lastError = self._or([_G_or_15, _G_or_17])
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 598, in _or
ret, err = f()
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 54, in _G_or_15
_G_apply_16, lastError = self._apply(self.rule_number, "number", [])
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 495, in _apply
[rule(), self.input])
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 17, in rule_number
_G_consumedby_5, lastError = self.consumedby(_G_consumedby_1)
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 676, in consumedby
_, e = expr()
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 14, in _G_consumedby_1
_G_many1_4, lastError = self.many(_G_many1_2, _G_many1_2())
File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 11, in _G_many1_2
_G_apply_3, lastError = self._apply(self.rule_digit, "digit", [])
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 495, in _apply
[rule(), self.input])
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 790, in digit
x, e = self.rule_anything()
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 813, in rule_anything
h, p = self.input.head()
File "/home/michael/projects/gameapollius/apvenv/lib/python3.6/site-packages/ometa/runtime.py", line 232, in head
if self.position >= len(self.data):
TypeError: object of type 'NoneType' has no len()
相关功能(回溯)
def send_answer(answer, game_object, player_type):
creator_problems = ['p1up', 'p1right', 'p1down', 'p1left']
opponent_problems = ['p2up', 'p2right', 'p2down', 'p2left']
if player_type == 'creator':
for d in creator_problems:
print('getattr')
print(getattr(game, d))
if is_correct_answer(getattr(game, d), int(answer)):
context['move_direction'] = d
elif player_type == 'opponent':
for d in opponent_problems:
print('getattr')
print(getattr(game, d))
if is_correct_answer(getattr(game, d), int(answer)):
context['move_direction'] = d
目前没有回答
相关问题 更多 >
编程相关推荐