为什么我这里一直会报错,求指点

我想做一个石头剪刀布的人机对战,就是按照每局电脑出电脑和玩家上次没出的拳的规则,但是一直在第二局会出现

Traceback (most recent call last):
  File "D:\***-智能棋手练习1&2作业(石头剪刀布).py", line 18, in <module>
    a.remove(computer)
ValueError: list.remove(x): x not in list


的报错结果,这是源代码:

import random
frequency=0
a=["石头","剪刀","布"]
while True:
    a=["石头","剪刀","布"]
    if frequency<2 or len(a)!=1:
        computer = random.randint(0, 2) #定义范围
        computer = a[computer]
    else:
        if len(a)==1:
            computer=a[0]
    #提醒用户按指示输入
    person=input("请输入石头,剪刀,布,退出按回车:")
    #判断输入,当输入为空时退出
    if person =="":
        exit(0)
    a.remove(person)
    a.remove(computer)
    frequency+=1
    print("玩家出"+person+",电脑出"+computer,end=",")
    #枚举玩家胜时的情况
    if ((person == "石头") and (computer == "剪刀")) or ((person == "剪刀") and (computer == "布")) or (
            (person == "布") and (computer == "石头")):
        print("玩家胜")
    elif person == computer:
        print("平局")
    else:
        print("电脑胜")

        



求指点

1.首先你的逻辑设计就有问题:按照你的代码玩家和电脑的出拳应该是用两个变量保存,而你用了同一个
因为你是先获取了电脑的出拳,然后再用户输入,如果用户输入的和电脑是一样的在第二次去remove的时候就会报错
2.逻辑设计建议:
可选内容用一个集合保存永远不变,用另一个集合记住上次玩家出拳和电脑出拳,然后在两个集合的差集中取一个作为电脑的出拳
注意:a.在取差集后清除保存上次出拳的集合,然后添加电脑和玩家
b.将集合转列表再取随机值
c.差集只有一个时不用随机
3.建议不同的变量用不同的名字去保存,变量混用很容易导致问题

第17行,18行的意义在哪,第17行把人出的拳从列表里面删除了,如果这个时候人和电脑出的拳是一样的话,那么你已经删除了一个了,当然没办法再删除一次了,你先搞清楚17,18行是干啥的,放在这到底有用没有,我觉得删了就行。