2017-03-12 1 views
1

나는 단지 사용자가 양자 컴퓨터에 대한 자신의 정의 게이트를 만들 수있는 기능사용자가 다양한 항목을 입력하고 숫자가 적은 배열로 작업하게하려면 어떻게해야합니까?

def customop(qstat): 
    num1 = float(input("Please input a number (no pi, e, etc) for the first number in your matrix (row 1 column 1): ")) 
    num2 = float(input("Number for matrix - row 1 column 2: ")) 
    num3 = float(input("Number for matrix - row 2 column 1: ")) 
    num4 = float(input("Number for matrix - row 2 column 2: ")) 
    matrix = np.array([[num1,num3],[num2,num4]]) 
    matrix2 = matrix.conj().T 
    result = np.dot(matrix, matrix2) 
    identity = np.identity(2) 
    if np.array_equal(result, identity) == True: 
     return np.dot(matrix, qstat) 
    else: 
     print("matrix not unitary, pretending no gate was applied") 
     return qstat 

에게 있습니다. 입력은 큐 비트 (qubit)에 적용되는 numpy 배열로 저장됩니다. 그러나 현재는 수레 만 걸립니다. 분수에서 복소수까지 pi와 같은 상수로 가져갈 수있는 방법은 무엇입니까? 문자열을 가져 와서 "일반"파이썬 코드로 작동시키는 방법이 있습니까? 예를 들어, 사용자가 math.pi/2를 입력하면 계산되지 않는 "math.pi/2"으로 기록되지만 math.pi/2으로 작동 할 수 있습니까? 사용자는 다양한 것들을 입력 할 수 있어야합니다. 따라서 지금은 float()과 같이 변환 할 필요는 없습니다.

도움을 주시면 감사하겠습니다. 감사!

답변

2

eval 기능 (doc)을 살펴보십시오.

당신은 현재 컨텍스트 또는 사용자 정의 컨텍스트에서 코드를 평가할 수있다 : 즉, 사용자가 잠재적으로 수, 구성 파일, 또는 데이터 내부 이러한 식을 수 있도록 :

>>> import math 
>>> eval('math.pi * 2') 
6.283185307179586 

것은이를 사용하면 보안에 심각한 영향을 미칠 수 있습니다주의하십시오 공유는 프로그램의 사용자가 자신의 시스템에서 임의의 코드를 실행할 수있게합니다. 사용 사례 (웹 사이트, 로컬 응용 프로그램, 구성 파일 ...)에 따라 보안 의미가있을 수 있습니다. 다른 경우에는 허용됩니다.

예 : 응용 프로그램에 웹 인터페이스가 있고 사용자가 이러한 표현식을 입력 할 수 있으면 응용 프로그램의 계정에있는 서버에서 임의의 코드를 실행할 수 있습니다.

+0

자세한 답변 해 주셔서 감사합니다. +1, 나는 이것을 받아 들일 것이다. – heather

+0

@headther, 답변을 업데이트했습니다. – jjmontes

관련 문제