2017-12-04 2 views
0
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

먼저 함수로 전달하기 전에 목록으로 변환해야합니다. 튜플은 불변입니다 – roganjosh

+0

튜플 객체를 편집하려면 대체 목록을 사용하십시오. 그 문제는 무엇입니까? –

답변

0

문제는 eval(input("Please enter a list of numbers:"))는 불변 인 tuple 반환 그리고 당신은 여기를 수정하려는 :

그것은 대신 list를 작성하여 고정 할 수 있습니다
nums[i] = math.sqrt(nums[i]) 

:

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

경고 :eval is evil!

0

핵심 문제는 "1, 2, 3"과 같이 eval에 입력하는 표현식이 불변 (즉, 변경할 수없는 튜플)이라는 것입니다.

또한 이와 같이 eval을 사용하면 위험하며 혼란스러운 오류가 발생할 수 있습니다. (빈 목록에 넣으면 어떻게됩니까?) 파이썬에는 멋진 문자열 조작 함수가 풍부하기 때문에 완전히 필요하지 않습니다. 시도해보십시오.

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