为什么函数在结束循环并退出后仍重复文本?

2024-04-28 13:47:53 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

若要重现此问题,请在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(它没有改变)并继续。很明显,由于错误或其他原因,函数没有返回任何内容。但问题就变成了,如何让它退出函数呢?在

任何帮助都将不胜感激。我很乐意回答您对代码的任何问题;我尽量减少它。在


Tags: 函数代码targetforisnp量子this
1条回答
网友
1楼 · 发布于 2024-04-28 13:47:53

去掉while True:循环,这会导致代码在NameError异常发生时重复。在

另外,将done的输入移动到try块中。否则,该输入将覆盖except块中的done = "y"语句。在

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)
            try:
                qstat[x]=singates[fstgat](qstat[x])
                done = input("Done with your qubit? y or n: ")
            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"   
        else:
            print("sorry, that functionality is not yet implemented, try custom gate")
            done ="y"
    x+=1
    done = "n"

相关问题 更多 >