【发布时间】:2013-05-19 23:15:13
【问题描述】:
我正在尝试编写一个程序,它遍历所有可能的简单方程以找到 24 的值。我设法完成了循环,但有些东西我没有抓住。
这个想法是有一个 3 级循环(我猜是 theta(n^3)?,我认为时间复杂度不好),这用于构建一个包含 4 个数字(在程序早期随机生成)的方程,这些数字被添加加入我的名单。
numList = [x2, x3, x4]
这是我的代码:
for i in range(4):
for j in range(4):
for k in range(4):
for l in range(len(numList)):
n += 1
print(i, j, k, " i, j, k")
print(x2, x3, x4, "x2, x3, x4")
print(x, "x supposed to be reset")
print(l, "val of l")
print(n, "val of n")
if i == 0 or j == 0 or k == 0:
x += "+"
x += str(numList[n])
print(x, "add")
if i == 1 or j == 1 or k == 1:
x += "-"
x += str(numList[n])
print(x, "sub")
if i == 2 or j == 2 or k == 2:
x += "*"
x += str(numList[n])
print(x, "mult")
if i == 3 or j == 3 or k == 3:
x += "/"
x += str(numList[n])
print(x, "div")
if n == 2:
print()
print("----")
print(x, "final")
print(eval(x), "evald")
if eval(x) is not 24:
x = x1
print(x, "x reset")
else:
print(eval(x), "= 24")
n = -1
print("----")
由于某种原因,我正在构建和评估的字符串 (x) 没有重置,而是添加到上次循环迭代中生成的相同字符串(它应该是默认值)时,就会出现错误. x的默认值是随机生成的:
x = str(randrange(1, 9))
这对我来说很奇怪,我不确定出了什么问题,循环就像一个没有中断的 switch 条件语句。这是我的控制台输出:Pasted to pastebin
谁能告诉我我做错了什么?或者我的代码中发生了什么我没有看到 为什么 x 没有像正在构建的新字符串一样被重置(这就是我想要的)?
编辑:这是完整的来源:equation.py
【问题讨论】:
-
为什么不把 x = "" 放在你想要重置的地方?顺便说一句,您应该发布足够多的代码,以便其他人可以运行您的代码并看到与您相同的错误。
-
@Patashu 我希望 x 的原始值在等式开始时相同。我在这个循环之前的程序开始处生成了 x 的值,因为我希望它不受影响。我希望它始终是等式中的第一个数字,以及以下所有数字。
-
好吧,如果 eval(x) 为 24,您不会重置 x。这是问题所在吗?
-
没有。如果 x 是 eval() 到 24 的问题。我最终将退出该函数(我还没有添加该代码)。现在,程序应该完全循环所有可能的方程排列。问题是,当我有我的最终方程 (x + x2 + x3 + x4) 并且不是 24 时,我希望 x 成为默认值,以便可以用它构建一个全新的方程。
-
@Patashu 说循环生成方程(2 + 5 + 3 + 8,x 从“2”开始),这不是 24。所以当循环重新开始时,我想让 x 成为再次“2”,因此循环从头开始处理方程构建。循环基本上将值连接到我的方程式字符串,方程式中这些数字之间的运算由循环确定。根据我的代码,下一个方程 x 应该是 (2 + 5 + 3 - 8)。