首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数学公式的数据结构

数学公式的数据结构
EN

Stack Overflow用户
提问于 2020-10-19 20:25:24
回答 1查看 38关注 0票数 0

我正在编写一个python脚本,该脚本通过pylatex为数学测试生成pdf。到目前为止,我使用的是

代码语言:javascript
复制
str(random.randint(8,32)) +' + ' + str(random.randint(8,121))

并且类似于生成随机化分配。

我不想像上面那样硬编码所有东西,但我想使用数据库方法来存储可能的赋值。在这个方向上,我的想法是关系数据库

代码语言:javascript
复制
(student) --n (assignment_type)

在每个学生都得到个性化作业的地方,例如Peter将得到以下类型的作业

代码语言:javascript
复制
( (random sign) (random number 2-8) x (+ or -) (random sign) (random number))    (*)

代码语言:javascript
复制
( (random number 2323-9999):11)

我不确定如何将此数据结构保存在数据库中,以及如何将其转换为python代码。我的想法是数据库表'assignment_type':

代码语言:javascript
复制
INT number of randomized vars
INT number of signs
ARRAY List of signs
ARRAY (lower und upper bound for each random number)
STRING '(s1r1s2r1)'

其中'(s1r1s2(s3r1))‘在python中会被翻译成上面的问题(*) ("( sign1 random1 sign2 (sign3)random2)")我不确定这种处理问题的方式是不是一个愚蠢的想法。我在此请求您审查我的方法,如果可能的话,请给我一个处理这种数据结构的更好的方向。

EN

回答 1

Stack Overflow用户

发布于 2020-10-19 21:49:51

一个简单的想法:

首先,定义几个随机函数以供以后使用。

代码语言:javascript
复制
import random

def sign_num(a, b):
  n = random.randint(a, b)
  if random.random() < 0.5:
    return '(-{})'.format(n)
  else:
    return str(n)

def num(a, b):
  return str(random.randint(a,b))

def add(a, b, parens=False):
  n1 = num(a, b)
  n2 = num(a, b)
  if parens:
    return '({} + {})'.format(n1, n2)
  else:
    return '{} + {}'.format(n1, n2)

def sign_add(a, b, parens=False):
  n1 = sign_num(a, b)
  n2 = sign_num(a, b)
  if parens:
    return '({} + {})'.format(n1, n2)
  else:
    return '{} + {}'.format(n1, n2)

然后,参考所有这些函数创建一个dict

代码语言:javascript
复制
dico = {'NUM': num, 'SIGNNUM': sign_num, 'ADD': add, 'SIGN_ADD': sign_add}

然后,编写解析函数:

代码语言:javascript
复制
def fill_in(txt):
  argv = txt.strip().split()
  return dico[argv[0]](int(argv[1]), int(argv[2]))

def parse(txt):
  if '[' not in txt:
    return txt
  else:
    i = txt.index('[')
    j = txt.index(']')
    return txt[:i] + fill_in(txt[i+1:j])  + parse(txt[j+1:])

现在,您可以在模板字符串上调用它们:

代码语言:javascript
复制
parse('[NUM 3 9] x ([ADD 2 9])')
# '8 x (8 + 7)'

还有很大的改进空间。特别是,函数fill_in应该以一种处理可变数量的参数的方式编写。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64427308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档