이 질문 과 마찬가지로 “org”모드에서 “입력”명령어를 포함하는 Python 소스 코드 블록을 평가하고 싶지만 평가하는 동안 대화 형 평가 (사용자 입력 포함)를 수행하거나 알려진 입력을 제공하는 방법을 찾을 수 없습니다 사전에 (예를 들어 파일에 저장).
이 제한 사항은 input
학생들을위한 교과서에 포함되어야하기 때문에 수업을 명시 적으로 사용해야합니다.
코드 예 :
#+BEGIN_SRC python :results output
a= input("Value")
print(a)
#+END_SRC
그러한 대화식 평가를하거나 시뮬레이션 할 수 있습니까 (소스 코드에 가짜 입력을함으로써)?
답변
다음은 내 보내지 않고 얽힌 파일을 사용하여 입력 기능을 대체하는 대체 방법입니다.
#+BEGIN_SRC python :session :exports none :tangle example1.py
def input(x):
if x == 'Value of a':
return 3
elif x == 'Value of b':
return 4
#+END_SRC
#+RESULTS:
팁 : 명령을 누르 C-cC-vt거나 사용 하여 파일 M-xorg-babel-tangle을 작성하십시오 (예 : tangle )
example1.py
.
#+BEGIN_SRC python :results output :preamble from example1 import *
a = input('Value of a')
b = input('Value of b')
print(a + b)
#+END_SRC
#+RESULTS:
: 7
주 :
example1.py
이전 파이썬에서 작성된 파일SRC
블록은 내장을 이용하여 현재 블록에 가져올 프리앰블 : 헤더 값from example1 import *
.
답변
python
org-mode에서 리터럴 프로그래밍을 사용하여 코드 블록을 평가 하십시오.
:var
헤더를 사용 하여 변수를 할당하고 코드를 테스트하십시오.
참고 : 원하는 경우 및를 사용
elisp
(read-string "Prompt: ")
하여(read-number "Prompt: ")
emacs 내부에 사용자 입력을 요구하십시오 .
예 1- 인쇄 (a)
-
할당
hello world
에a
.
#+name: ex1-code #+header: :var a="hello world" #+begin_src python :results verbatim replace output :exports results print(a) #+end_src #+begin_src python :eval never :exports code :noweb yes a = input('Value of a') <<ex1-code>> #+end_src #+results: ex1-code : hello world
실시 예 2- print(a + b)
-
할당
1
에a
. -
할당
2
에b
.
#+name: ex2-code #+header: :var a=1 #+header: :var b=2 #+begin_src python :results replace output :exports results print(a + b) #+end_src #+begin_src python :eval never :exports code :noweb yes a = input('Value of a') b = input('Value of b') <<ex2-code>> #+end_src #+results: ex2-code : 3
실시 예 3- print(a,b,c)
Value of a
입력 하라는 메시지가 표시되면Thanks
Value of b
입력 하라는 프롬프트가 표시되면를 입력하십시오4
.-
Value of c
입력 하라는 프롬프트가 표시되면를 입력하십시오your question
.
#+NAME: ex3-code #+header: :var a=(read-string "Value of a ") #+header: :var b=(read-number "Value of b ") #+header: :var c=(read-string "Value of c ") #+begin_src python :results replace output :exports results print a,b,c #+end_src #+begin_src python :eval never :exports code :noweb yes a = input('Value of a') b = input('Value of b') c = input('Value of c') <<ex3-code>> #+end_src #+results: ex3-code : Thanks 4 your question
조직 파일을 내보낼 때 출력은 아래 예와 유사해야합니다.
실시 예 1- print(a)
-
할당
hello world
에a
.a = input('Value of a') print(a) hello world
실시 예 2- print(a + b)
- 할당
1
에a
. -
할당
2
에b
.a = input('Value of a') b = input('Value of b') print(a + b) 3
실시 예 3- print(a,b,c)
Value of a
입력 하라는 메시지가 표시되면Thanks
Value of b
입력 하라는 프롬프트가 표시되면를 입력하십시오4
.-
Value of c
입력 하라는 프롬프트가 표시되면를 입력하십시오your question
.a = input('Value of a') b = input('Value of b') c = input('Value of c') print a,b,c Thanks 4 your question
이 코드는
GNU Emacs 24.5.1 (x86_64-unknown-cygwin, GTK + 버전 3.14.13)
Org-Mode 버전 : 8.3.2
및 github 에서 테스트되었습니다 .
답변
org-babel을 사용하여 대화 형 Python 입력을 얻는 것이 가능하지 않다고 생각합니다.
프리앰블을 사용하여 입력 함수를 재정 의하여 입력 사용을 시뮬레이션하려는 것을 반환 할 수 있습니다. 예를 들어 여기서는 “3”으로 입력 한 사용자처럼 보이게합니다.
#+BEGIN_SRC python :results output :preamble def input(x): return 3
a = input("value ")
print(a)
#+END_SRC
#+RESULTS:
: 3
학생들이 내 보낸 내용에 따라, 내 보낸 내용을 보지 못할 수도 있습니다.
답변
John Kitchin의 솔루션을 보완하기 위해 input(...)
함수를 “공급”하고 str
개체를 체계적으로 반환하는 연속적인 값을 제공하기 위해 생성기를 사용할 것을 제안합니다 .
#+BEGIN_SRC python :session :exports none :tangle example2.py :results none
def generate(lst):
for element in lst:
yield str(element)
generator = generate(["Thanks",4,"your help"])
def input(x):
return generator.__next__()
#+END_SRC
#+BEGIN_SRC python :results output :preamble from example2 import * :exports both
a = input('Value of a')
b = input('Value of b')
c = input('Value of c')
print(a,b,c)
#+END_SRC