2012-03-16 10 views
14

जोड़कर चार उत्पन्न करने के लिए कैसे मैं सी भाषा में 'बी' प्राप्त करने के लिए 'ए' + 1 का उपयोग कर सकता हूं, तो पायथन में ऐसा करने का क्या तरीका है?
मुझे यह पसंद है लिख सकते हैं:पायथन: int

chr(ord('a')+1) 

लेकिन मैं नहीं जानता कि क्या यह सबसे अच्छा तरीका है।

+4

यह काम करेंगे आप 'सर्वश्रेष्ठ' से क्या मतलब है कि तार को चेतावनी दी जा – zmbq

+1

पायथन में एक एन्कोडिंग के साथ संग्रहीत किया जाता है। पायथन 2.x में, डिफ़ॉल्ट एन्कोडिंग ASCII है जिसमें एक पूर्णांक जोड़ना कोई समस्या नहीं होनी चाहिए। पायथन 3.x में, डिफ़ॉल्ट रूप से स्ट्रिंग्स UTF8 यूनिकोड हैं। आपको एक एर मिलेगा जब यह 127 से अधिक बहती है तो यूनिकोड वर्णों के लिए एक पूर्णांक जोड़ते समय ror। http://docs.python.org/howto/unicode.html#the-unicode-type – shimofuri

+1

@shimofuri, पायथन 3 तार यूनिकोड हैं। यूटीएफ -8 एक एन्कोडिंग है। – alexis

उत्तर

15

हाँ, यह सबसे अच्छा तरीका है पायथन स्वचालित रूप से एक चरित्र और एक पूर्णांक रास्ता C और C++ कर के बीच परिवर्तित नहीं करता

+0

यह एक ही संग्रहित बिट पैटर्न के लिए एक रूपांतरण नहीं है, लेकिन विभिन्न अर्थशास्त्र (पूर्णांक, चरित्र) है। – alexis

+1

फिर भी, "बाइटियर" प्रकार है - जब सुविधाजनक रूप से अक्षरों को उनके मूल्य से छेड़छाड़ करने की आवश्यकता होती है तो काफी सुविधाजनक होता है। – jsbueno

7

अजगर वास्तव में आप उसे कुछ अतिरिक्त सफाई से करना चाहता था, तो सी के विपरीत, तो हां, chr (ord तरह से यह करने के लिए, एक चरित्र प्रकार नहीं है।

, आप की तरह कुछ कर सकता है :।

def add(c, x): 
    return chr(ord(c)+x) 
1

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

2

वहाँ पायथन में bytearray प्रकार है - यह नियमित रूप से तार की तुलना में धीमी है, लेकिन ज्यादातर एक सी स्ट्रिंग की तरह बर्ताव:, यह परिवर्तनशील है acessing inidividual तत्वों 0 बढ़ा - 255 पूर्णांक संख्या, लंबाई 1 के साथ सबस्ट्रिंग insetead, और आप तत्वों को असाइन कर सकते हैं। फिर भी, यह एक स्ट्रिंग के रूप में प्रतिनिधित्व किया है, और अजगर 2 में, एक str वस्तु के लिए डाली जा रहा है बिना एक स्ट्रिंग ज्यादातर स्थानों में इस्तेमाल किया जा सकता कर सकते हैं:

>>> text = bytearray("a") 
>>> text 
bytearray(b'a') 
>>> print text 
a 
>>> text[0]+=1 
>>> print text 
b 
>>> text[0] 
98 
>>> print "other_text" + text 
other_textb 

अजगर 3, का उपयोग करते समय एक bytearray की सामग्री का उपयोग करने के । एक पाठ वस्तु के रूप में, बस इस तरह के "latin1" या UTF-8 "के रूप में एक उचित एन्कोडिंग के साथ अपने डीकोड विधि कॉल:

>>> print ("other_text" + text.decode("latin1")) 
संबंधित मुद्दे