क्या पायथन कोड में ब्रेसिज़ में इंडेंटेशन को बदलने का एक तरीका है?


82

मैं एक पूरी तरह से अंधा प्रोग्रामर हूं जो अजगर सीखना चाहता हूं। दुर्भाग्य से तथ्य यह है कि कोड ब्लॉक का प्रतिनिधित्व विभिन्न स्तरों के इंडेंटेशन के साथ किया जाता है, एक प्रमुख ठोकर है। मैं सोच रहा था कि क्या कोई उपकरण उपलब्ध थे जो मुझे ब्रेसिज़ या किसी अन्य कोड ब्लॉक सीमांकक का उपयोग करके कोड लिखने की अनुमति देगा और फिर उस प्रारूप को एक उचित रूप से इंडेंटेड प्रतिनिधित्व में बदल देगा जिसे पायथन दुभाषिया उपयोग कर सकता है?


जिज्ञासा से बाहर, आप किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं?
रयान

4
लेकिन, स्पेस और लाइन एक समस्या क्यों बनते हैं। क्या यह संभव नहीं है कि पाठक पाठ को अप्राप्य वर्ण कहे?
ई-सतीस

2
यह आपदा के लिए एक नुस्खा की तरह लगता है - मैं कई लोगों को नहीं जानता जो प्रत्येक पंक्ति से पहले "स्पेस स्पेस स्पेस स्पेस स्पेस स्पेस स्पेस डीफ फ़ू" सुनना पसंद करेंगे।
जावेद छिपकली

@javawizard यह कहते हुए काम कर सकता था "def foo बृहदान्त्र, अगली पंक्ति, खरोज की वृद्धि, ..." या "मांगपत्र स्तर 0, डीईएफ़ foo बृहदान्त्र, अगली पंक्ति इंडेंट स्तर 1, ..."
smoothdeveloper

@smoothdeveloper बिल्कुल, और यही पोस्टर का सवाल पूछ रहा है।
ज्वालामुखी

जवाबों:


57

आपकी समस्या का एक समाधान है जो अजगर के साथ वितरित किया जाता है। pindent.py, यह एक विंडोज़ इंस्टाल में टूल \ स्क्रिप्स डायरेक्टरी में स्थित है (इसका पथ मेरे लिए C: \ Python25 \ Tools \ Scripts) है, ऐसा लगता है कि यदि आप इसे चला रहे हैं तो आपको इसे svn.python.org से हथियाना होगा। लिनक्स या OSX।

यह टिप्पणियाँ जोड़ता है जब ब्लॉक बंद हो जाते हैं, या यदि टिप्पणी में डाल दिया जाता है तो कोड को ठीक से इंडेंट कर सकते हैं। यहां कमांड के साथ पिंडेंट द्वारा कोडित आउटपुट का एक उदाहरण है:

pindent.py -c myfile.py

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

मूल कहां myfile.pyथा:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'

आप pindent.py -rटिप्पणियों के आधार पर सही इंडेंटेशन सम्मिलित करने के लिए भी उपयोग कर सकते हैं (विवरण के लिए pindent.py का हेडर पढ़ें), इससे आपको इंडेंटेशन की चिंता किए बिना अजगर में कोड करने की अनुमति मिल सकती है।

उदाहरण के लिए, रनिंग pindent.py -r myfile.pyनिम्न कोड myfile.pyको समान रूप से इंडेंट (और टिप्पणी भी) कोड में परिवर्तित कर देगा जैसा कि pindent.py -cऊपर दिए गए उदाहरण द्वारा निर्मित है :

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar

मुझे यह जानने में दिलचस्पी होगी कि आप किस समाधान का उपयोग कर रहे हैं, अगर आपको किसी और सहायता की आवश्यकता है, तो कृपया इस पोस्ट पर टिप्पणी करें और मैं मदद करने की कोशिश करूंगा।


डाउनवोट: यह रीडिंग कोड के साथ मदद कर सकता है , लेकिन यह इसे लिखने में मदद नहीं करता है। पायथन, और इसके जैसी भाषाएं जो घोंसले का प्रतिनिधित्व करने के लिए केवल घोंसले का प्रतिनिधित्व करने के लिए रिक्ति पर निर्भर करती हैं, जब यह अंधे के लिए सुलभता की बात आती है। एक उपकरण जो pindentफ्लश-लेफ्ट कोड (कई ब्लाइंड प्रोग्रामर्स की पसंदीदा इंडेंटेशन स्कीम) का उलटा प्रदर्शन करता है, उपयोगी हो सकता है। अधिक उपयोगी होगा from __future__ import braces- लेकिन ईस्टर अंडे के रूप में नहीं।
डेविड हैमेन 23

1
@DavidHammen: वहाँ है एक उपकरण है कि प्रदर्शन पर ध्यान उलटा pindent.py -c; यह है pindent.py -r। रयान ने पहले ही उल्लेख किया कि उनके उत्तर में, लेकिन मैंने इसे केवल एक स्पष्ट उदाहरण जोड़ने के लिए और इसे याद करने के लिए कठिन बना दिया। (इसके अलावा, मैंने ऐसा करने के लिए कमांड-लाइन विकल्प को सही किया: यह -r, वह नहीं -dजो केवल टिप्पणियों को हटाता है।)
इल्मरी करोनन

11

मुझे व्यक्तिगत रूप से संदेह है कि वर्तमान में एक समय है, क्योंकि पायथन के बहुत से लोग इस तथ्य से प्यार करते हैं कि पायथन इस तरह से है, व्हॉट्सएप को सीमांकित किया गया है।

मैं वास्तव में इस बारे में कभी नहीं सोचा था कि एक पहुंच के मुद्दे के रूप में। शायद यह अजगर के लिए एक बग रिपोर्ट के रूप में आगे रखना कुछ है?

मुझे लगता है कि आप आउटपुट के लिए यहाँ एक स्क्रीन रीडर का उपयोग करेंगे? तो टैब आपको "अदृश्य" लगेगा? ब्रेल आउटपुट के साथ, इसे पढ़ना आसान हो सकता है, लेकिन मैं ठीक से समझ सकता हूं कि यह कितना भ्रामक हो सकता है।

वास्तव में, यह मेरे लिए बहुत दिलचस्प है। मेरी इच्छा है कि मुझे पता था कि एक ऐसा ऐप लिखने में सक्षम हूं जो आपके लिए ऐसा करेगा।

मुझे लगता है कि यह निश्चित रूप से कुछ है जो मैं बग रिपोर्ट के लिए रखूंगा, जब तक कि आप पहले से ही ऐसा नहीं करते, या चाहते हैं।

संपादित करें: इसके अलावा, जॉन मिलिकिन द्वारा उल्लेख किया गया है , वहाँ भी PyBraces है जो आपके लिए एक व्यवहार्य समाधान हो सकता है, और आपके कोडिंग कौशल पर निर्भर होने के साथ-साथ हैक किया जाना संभव हो सकता है, जिसकी आपको आवश्यकता है (और मुझे उम्मीद है कि यदि ऐसा है तो , आप इसे अपने जैसे अन्य लोगों के लिए उपयोग करने के लिए जारी करते हैं)

संपादन 2: मैंने अभी-अभी अजगर बग ट्रैकर को इसकी सूचना दी है


9

हालांकि मैं अंधा नहीं हूं, मैंने Emacspeak के बारे में अच्छी बातें सुनी हैं । 1998 में उनकी 8.0 रिलीज के बाद से उनके पास पायथन मोड है (वे 28.0 रिलीज करने के लिए प्रतीत होते हैं!)। निश्चित रूप से जाँच के लायक है।


6

आपको अपने संपादक को टैब और रिक्त स्थान बोलने के लिए कॉन्फ़िगर करने में सक्षम होना चाहिए - मुझे पता है कि अधिकांश संपादकों में व्हाट्सएप प्रदर्शित करना संभव है , इसलिए उन्हें बोलने के लिए कहीं न कहीं एक एक्सेसिबिलिटी विकल्प होना चाहिए।

असफल होने पर, वहाँ pybraces है , जो एक व्यावहारिक मजाक के रूप में लिखा गया था, लेकिन वास्तव में थोड़ा काम के साथ आपके लिए उपयोगी हो सकता है।


2
हालाँकि, आपको इस तथ्य के बारे में सोचना है कि एक निश्चित बिंदु पर, जहाँ आप टैब पर निर्भर कोड ब्लॉक में हैं, वहां याद रखना कठिन होने वाला है। ब्रेसिज़ एक विशिष्ट शुरुआत और अंत मार्कर को चिह्नित करते हैं, जबकि टैब के साथ, यह भ्रमित हो सकता है (मैं इसके साथ भ्रमित हो जाता हूं और मुझे देखा जाता है!)
मेजर

6

यदि आप विंडोज पर हैं, तो मैं आपको एडशर्प पर एक नज़र डालने की जोरदार सलाह देता हूं: http://empowermentzone.com/EdSharp.htm यह सभी प्रमुख विंडोज स्क्रीन्रेडर्स का समर्थन करता है, इसे कोड के इंडेंटेशन स्तरों को बोलने के लिए कॉन्फ़िगर किया जा सकता है या इसमें एक अंतर्निहित उपयोगिता है जिसे PyBrace कहा जाता है जो ब्रेस सिंटैक्स से परिवर्तित कर सकता है यदि आप ऐसा करना चाहते हैं, और यह सभी प्रकार की अन्य सुविधाओं का समर्थन करता है जो प्रोग्रामर हमारे पाठ संपादकों में उम्मीद करते हैं। मैं इसे सालों से PHP से जावास्क्रिप्ट तक HTML से Python तक, और मुझे बहुत पसंद है।


मैं इसे पिछले वर्ष के लिए अपने मुख्य संपादक के रूप में उपयोग कर रहा हूं।
जेरेड

4

मैं आपकी समस्या की सराहना करता हूं, लेकिन लगता है कि आप समस्या को हल करने के बजाय कार्यान्वयन को निर्दिष्ट कर रहे हैं। ब्रेसिज़ में परिवर्तित करने के बजाय, आपके स्क्रीन रीडर के लिए रास्ते पर काम करने के बारे में आपको इंडेंटेशन स्तर बताने के लिए कैसे?

उदाहरण के लिए, कुछ लोगों ने अजगर इंडेंटेशन स्तरों का प्रतिनिधित्व करने के लिए विम सिंटैक्स रंग पर काम किया है। शायद एक संशोधित वाक्यविन्यास रंग आपके स्क्रीन रीडर को पढ़ने के लिए कुछ पैदा कर सकता है?


"स्तर 4 इंडेंटेशन" फू नई बार "लेवल 3 इंडेंटेशन" के बराबर है, यह भ्रामक है, और आपके दिमाग में उस पर नज़र रखने के लिए एक अतिरिक्त बोझ है।
मेजर

1
"लेवल एन इंडेंटेशन" नहीं, "इन बनाम" आउट ", या" इंडेंट "बनाम" डिडेंट "पर्याप्त होना चाहिए। def फू (x): इंडेंट रिटर्न x * 2 समर्पण
kaleissin

4

इन सभी "नहीं आप नहीं कर सकते" प्रकार के उत्तर वास्तव में कष्टप्रद हैं। निःसंदेह तुमसे हो सकता है।

यह एक हैक है, लेकिन आप इसे कर सकते हैं।

http://timhatch.com/projects/pybraces/

दुभाषिया को बंद करने से पहले ब्रेसिज़ को इंडेंट ब्लॉकों में बदलने के लिए एक कस्टम एन्कोडिंग का उपयोग करता है।


एक तरफ के रूप में, और किसी नए अजगर के रूप में - मैं ब्रेसिज़ / जेनेरिक ब्लॉक सीमांकक की अनुमति नहीं देने के पीछे तर्क को भी स्वीकार नहीं करता ... इसके अलावा अजगर देवों की पसंद है। यदि आप अपने कोड के कुछ स्वचालित प्रसंस्करण कर रहे हैं या संपादक में काम कर रहे हैं तो यह समझ में नहीं आता है कि सफेद स्थान महत्वपूर्ण है। यदि आप स्वचालित रूप से कोड जनरेट कर रहे हैं, तो इंडेंट स्तरों पर नज़र रखना आसान नहीं है। यदि आप पायल-एस्क वन-लाइनर करने के लिए अजगर का उपयोग करना चाहते हैं, तो आप स्वचालित रूप से अपंग हो जाते हैं। अगर और कुछ नहीं, बस एक सुरक्षा के रूप में। क्या होगा यदि आपके 1000 लाइन के पायथन प्रोग्राम को उसके सभी टैब खा जाएँ? आप लाइन-दर-लाइन जा रहे हैं और यह पता लगा रहे हैं कि इंडेंटिंग कहाँ होना चाहिए?

इसके बारे में पूछने पर हमेशा के लिए tongue भविष्य के __ आयात __ आयात ब्रेसिज़ "," अपनी IDE को सही ढंग से कॉन्फ़िगर करें "," जैसे भी हो, बेहतर है कि इसे करने की आदत हो "जैसे एक जीभ-इन-गाल प्रतिक्रिया प्राप्त होगी।

मैं उनकी बात देखता हूं, लेकिन हे, अगर मैं चाहता तो मैं हर एक लाइन के बाद एक अर्धविराम लगा सकता था। तो मुझे समझ में नहीं आता है कि क्यों हर कोई ब्रेसिज़ बात के बारे में इतना अडिग है। यदि आपको अपनी भाषा की आवश्यकता है कि आप ठीक से इंडेंट करने के लिए मजबूर कर रहे हैं, तो आप इसे पहले स्थान पर नहीं कर रहे हैं।

बस मेरा 2 सी - मैं वैसे भी ब्रेसिज़ का उपयोग करने जा रहा हूं।


आपको एक अजगर खोल खोलने और दर्ज करने की आवश्यकता है: इसे आयात करें
ThatAintWorking

1
वास्तव में, मेरी राय अनुभव के माध्यम से बह गई है। मैं अपनी एक परियोजना की जरूरतों के लिए अजगर को मजबूर करने का एक तरीका खोजने की कोशिश कर रहा था और यह पता लगाने के लिए निराश था कि इसने अनुनय के किसी भी तरीके से ऐसा करने से इनकार कर दिया। मैं इसे एक अलग कोण से आया हूं और अजगर को काम करने के लिए एक सुंदर और उच्च सहकारी मंच मिला है। मैंने जो मुख्य सबक सीखा है वह यह है कि सस्ते हैक और कंप्यूटर अच्छी तरह से मिश्रण नहीं करते हैं। मुझे पार्सिंग एल्गोरिदम का कुछ गहराई से अध्ययन करना है, लेकिन मैंने जो ज्ञान प्राप्त किया है वह इसके लायक है। मैं अभी भी इंडेंट / डिडेंट की परवाह नहीं करता, लेकिन मैं उनका सम्मान करता हूं।
la11111

4

एक सुलभ पायथन आईडीई की खोज करते हुए, यह पाया गया और जवाब देने का फैसला किया। JAWS के साथ विंडोज के तहत:

  1. अपने पसंदीदा टेक्स्ट एडिटर में JawsKey+ 6(अक्षरों के ऊपर की संख्या पर) दबाकर सेटिंग सेंटर पर जाएं । यदि JAWS नई कॉन्फ़िगरेशन फ़ाइल बनाने का संकेत देता है, तो सहमत हों।
  2. खोज फ़ील्ड में, "इंडेंट" टाइप करें
  3. केवल एक परिणाम होगा: "इंडेंट पात्रों को कहें"। इसे चालू करें।
  4. का आनंद लें!

केवल एक चीज जो हमारे लिए निराशाजनक है, वह यह है कि हम वेबसाइटों पर कोड उदाहरणों का आनंद नहीं ले सकते हैं (क्योंकि ब्राउज़रों में बोलना बहुत आरामदायक नहीं है - यह शानदार भाषण उत्पन्न करता है)।

एक और पायथन शुरुआत से खुश कोडिंग)।


3

मैं pydev एक्सटेंशन के साथ ग्रहण का उपयोग करता हूं क्योंकि यह एक IDE है जिसमें मुझे बहुत अनुभव है। मैं स्मार्ट इंडेंटेशन की सराहना करता हूं, यदि वह स्टेटमेंट, लूप, आदि के लिए कोडिंग की पेशकश करता है। मैंने पिंडेंटहोम स्क्रिप्ट को एक बाहरी उपकरण के रूप में कॉन्फ़िगर किया है जिसे मैं वर्तमान में केंद्रित अजगर मॉड्यूल पर चला सकता हूं जिससे मेरा जीवन आसान हो जाता है, इसलिए मैं देख सकता हूं कि मैं क्या देख सकता हूं बंद कर दिया, जहां लगातार इंडेंटेशन की जांच करने के लिए बाहर के साथ।


1

यह कैसे करना है, यह बताने वाले विभिन्न उत्तर हैं। लेकिन मैं इस मार्ग को नहीं अपनाने की सलाह दूंगा। जब आप रूपांतरण करने के लिए स्क्रिप्ट का उपयोग कर सकते हैं, तो टीम प्रोजेक्ट पर काम करना मुश्किल हो जाएगा।

टैब की घोषणा करने के लिए मेरी सिफारिश आपके स्क्रीन रीडर को कॉन्फ़िगर करने की होगी। यह उतना कष्टप्रद नहीं है जितना यह लगता है, क्योंकि यह केवल "टैब टैब टैब टैब" के बजाय "इंडेंट 5" कहेगा। इसके अलावा, इंडेंटेशन केवल तब ही पढ़ा जाएगा जब यह बदल गया है, इसलिए आप इंडेंटेशन स्तर को सुने बिना कोड के एक पूरे ब्लॉक से गुजर सकते हैं। इस तरह ब्रेंट सुनने से ज्यादा इंडेंटेशन सुनने की क्रिया नहीं है।

जैसा कि मुझे नहीं पता कि आप किस ऑपरेटिंग सिस्टम या स्क्रीन रीडर का उपयोग करते हैं, मैं दुर्भाग्य से इसे प्राप्त करने के लिए सटीक कदम नहीं दे सकता।


0

इद्जर डिक्स्ट्रा ने अगर ~ फाई और डू ~ ओड को अपनी "गार्डेड कमांड लैंग्वेज" में इस्तेमाल किया, तो ये अल्गोल 68 से निकलती हैं । RosettaCode.org में इस्तेमाल किए गए कुछ उदाहरण पायथन गार्डेड ब्लॉक भी थे ।

fi = od = yrt = end = lambda object: None;
class MyClass(object):
    def myfunction(self, arg1, arg2):
        for i in range(arg1) :# do
            if i > 5 :# then
                print i
            fi
        od # or end(i) #
    end(myfunction)
end(MyClass)

व्हॉट्सएप मैंगल्ड पाइथन कोड को असंबद्ध रूप से अनमैंगल्ड और रीइंडेंट किया जा सकता है यदि कोई गार्ड ब्लॉक का उपयोग करता है यदि / फाई, डू / ओडी और कोशिश / यर्ट अर्धविराम के साथ एक साथ ";" अलग बयानों के लिए। अस्पष्ट पत्रिका लिस्टिंग या वेब पेज से कट / पेस्ट करने के लिए बहुत बढ़िया।

गार्ड ब्लॉक और अर्धविराम सम्मिलित करने / निकालने के लिए एक छोटे अजगर कार्यक्रम को लिखना काफी आसान होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.