【发布时间】:2021-02-25 06:03:20
【问题描述】:
我有一个看起来像这样的代码:
import random
import numpy as np
from operator import itemgetter
import sys
equal_to = {"a":"u_plus", "b":"u_minus", "c":"v_plus", "d":"v_minus"} #bell state
p = 8 #length of generated binary
key1 = [] #list of generated binary
for i in range(p):
temp = random.randint(0,1)
key1.append(temp)
tmplist2 = [] #list of random sample_letters
for i in range(p):
while True:
attempt = str(random.choice(list(equal_to)))
tmplist2.append(attempt)
if attempt == 'b':
break
#evaluate result of alice binary and bell state
def eva(alice, bell):
if alice == 1:
if bell == 'a' or bell == 'b':
return 1
elif bell == 'c' or bell == 'd':
return 0
elif alice == 0:
if bell == 'c' or bell == 'd':
return 1
elif bell == 'a' or bell == 'b':
return 0
for_bob = [] #list of generated binary and bell state through logic gate
for k in key1:
for t in tmplist2:
e = eva(k, t)
for_bob.append(e)
#tr = [[eva(k,t) for t in tmplist2] for k in key1] #list comprehension split the key properly
print("generated random binary strings:", key1)
print("generated bell states:", tmplist2)
print("encrypted strings:", for_bob)
它打印出这样的东西:
generated random binary strings:
[0, 0, 0, 0, 0, 1, 1, 0]
generated bell states:
['b', 'c', 'b', 'a', 'a', 'c', 'b', 'b', 'd', 'd', 'd', 'c', 'c', 'b', 'a', 'd', 'd', 'b', 'c', 'c', 'd', 'c', 'd', 'b', 'd', 'c', 'a', 'd', 'c', 'd', 'c', 'c', 'b']
encrypted strings:
[0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0]
如果字符串 'b' 出来,我正在寻找一种在 tmplist2 内循环而不从头开始的方法。
循环应该按如下方式运行:
key1[0] 应使用 'b' 进行评估,返回 0。由于 'b' 出现,外循环应继续到下一个元素 key1[1] 并应使用'c' 和 'b',返回 1 0。再次因为 'b' 出来了,外循环将继续到下一个元素 @987654326 @ 并使用 'a'、'a'、'c' 和 'b' 评估自身,返回 0 0 1 0。这应该一直持续到 tmplist2 完成。
有人有解决这个问题的办法吗?我正在寻找如何在循环中循环而不是在给出某个条件时返回开头的解决方案。在这种情况下 'b'.
n.b.:这个程序旨在模拟量子隐形传态。
【问题讨论】:
-
能否发一份参考资料或问题陈述的全文。
-
我没有问题陈述。但基本上每当
key1(外循环)用“b”(内循环)求值时,外循环应该移动到下一个元素并继续求值,直到找到另一个“b”。至于结果,for_bob的长度应该和tmplist2一样。