所以,为了好玩,我一直在编写以下代码,该代码实际上吸收了两个口袋妖怪,并输出了一个口袋妖怪列表,该列表将根据防御情况将三只口袋妖怪队伍包围起来。我对所有18种类型都有完整的工作代码,但这是我一直用于测试的较小版本:
import numpy as np
import sys
#testing assuming input in fire
dict={}
dict["fire"]=np.array([1,-1,1])
dict["water"]=np.array([1,1,-1])
dict["grass"]=np.array([-1,1,1])
value={}
value[0]="fire"
value[1]="water"
value[2]="grass"
type1=input("First type? (no caps): ")
type(type1)
type2=input("Second type? (no caps): ")
type(type2)
poke=dict[type1]+dict[type2]
for t in range(len(poke)):
if poke[t]<0:
poke[t]=-1
elif poke[t]>0:
poke[t]=1
else: continue
A=np.column_stack(([fire,water,grass]))
weak=any(poke<0)
p=np.linspace(0,0,len(poke))
if weak==True:
for t in range(len(poke)):
if poke[t]<0:
p[t]=1
else:
p[t]=0
else:
print("....your pokemon has no weaknesses....")
for u in range(0,len(poke)):
for v in range(u,len(poke)):
combo=A[:,u]+A[:,v]
for t in range(0,len(poke)):
if combo[t]<0:
combo[t]=-1
elif combo[t]>0:
combo[t]=1
else: continue
if combo[1]==-poke[1]: #dep on values of p that are not 0
if u==v:
print(value[u])
else:
print(value[u],value[v])
else: continue
代码基本上是做什么的,我有一系列代表每种类型的数组。 1表示它抵抗与该类型相对应的神奇宝贝,a -1对此弱,而0为中性。在完整的代码中,它接受两个双重类型的宠物小精灵,将它们的数组加在一起,然后将其视为单个实体。在较小的代码中,我采用一种并寻找一种。将所有内容加在一起后,我将值改回1和0,以便可以进行适当的比较。
然后实际的比较是通过这个双重嵌套的for循环完成的,该循环遍历每种可能的组合并将其与想要的结果进行比较,这基本上是针对poke []的任何值为-1的情况,我想要一个匹配的组合[]值为1。
if combo[1]==-poke[1]:
if u==v:
print(value[u])
else:
print(value[u],value[v])
else: continue
问题是我在泛化代码时遇到麻烦,因此不必每次想进行新的“搜索”时都回去对其进行编辑。
对于此代码实例:
>>First type? (no caps): fire
Second type? (no caps): fire
water
water grass
grass
但是,如果我想这样做,请说一种水类型:
>>First type? (no caps): water
Second type? (no caps): water
fire
它应该建议火,火/草,草,但不是因为if语句不再指向要检查的正确索引。这是我每次都要编辑的内容,在归纳为简单输入/输出时遇到了麻烦。
我将此值p设置为0和1的数组,其中1是弱点,0是其他值:
weak=any(poke<0)
p=np.linspace(0,0,len(poke))
if weak==True:
for t in range(len(poke)):
if poke[t]<0:
p[t]=1
else:
p[t]=0
else:
print("....your pokemon has no weaknesses....")
我认为我可能可以找到一种方法来专门检查p = 1处的值,但随后会出现实际问题。在几乎所有情况下,都有多个缺陷,这导致必须在相同的if语句中检查3或4个四个条件,例如:
if combo[1]==-poke[1] && combo[5]==-poke[5] && combo[13]==-poke[13]:
即使那样,有时这种组合也不存在。我当时想打印出对应于p = 1的弱点(如果大于3),并在用户想要检查的内容上进行某种形式的输入,但是我无法弄清楚如何在一个条件中包含多个条件如果语句像那样变化。我也不确定如何使当前的单个语句指向我想要的p索引。
我将继续努力,但我仍然很感谢,因为我仍然很新。
谢谢!