数学函数中的索引超出范围

本杰明·曼特尔

以下是我认识的某人正在用Java上学的东西的我的版本。我想通过选择一个相当复杂的方法并利用仅循环,if语句以及其他诸如对象,类,递归之类的其他基本Python东西来挑战自己。

我需要输入一个大于1的数字,在这种情况下,我只能将其限制为最多30个数字,直到函数正常工作为止。该函数需要输出一个数字,该结果是找到两个数字相乘得到原始输入数字(例如,输入21的3和7)的结果,通过确保这些数字的级联数字也将输入数字作为其乘积如果您将每个数字从左到右依次乘以下一个,您还将产生原始的输入数字。

在此功能可能提供的所有可能输出中,该功能最终选择最低的数字并将其作为输出。因此,即使144要给一个成功的输出数量,它不会使用12,12对,因为输出将是1212和肯定还有另一对(如2,72),给出了一个更小的最终输出。

例子

>>> thing(21)
37

>>> thing(144)

可能什么都不起作用,对吧?因此,这将返回NoneFalse给用户失败消息。

如果不是因为必须同时产生输入数字而将数字对连接而得到的数字的数字规则,则输入144将返回/打印1212。​​但是,由于该规则,所以1 x 2 x 1 x 2 = 4而不是144,因此它不起作用。

我收到有关字符串索引超出范围的错误。

def thing(n):
    list1 = []
    list2 = []
    calc = False
    count = 0
    if n > 1 and n < 30:
        for x in range(1, n + 1):
            for y in range(1, n + 1):
                if (x * y) == n:
                    list1.append([x, y])
                    for pair in list1:
                        digits = str(pair[0]) + str(pair[1])
                        holder = int(digits[count])
                        while count < (len(digits) - 1):
                            holder *= int(digits[count+1])
                            count += 1
                            if count == len(digits)-1:
                                if holder == n:
                                    list2.append(holder)
                                    calc = True
                                    count = 0
                                else:
                                    count = 0
    else:
        print("Input invalid.")
    if calc:
        print(min(list2))
    else:
        print("No such number.")

故意在做这种低效而费解的方法并考虑将其培训。

但是,我仍然会很乐意提出建议,不仅是通过自己的方法来改进此代码,而且建议以更高级的方式用更少的行编写代码

即使使用低级的Python知识来解决这个问题,也可能有一种我想念的更短的方法。我知道即使在我的方法中,我也可以将其缩短几行,或者减少一些变量,但是到目前为止,我只是一直在尝试使其首先工作。

注意:我不是来自数学背景。(如果没有任何高级数学知识,我能否在该行业取得成功?)

杰米·康塞尔(Jamie Counsell)

我相信,在count != len(digits)-1ascount未重置为零的情况下会发生这种情况,从而在下一次迭代中导致索引错误。我认为您正在寻找类似的东西:

                    if count == len(digits)-1:
                        if holder == n:
                            list2.append(holder)
                            calc = True
                            count = 0
                        else:
                            count = 0
                    else:
                        count = 0

此外,while由于在while检查其条件之前将count设置为零,因此代码末尾循环似乎将永远运行在这种情况下:

                while count < (len(digits) - 1):
                    holder *= int(digits[count+1])
                    count += 1
                    if count == len(digits)-1:
                        if holder == n:
                            list2.append(holder)
                            calc = True
                count = 0

将是您的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章