2011-05-01 12 views
6

मैं पाइथन में https://www.spoj.pl पर क्रिप्टो समस्या को हल करने का प्रयास कर रहा हूं, जिसमें कंसोल इनपुट शामिल है।पायथन कमांड लाइन - एकाधिक लाइन इनपुट

मेरी समस्या यह है कि इनपुट स्ट्रिंग में कई लाइनें हैं लेकिन प्रोग्राम में एक सिंगल स्ट्रिंग के रूप में इसकी आवश्यकता है। यदि मैं कंसोल में टेक्स्ट को raw_input() और पेस्ट (परीक्षण के लिए) का उपयोग करता हूं, तो पाइथन इस तरह की धमकी देता है जैसे मैंने प्रत्येक पंक्ति के बाद एंटर दबाया -> मुझे लूप में raw_input() कई बार कॉल करने की आवश्यकता है।

समस्या यह है कि मैं किसी भी तरह से इनपुट स्ट्रिंग को संशोधित नहीं कर सकता, इसमें कोई प्रतीक नहीं है जो अंत को चिह्नित करता है और मुझे नहीं पता कि कितनी रेखाएं हैं।

तो मैं क्या करूँ?

उत्तर

6

इनपुट पर स्ट्रीम के अंत तक पहुंचने पर, raw_input खाली स्ट्रिंग लौटाएगा। तो अगर आप वास्तव में पूरे इनपुट (जो आप शायद परहेज Spoj बाधाओं दी जानी चाहिए) जमा करने के लिए की जरूरत है, तो कार्य करें:

buffer = '' 
while True: 
    line = raw_input() 
    if not line: break 

    buffer += line 

# process input 
+1

मैंने कोशिश की, लेकिन दुर्भाग्यवश यह काम नहीं लग रहा है। यदि मैं पाठ चिपकाने के बाद एंटर दबाता हूं, तो प्रोग्राम अभी भी अधिक इनपुट के लिए इंतजार कर रहा है -> मुझे नई और खाली रेखा में एंटर दबाएं। ऐसा लगता है कि एसपीओजे का समान व्यवहार है। – Dreiven

+0

@ ड्रेवेन: व्हाइटस्पेस को दबाएं ('raw_input()। स्ट्रिप()')। –

+0

मैंने कोशिश की, लेकिन ऐसा लगता है कि यह चाल नहीं है। – Dreiven

1

विंडोज पर अंत लाइन के बाद से 'के रूप में \ r \ n' या '\ n' यह ('\ r का उपयोग कर

your_input.replace उन तार को बदलने के लिए सीधे आगे है यूनिक्स प्रणाली पर चिह्नित है \ n ',' ')

+0

मैं इसे इस तरह से प्रतिस्थापित नहीं कर सकता क्योंकि कच्चे_इनपुट() को प्रत्येक पंक्ति के लिए अलग-अलग कहा जाता है। – Dreiven

+0

फिर आपको अपना डेटा बफर या सूची में एकत्र करना होगा .... यह सीधे आगे है .. –

+0

मुझे अपने इनपुट की प्रत्येक पंक्ति के लिए कच्चे_इनपुट() कई बार कॉल करना होगा -> मुझे नहीं पता कि कैसे वहां कई रेखाएं हैं -> मैं PiotrLegnicas समाधान की कोशिश करता हूं -> लूप समाप्त नहीं होगा। सभी इनपुट इकट्ठा करने के बाद ब्रेक को हटाने वास्तव में कोई समस्या नहीं है। – Dreiven

1

raw_input() के बाद से एक पंक्ति को पढ़ने के लिए डिज़ाइन किया गया है, तो आप मुसीबत इस तरह से हो सकता है। एक साधारण समाधान इनपुट स्ट्रिंग को टेक्स्ट फ़ाइल में रखना होगा और वहां से पार्स करना होगा।

मान लिया जाये कि आप input.txt आप के रूप में

f = open(r'input.txt','rU') 
for line in f: 
    print line, 
0

मान ले जा सकते हैं यहाँ सर्वश्रेष्ठ उत्तर का उपयोग करना है, तो आप अभी भी एक EOF त्रुटि है कि संभाला जाना चाहिए होगा। इसलिए, मैंने अभी

buffer = '' 
while True: 
    try: 
     line = raw_input() 
    except EOFError: 
     break 
    if not line: 
     break 

    buffer += line