用户输入列表是否等同于普通列表?

时间:2018-05-06 07:55:11

标签: python python-3.x

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]列表相同的列表,对吗?

1 个答案:

答案 0 :(得分:2)

根本原因是你在hp函数内改变ifKilled参数。

当您将finput1列表传递给ifKilled时,它会在while循环的迭代中重复使用。

当您将[30, 2]传递给ifKilled时,会为每次迭代重新创建,因此ifKilled中对其的任何更改都不会保存。