2010-01-28 16 views
72

मैं जावा और सी से आने वाले पायथन के लिए नया हूं, मैं एक char कैसे बढ़ा सकता हूं? जावा या सी में, वर्ण और इन्ट्स व्यावहारिक रूप से अदला-बदले होते हैं, और कुछ लूपों में, मेरे लिए वृद्धि वर्ण, और वर्णों द्वारा इंडेक्स सरणी करने में सक्षम होना बहुत उपयोगी होता है।पायथन: मैं एक char कैसे बढ़ा सकता हूं?

मैं पायथन में यह कैसे कर सकता हूं? यह काफी बुरा है कि (;;) लूपर के लिए पारंपरिक नहीं है - क्या कोई तरीका है जो मैं अपनी पूरी रणनीति पर पुनर्विचार किए बिना हासिल करना चाहता हूं?

किसी भी मदद की सराहना की।

+5

क्या मैं पूछ सकता हूं, आपको ऐसा करने की आवश्यकता क्यों होगी? – SilentGhost

+1

परंपरागत 'लूप' के लिए: 'i श्रेणी में (50): do_something_with (i)'। चलो, यह इतना बुरा नहीं है !! – jathanism

+0

@SilentGost: मैं एंड्रॉइड ऐप में उपयोग के लिए एक अंग्रेजी शब्दकोश बांट रहा हूं। चूंकि फ़ाइल अलग-अलग है, इसलिए मैंने उन्हें पायथन स्क्रिप्ट लिखा है ताकि उन्हें word_aa.txt, words_ab.txt, आदि में विभाजित किया जा सके ... मुझे जावा फ़ाइल उत्पन्न करने के लिए एक दूसरी स्क्रिप्ट लिखनी होगी जिसमें आईडी शामिल हैं प्रत्येक शब्द फ़ाइल के कच्चे फ़ाइल संसाधनों (क्योंकि मैं आलसी हूं), और मैं इसे करने का बेहतर तरीका नहीं सोच सका। –

उत्तर

137

पायथन 2.x में, बस ord और chr कार्यों का उपयोग:

>>> ord('c') 
99 
>>> ord('c') + 1 
100 
>>> chr(ord('c') + 1) 
'd' 
>>> 

अजगर 3.x बाइट्स और यूनिकोड के बीच अपनी स्पष्ट अंतर के कारण, इस अधिक संगठित और दिलचस्प बना देता है। डिफ़ॉल्ट रूप से, एक "स्ट्रिंग" यूनिकोड होता है, इसलिए उपर्युक्त कार्य (ord यूनिकोड वर्ण प्राप्त करता है और chr उन्हें उत्पन्न करता है)। "पर्याप्त बुरा नहीं के लिए (;;) looper एक पारंपरिक होने"

>>> bstr = b'abc' 
>>> bstr[0] 
97 
>>> bytes([97, 98, 99]) 
b'abc' 
>>> bytes([bstr[0] + 1, 98, 99]) 
b'bbc' 
+2

बहुत तेज़! धन्यवाद। हालांकि, मुझे 'अच्छे पुराने दिन' याद आते हैं, हालांकि। –

+7

अच्छे पुराने दिन जहां सब कुछ बहुत कठिन था? धिक्कारना! – jathanism

+5

@ टॉम आर। मत करो! [पुराने दिनों की याद आती है]। जैसा कि आप जल्दी से कुछ हासिल करने या कोड के एक टुकड़े को बदलने की कोशिश कर रहे हैं, पाइथन की अवधारणाएं और मुहावरे केवल आपकी प्रगति में बाधा डाल सकती हैं और शायद ही कभी सीखने की अवस्था के लायक हो ... धीरज रखो! आप यह भी पा सकते हैं कि पाइथन में प्रवीणता प्राप्त करने से जावा (और सी, कुछ हद तक) में आपकी शैली में सुधार होगा। – mjv

12

:

लेकिन अगर आप बाइट्स (जैसे कुछ बाइनरी डेटा धारा के प्रसंस्करण के लिए के रूप में) में रुचि रखते हैं, चीजों को और भी आसान कर रहे हैं? ? क्या?

आप

import string 
for c in string.lowercase: 
    ...do something with c... 

करने के लिए कोशिश कर रहे हैं या शायद आप string.uppercase या string.letters उपयोग कर रहे हैं?

पायथन में for(;;) नहीं है क्योंकि ऐसा करने के लिए अक्सर बेहतर तरीके होते हैं। इसमें चरित्र गणित भी नहीं है क्योंकि यह आवश्यक नहीं है, या तो।

+1

+1 (XY समस्या, और इसी तरह)।अगर मैं कर सकता, तो मैं आपको और अधिक देता। –

+0

धन्यवाद। मैं अक्सर पूछता हूं कि "क्यों?" इस तरह के सवालों के लिए। लेकिन @SilentGost ने मुझे इसे हराया। –

0

मैं PHP से आया था, जहां आप ++ ऑपरेटर का उपयोग कर चार (ए से बी, जेड से एए, एए से एबी आदि) बढ़ा सकते हैं। मैंने एक साधारण काम किया जो पाइथन में भी ऐसा ही करता है। आप वर्णों की सूची को भी बदल सकते हैं जो भी (लोअरकेस, अपरकेस इत्यादि) आपकी ज़रूरत है।

# Increment char (a -> b, az -> ba) 
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'): 
    # Unique and sort 
    chlist = ''.join(sorted(set(str(chlist)))) 
    chlen = len(chlist) 
    if not chlen: 
     return '' 
    text = str(text) 
    # Replace all chars but chlist 
    text = re.sub('[^' + chlist + ']', '', text) 
    if not len(text): 
     return chlist[0] 
    # Increment 
    inc = '' 
    over = False 
    for i in range(1, len(text)+1): 
     lchar = text[-i] 
     pos = chlist.find(lchar) + 1 
     if pos < chlen: 
      inc = chlist[pos] + inc 
      over = False 
      break 
     else: 
      inc = chlist[0] + inc 
      over = True 
    if over: 
     inc += chlist[0] 
    result = text[0:-len(inc)] + inc 
    return result 
संबंधित मुद्दे