我最近写了一段代码(一个解密器)将结果转换成一个特定的数字(我从以“拉格朗日多项式”为核心的“莎米尔的秘密计划”中得到启发)。我以前写过另一个程序,将秘密变成“秘密”,现在我坚持要再次将“秘密”转换成秘密。
这是我写的:
x_values = []
y_values = []
while -1 not in x_values:
adder = int(input('Enter x value (Enter "-1" to end): '))
x_values.append(adder)
else:
x_values.pop()
while len(y_values) != len(x_values):
adder = input('Enter y value: ')
adder = int(adder, 16)
y_values.append(adder)
S = 0
for i in range(len(x_values)):
x_other = x_values
x_current = x_other.pop(i)
y_other = y_values
y_current = y_other.pop(i)
num = y_values[i]
for a in x_current:
num *= -a
den = 1
for a in x_current:
den *= (x_values[i] - x_current[a])
S += (num / den)
print('Secret: ', S)
input()
当我运行它时,它显示:
File "C:\Python Code\Decryptor.py", line 37, in <module>
for a in x_current:
TypeError: 'int' object is not iterable
我阅读了许多有关此问题的文章,但无法解决。你能帮我吗?预先感谢!
编辑:谢谢大家帮助我解决我的问题。我终于设法解决了这个问题,该程序运行起来很不错。
答案 0 :(得分:0)
在python列表上调用pop
方法时,它将从列表中删除输入的索引元素,然后返回该元素。
因此x_current
变量在第一次迭代中是一个值等于1的整数(在示例列表中:x_values = [1、2、3、4])。
因此,第二个for循环不正确,因为您试图以不可能的整数进行循环。因此,如果要在包含已弹出的每个元素的列表中进行迭代,则应将第二个循环替换为以下内容:
for a in x_other:
否则,您应在x_current
范围内循环。
如果仍有问题,可以发表评论以通知我。