我如何修复" '元组'对象不支持项目分配"在我的代码?

时间:2017-12-04 06:08:09

标签: python tuples

import math  
def ListSqrRoot(nums):  
    n=len(nums)  
    for i in range(n):  
        nums[i]=math.sqrt(nums[i])  


def main():  
    nums=eval(input("Please enter a list of numbers:"))  
    print( "Before calling the function your list is:")  
    print (nums)  
    ListSqrRoot(nums)  
    print ("After calling the function your list is:")  
    print (nums)  

main()

2 个答案:

答案 0 :(得分:0)

问题是,eval(input("Please enter a list of numbers:"))会返回tuple,这是不可变的,您在此处尝试修改它:

nums[i] = math.sqrt(nums[i])  

可以通过创建list来修复它:

nums = [x for x in eval(input("Please enter a list of numbers:"))]

警告: eval is evil!

答案 1 :(得分:0)

核心问题是你输入eval的表达式,例如“1,2,3”是元组,它们是不可变的,即无法改变。

此外,使用像这样的eval是危险的,并且可能导致一些令人困惑的错误。 (如果你输入一个空列表会发生什么?)Python有很多很好的字符串操作函数,所以它也是完全没必要的。尝试,

line = input('enter numbers:')
nums = [int(s.strip()) for s in line.strip().split(',') if s]