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()
答案 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]