অর্গ মোড ব্যাবেল - পাইথনে ইন্টারেক্টিভ কোড ব্লক মূল্যায়ন


12

একইভাবে এই প্রশ্নের সাথে আমি "ইনপুট" নির্দেশাবলী সম্বলিত পাইথন সোর্স কোড ব্লকগুলি মূল্যায়ন করতে চাই তবে মূল্যায়নের সময় আমি ইন্টারেক্টিভ মূল্যায়নের (ব্যবহারকারীর ইনপুট সহ) কোনও উপায় খুঁজে পাই না বা এটি পরিচিত কিছু ইনপুট দেই to অগ্রিম (উদাহরণস্বরূপ একটি ফাইলে সঞ্চিত)।

আমার সীমাবদ্ধতা হ'ল সুস্পষ্টভাবে inputনির্দেশনাটি ব্যবহার করা যেহেতু এই সমস্ত কিছু শিক্ষার্থীদের পাঠ্যপুস্তকে অন্তর্ভুক্ত করা উচিত।

কোডের উদাহরণ:

#+BEGIN_SRC python :results output 
a= input("Value") 
print(a)
#+END_SRC

এ জাতীয় ইন্টারেক্টিভ মূল্যায়ন করা বা এটি অনুকরণ করা (উত্স কোডটি একটি নকল ইনপুট দিয়ে) কি সম্ভব?


আপনি কি exportশিক্ষার্থীদের জন্য উদাহরণ কোডটি অন্য কোনও ফর্ম্যাটে তৈরি করতে org- মোড ব্যবহার করবেন , যেমন এইচটিএমএল?
মেলিওরাটাস

পাইথনের ইনপুট () ফাংশনটি কেবল একক লাইনে উদ্ধৃত পাঠ্য গ্রহণ করে, যেমন "হ্যালো" বা "হাই \ নেহেলো h nhowdy", সঠিক?
মেলিওরাটাস

@ মেলিওরাটাস আপনার মন্তব্যের জন্য ধন্যবাদ; হ্যাঁ আমি org- মোড এক্সপোর্ট ব্যবহার করি (ল্যাটেক্স / পিডিএফ থেকে) এবং আমি কোড এবং ফলাফল উভয়ই রফতানি করি। আপনি ইনপুট ফাংশনটির জন্য পরামিতি হিসাবে মাল্টিলাইন ("" "..." "") পাঠ্যও ব্যবহার করতে পারেন। আমার সমস্যাটি কোডটি কার্যকর করার সময় "ইনপুট" ফাংশনে মানগুলি প্রবর্তন করা।
Lgen

স্পষ্টতার জন্য ধন্যবাদ! আমি এমন একটি উত্তর পোস্ট করব যা শিক্ষিত প্রোগ্রামিং বৈশিষ্ট্যগুলি ব্যবহার করে, অর্থাত্ noweb, org- মোডের যা আপনাকে পরীক্ষার এবং ফলাফল সহ আপনার কোড রফতানি করার অনুমতি দেবে।
মেলিওরাটাস

ধন্যবাদ, এটি জন কিচিন প্রস্তাবিত সমাধানের বিকল্প হতে পারে (জট কাটানো পদক্ষেপ এড়ানো হতে পারে?)।
Lgen

উত্তর:


8

এখানে একটি বিকল্প পদ্ধতি যা ইনপুট ফাংশনটি প্রতিস্থাপনের জন্য একটি অ-রফতানি, জটযুক্ত ফাইল ব্যবহার করে।

#+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কমান্ড তৈরি করতে অর্থাত জট , 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ব্লক বর্তমান ব্লক builtin ব্যবহার মধ্যে আমদানি করা হবে প্রস্তাবনা: হেডার এবং মান from example1 import *


খুব আকর্ষণীয় সমাধান, ধন্যবাদ। আমি এটিকে সমাধান হিসাবে গ্রহণ করি এবং পাইথন জেনারেটরের উপর ভিত্তি করে বৈকল্পিকের প্রস্তাব করব এবং পদ্ধতিগতভাবে ইনপুট (...) ফাংশন অনুকরণ করার জন্য একটি "স্ট্র" অবজেক্টটি ফিরিয়ে দেব।
Lgen

8

Org- pythonমোডে সাক্ষর প্রোগ্রামিং ব্যবহার করে কোড ব্লকগুলি মূল্যায়ন করুন।

:varভেরিয়েবলগুলি বরাদ্দ করতে এবং আপনার কোডটি পরীক্ষা করতে শিরোনাম ব্যবহার করুন ।

দ্রষ্টব্য: পছন্দসই ব্যবহার elisp (read-string "Prompt: ")এবং (read-number "Prompt: ")ইম্যাকের ভিতরে ব্যবহারকারী ইনপুট জন্য অনুরোধ জানাতে।


উদাহরণ 1 - মুদ্রণ (ক)

  • বরাদ্দ করুন 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
    

আপনি যখন নিজের org ফাইলটি রফতানি করবেন তখন আউটপুটটি নীচের উদাহরণের মতো দেখাবে


উদাহরণ 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
    


এই কোডটি
জিএনইউ ইম্যাক্স 24.5.1 (x86_64-অজানা-সাইগউইন, জিটিকে + সংস্করণ 3.14.13)
অর্গ-মোড সংস্করণ: 8.3.2
এবং গিথুব দিয়ে পরীক্ষা করা হয়েছিল ।


খুব আকর্ষণীয় সমাধান; আমার বুঝতে বুঝতে সময় লাগল (আমি প্রোগ্রামিংকে শিক্ষিত করতে অভ্যস্ত নই) দ্বিতীয় পাইথন সোর্স ব্লকের নির্দেশিকা (যেমন a = ইনপুট ('একটি এর মান')) কেবলমাত্র ডকুমেন্টেশন টেক্সট ছিল এবং নির্দেশ হিসাবে বিবেচিত হয়নি।
Lgen

@ লেজেন - ধন্যবাদ! শিক্ষাগত প্রোগ্রামিং, noweborg- মোড বৈশিষ্ট্যগুলি আশ্চর্যজনক এবং অবিশ্বাস্যভাবে দরকারী! আপনি অতিরিক্ত কোড উদাহরণ চান কিনা দয়া করে আমাকে জানান। আপনার যদি এমন কিছুর প্রয়োজন হয় যা প্রশ্নোত্তর দের ফর্ম্যাটে ভালভাবে খাপ না খায় তবে আমি আমার গিটহাবের সংগ্রহশালায় পোস্ট করে খুশি।
মেলিওরাটাস

6

Org-babel এর মাধ্যমে সত্যিকারের ইন্টারেক্টিভ পাইথন ইনপুট পাওয়া সম্ভব বলে আমি মনে করি না।

আপনি ইনপুট ফাংশনটিকে নতুন করে সংজ্ঞায়িত করতে একটি উপস্থাপক ব্যবহার করতে পারেন যাতে আপনি ইনপুটটির ব্যবহার কীভাবে অনুকরণ করতে চান তা ফিরিয়ে দেয়, উদাহরণস্বরূপ আমরা এখানে এটি "3" এ টাইপ করা ব্যবহারকারীর মতো দেখায়।

#+BEGIN_SRC python :results output :preamble def input(x): return 3
a = input("value ")
print(a)
#+END_SRC

#+RESULTS:
: 3

শিক্ষার্থীরা কী রফতানি হয় তা নির্ভর করে তারা দেখতে পাবে না যে আপনি এটি করেছেন।


ধন্যবাদ জন আপনাকে উত্তর প্রস্তাব করেছে। আমি ভাবছিলাম যে কোড ব্লকের ইনপুট ফাংশনটিতে (যেমন a = ইনপুট ("একটি" এর মান)) বি = ইনপুট ("বি এর মান")) একাধিক কল পর্যন্ত এটি বাড়ানো সম্ভব কিনা? পাঠ্যপুস্তকটি তৈরি করতে আমি সাধারণত "# + BEGIN_SRC পাইথন" বিবৃতিতে "" উভয়ই রফতানি করি যাতে এক্সপোর্ট করা পাঠ্যে এই লাইনটি দৃশ্যমান না হয়।
Lgegen

আপনি যদি একটি অধিবেশন ব্যবহার করেন তবে এটি সম্ভব: # + BEGIN_SRC অজগর: সেশন: কোনও ডিফ ইনপুট (এক্স) রফতানি করে না: যদি x == 'একটি এর মান': 3 এলিফ x == 'বি এর মান' প্রত্যাবর্তন 4 # + END_SRC # + ফলাফল: # + BEGIN_SRC অজগর: ফলাফল আউটপুট: সেশন এ = ইনপুট ('একটি এর মান') বি = ইনপুট ('খ এর মান') মুদ্রণ (এ + বি) # + END_SRC # + ফলাফল::: >>> >>> 7
জন কিচিন

2

জন কিচিনের সমাধানের পরিপূরক হিসাবে আমি একটি জেনারেটর ব্যবহার করার ধারাবাহিক মান প্রদানের প্রস্তাব করি যা 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 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.