import random
def ifKilled(bullet, hp, target):
shot=False
length=len(hp)
while bullet>0 and hp[target]!=0:
bullet-=1
hp[random.randrange(length)] -= 1
if hp[target]==0:
shot=True
return shot
input1 = input('Enter the hp of all possible target:')
input2 = int(input('Enter the target:'))
finput1 = [int(n) for n in input1.split(' ')]
print(finput1)
print("target is:"+str(input2))
c=0
t=0
while c<1000:
#if ifKilled(3, [30,2],1):
if ifKilled(3, finput1, input2):
t+=1
#print(str(t))
c+=1
print(t/1000)
上面的代码,ifKilled需要一个列表和一个int作为参数,但是当我通过硬编码输入一个列表时,它给出了一个与用户输入列表不同的答案(两个列表都是[30,2])。获取用户列表时我做错了什么? 我所做的是在输入中键入302,它应该得到一个与[30,2]列表相同的列表,对吗?
答案 0 :(得分:2)
根本原因是你在hp
函数内改变ifKilled
参数。
当您将finput1
列表传递给ifKilled
时,它会在while
循环的迭代中重复使用。
当您将[30, 2]
传递给ifKilled
时,会为每次迭代重新创建,因此ifKilled
中对其的任何更改都不会保存。