若要重现此问题,请在repl.it中运行此命令,并在提示时输入“cNOT”(不带引号)。在这之后,它应该询问你想要的第二个量子比特的门,相反,它会再次问你给出“cNOT”作为答案的问题。在
import numpy as np
def target(qstat):
typegat2 = input("Which gate is this target qubit for? See list of two qubit gates at the top.")
if typegat2 == "cNOT":
carray = np.array([[0,1],[1,0]])
if np.array_equal(mem1, [0,1]) == True:
return qstat
elif np.array_equal(mem1, [1,0]) == True:
return np.dot(qstat,carray)
else:
print("superposition...not implemented")
return qstat
else:
print("other gates not yet implemented")
return qstat
qubits = 2
qstat = {1:[0,1],2:[0,1]}
done = "n"
singates = {"target":target}
x=1
while x <= qubits:
while done == "n":
print("this is qubit #",x)
fstgat = "target"
print("first gate is target")
if fstgat in singates:
#checks if there is an error from mem1 being undefined (control/target out of order)
while True:
try:
qstat[x]=singates[fstgat](qstat[x])
break
except NameError:
print("switching qubits - we'll come back to this one")
#error here -> keeps saying "which gate is this target qubit for"
done = "y"
done = input("Done with your qubit? y or n: ")
else:
print("sorry, that functionality is not yet implemented, try custom gate")
done ="y"
x+=1
done = "n"
print("result for qubit",1,qstat[0])
print("result for qubit",2,qstat[1])
这段代码被简化了很多,但它的目的是模拟一台理想的量子计算机。”“qstat”是一个关于每个量子比特状态的字典。它可能不需要是字典,但它在实际程序中的方式很好,所以我保留它。总之,“量子比特”是系统中的量子比特数,它通常可以是用户输入的任何整数。函数“target”是cNOT门中的目标量子位。代码中有“try…except”部分的原因是因为有时用户会在“control”之前输入“target”,并且由于需要检查控制量子位以确定如何处理目标量子位,因此输出一个NameError,所以我把它设置成在一个列表中记录这个量子位,我现在正在对这个列表中的每个量子位进行“重新计算”。在
“done”是一种检查用户是否完成了每个qubit的方法,由于它是在while循环中,所以我认为在“except”语句之后将其设置为“y”将结束while循环并转到下一个qubit,但由于某些原因,它仍停留在函数内部-同一行被反复重复。如果你想退出函数,你必须输入一些胡言乱语,因为这对应于最后一个else语句,如果typegat2不等于“cNOT”,它将返回qstat(它没有改变)并继续。很明显,由于错误或其他原因,函数没有返回任何内容。但问题就变成了,如何让它退出函数呢?在
任何帮助都将不胜感激。我很乐意回答您对代码的任何问题;我尽量减少它。在
去掉
while True:
循环,这会导致代码在NameError
异常发生时重复。在另外,将
done
的输入移动到try
块中。否则,该输入将覆盖except
块中的done = "y"
语句。在相关问题 更多 >
编程相关推荐