मेरे पास दो टेक्स्ट फ़ाइलें हैं और सामग्री इस प्रकार है (file1.txt और file2.txt क्रमशः);

MKKVEAIIRPFKLDEVKIALVNAGIVGMTVSEVRGFGRQKGQTERYRGSEYTVEFLQKLKVEIVVEDNQVDMVVDKIIAAARTGEIGDGKIFISPVEQVIRIRTGEKNTEAV

तथा

AQTVPYGIPLIKADKVQAQGYKGANVKVGIIDTGIAASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDNTTGVLGVAPNVSLYAIKVLNSSGSGTYSAIVSGIEWATQNGLDVINMSLGGPSGSTALKQAVDKAYASGIVVVAAAGNSGSSGSQNTIGYPAKYDSVIAVGAVDSNKNRASFSSVGAELEVMAPGVSVYSTYPSNTYTSLNGTSMASPHVAGAAALILSKYPTLSASQVRNRLSSTATNLGDSFYYGKGLINVEAAAQ

मुझे इस स्ट्रिंग की अनुक्रमणिका के आधार पर चरित्र लाने की ज़रूरत है जिसे मैं जानता हूं। अब, मुझे सूचकांक के मूल्य से पहले 20 वर्ण और सूचकांक के मूल्य के बाद 20 वर्णों को लाने की आवश्यकता है जो कुल 41 वर्ण (सूचकांक के चरित्र सहित) बनाता है। यहाँ मेरा कोड है

with open('file1.txt', 'r') as myfile:
    x = 50
    data=myfile.read()
    str1 = data[x:x+1+20]
    temp = data[x-20:x]
    print temp+str1

file1.txt एक का आउटपुट SEVRGFGRQKGQTERYRGSEYTVEFLQKLKVEIVVEDNQVD है जो सही है।

समस्या यह है कि यदि मैं file2.txt पर समान कोड चलाता हूं और अनुक्रमणिका (x का मान) को 56 में बदलता हूं, तो मुझे जो आउटपुट मिलना चाहिए वह AASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDN है। इसके बजाय मुझे ASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDNT मिल रहा है ऐसा क्यों है?

0
Ghauri 24 अगस्त 2016, 21:42

3 जवाब

सबसे बढ़िया उत्तर

ठीक है, यदि आप जांचते हैं, तो फ़ाइल 1 (पहली पंक्ति) में इंडेक्स 50 Y है, बाएं से 20 तत्व SEV... से शुरू होते हैं, जिसका अर्थ है इंडेक्स 30 से शुरू करना। यह फ़ाइल 1 के लिए आपका परिणाम है, जिसे आप कहते हैं सही है।

M   K   K   V   E   A   I   I   R   P   F   K   L   D   E   V   K   I   A   L   V   N   A   G   I   V   G   M   T   V   S   E   V   R   G   F   G   R   Q   K   G   Q   T   E   R   Y   R   G   S   E   Y   T   V   E   F   L   Q   K   L   K   V   E   I   V   V   E   D   N   Q   V   D   M   V   V   D   K   I   I   A   A   
A   Q   T   V   P   Y   G   I   P   L   I   K   A   D   K   V   Q   A   Q   G   Y   K   G   A   N   V   K   V   G   I   I   D   T   G   I   A   A   S   H   T   D   L   K   V   V   G   G   A   S   F   V   S   G   E   S   Y   N   T   D   G   N   G   H   G   T   H   V   A   G   T   V   A   A   L   D   N   T   T   G   V   
0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79

अब, file2 (दूसरी पंक्ति) के लिए, आप अनुक्रमणिका को 56 पर सेट करते हैं, जो फ़ाइल 2 में N है, और बाईं ओर से 20 तत्व ASH... से शुरू होते हैं, जो अनुक्रमणिका 36 से शुरू होता है। यह है अपेक्षित परिणाम, मुझे समझ नहीं आ रहा है कि आप इसे गलत क्यों कह रहे हैं।

तीसरी पंक्ति सूचकांक संख्या का प्रतिनिधित्व करती है

नीचे दी गई छवि भी देखें: यहां छवि विवरण दर्ज करें

0
Wajahat 25 अगस्त 2016, 00:15
with open('file1.txt', 'r') as myfile:
    x = 50
    data=myfile.read()
    print data[x-20:x+21]

यह स्थिति x-20 से स्थिति x+21 तक एक टुकड़ा लेता है। यह आपको 41 वर्णों का एक टुकड़ा देगा।

डेटा2, 56 रिटर्न: ASHTDLKVVGGASFVSGESYNTDGNGHGTHVAGTVAALDNT - आपका कोड सही है।

0
Daniel Lee 24 अगस्त 2016, 21:58
temp = data[x-20:x]

तुम्हें देंगे

temp = data[36:56]

यानी आपकी स्ट्रिंग के वर्ण 36 से 55 (शामिल)

स्ट्रिंग वर्ण 0 से शुरू होती है, इसलिए डेटा [36] वास्तव में आपका दूसरा A है, यानी आपकी स्ट्रिंग का 37वां वर्ण

यहां कोई बग नहीं है, सिर्फ एक काउंटर मुद्दा है

आप शायद वास्तव में x = 55 सेट करना चाहते हैं (यानी मध्य वर्ण आपकी स्ट्रिंग का 56 वां है, क्योंकि इसमें 55 की अनुक्रमणिका है, क्योंकि अजगर में अनुक्रमण शून्य से शुरू होता है)

0
WNG 24 अगस्त 2016, 23:12