අක්ෂරයක ASCII අගය ලබා ගන්නේ කෙසේද


Answers:


1376

සිට මෙහි :

ශ්‍රිත අනුපිළිවෙල () මඟින් වර්‍ගයේ int අගය ලැබෙනු ඇත. ඔබට අංකය සමඟ සෙල්ලම් කිරීමෙන් පසු ආපසු හැරවීමට අවශ්‍ය නම්, chr () ශ්‍රිතය උපක්‍රමය කරයි.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

පයිතන් 2 හි, unichrශ්‍රිතය ද ඇත , යුනිකෝඩ් අක්ෂරය නැවත ලබා දෙන unichrතර්කය වන ඕඩිනල් :

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

පයිතන් 3 හි ඔබට chrඒ වෙනුවට භාවිතා කළ හැකිය unichr.


ord () - පයිතන් 3.6.5rc1 ප්‍රලේඛනය

ord () - පයිතන් 2.7.14 ප්‍රලේඛනය


chr භාවිතා කරන කේතන ක්‍රමය කුමක්ද?
njzk2

15
පයිතන් 3 හි chr unichr ලෙසද ක්‍රියා කරන බව සලකන්න. chr(31415) -> '窷'
විලියම්

6
j njzk2: එය කිසිදු අක්ෂර කේතීකරණයක් භාවිතා නොකරයි, එය පයිතන් 2 හි බයිටෙස්ට්‍රිං එකක් ලබා දෙයි. එය අක්ෂරයක් ලෙස අර්ථ නිරූපණය කිරීම ඔබ සතු ය chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. පයිතන් 3 හි (හෝ unichrපයිතන් 2 හි), ආදාන අංකය යුනිකෝඩ් කෝඩ්පොයින්ට් නිඛිල ඕඩිනල් ලෙස අර්ථ දැක්වේ: unichr(0x439) == '\u0439'(පළමු නිඛිල 256 ට ලතින් -1 හා සමාන සිතියම් ගත කරයි: unichr(0xe9) == b'\xe9'.decode('latin-1')පළමු 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')එය යුනිකෝඩ් දෙයක් මිස පයිතන්).
jfs

4
ශ්‍රිතය "ඕඩ්" ලෙස හඳුන්වන්නේ ඇයි?
eLymar

7
L ලයිමර්: එය "පිළිවෙලට" සමාන භාෂාමය මූලයන් ඇති "ඕඩිනල්" සඳහා කෙටි ය - එනම් චරිතයේ සංකේතාත්මක නිරූපණයට වඩා සංඛ්‍යාත්මක ය
ජේකොබ් ක්‍රෝල්

169

ord()ඔබට ASCII අගය ලබා නොදෙන බව සලකන්න ; එය අක්ෂර වින්‍යාසය තුළ ඇති ඕනෑම සංඛ්‍යාංකයක සංඛ්‍යාත්මක අගයක් ලබා දෙයි. එබැවින් ord('ä')ඔබ ලතින් -1 භාවිතා කරන්නේ නම් එහි ප්‍රති result ලය 228 ක් විය හැකිය, නැතහොත් TypeErrorඔබ යූටීඑෆ් -8 භාවිතා කරන්නේ නම් එය ඉහළ නැංවිය හැකිය . ඔබ යුනිකෝඩ් එකක් සම්මත කළහොත් එයට යුනිකෝඩ් කේත ලක්ෂ්‍යය නැවත ලබා දිය හැකිය:

>>> ord(u'あ')
12354

16
දී ඇති තත්වයක් තුළ ඔබ භාවිතා කරන්නේ කුමන කේතන ක්‍රමයක්දැයි සොයා ගන්නේ කෙසේද?
උඩු රැවුල

2
Ou මූස්ටේච්: පයිතන් 3 හි, ඔබ යුනිකෝඩ් පිටත සිට භාවිතා කරනු ඇත.
tricasse

1
වස්තු වර්ගය මත රඳා පවතී . Python3 ( str ): unicodeපෙරනිමියෙන්. පයිතන් 3 ( බයිට් ): str(b'\xc3\x9c', 'ascii')-> යුනිකෝඩ් ඩෙකෝඩ් දෝෂය මතු කරයි . Python3 ( බයිට් ): str(b'\xc3\x9c', 'utf-8')-> නැවත U . ඔබට පැකේජ හය ගැන සොයා බැලිය හැකිය .
nosahama


38

පිළිගත් පිළිතුර නිවැරදි ය, නමුත් ඔබට ASCII අක්ෂර සමූහයක් එකවර ඔවුන්ගේ ASCII කේත බවට පරිවර්තනය කිරීමට අවශ්‍ය නම් මෙය කිරීමට වඩා දක්ෂ / කාර්යක්ෂම ක්‍රමයක් තිබේ. කරනවා වෙනුවට:

for ch in mystr:
    code = ord(ch)

හෝ තරමක් වේගවත්:

for code in map(ord, mystr):

ඔබ කෙලින්ම කේත නැවත කියවන පයිතන් ස්වදේශීය වර්ග වලට පරිවර්තනය කරයි. පයිතන් 3 හි එය සුළුපටු ය:

for code in mystr.encode('ascii'):

සහ පයිතන් 2.6 / 2.7 හි එය ඊට වඩා මඳක් සම්බන්ධ වී ඇත්තේ එයට පයි 3 විලාසිතාවේ bytesවස්තුවක් නොමැති නිසාය ( bytesඅන්වර්ථයකි str, එය චරිතය අනුව පුනරාවර්තනය වේ ), නමුත් ඒවාට ඇත්තේ bytearray:

# If mystr is definitely str, not unicode
for code in bytearray(mystr):

# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):

ඕඩිනල් මගින් ස්වදේශීයව පුනරාවර්තනය වන වර්ගයක් ලෙස කේතන කිරීම යනු පරිවර්තනය වඩා වේගවත් වේ; Py2.7 හා Py3.5 යන දෙදෙනා මත ම දේශීය පරීක්ෂණ දී, එල්ලාවල මහතා strභාවිතා එහි ASCII කේත ලබා ගැනීමට map(ord, mystr)මෙන් දෙගුණයකට ආසන්න සඳහා දිගු ගනිමින් ලකුණු ආරම්භ len10 strභාවිතා වඩා bytearray(mystr)Py2 හෝ mystr.encode('ascii')Py3 මත, සහ ලෙස strතවදුරටත් ලැබෙන, ගුණකය සඳහා ගෙවන map(ord, mystr)ඉහල ~ 6.5x-7x දක්වා.

මෙහි ඇති අවාසිය නම්, පරිවර්තනය එකවරම සිදුවීමයි, එබැවින් ඔබේ පළමු ප්‍රති result ලය සඳහා තව ටිකක් කල් ගතවනු ඇත, සැබවින්ම අති strවිශාල ප්‍රමාණයක් සමානුපාතිකව විශාල තාවකාලික bytes/ වේ bytearray, නමුත් මෙය ඔබව පිටුපසට තල්ලු කිරීමට බල නොකරන්නේ නම්, මෙය වැදගත් නොවේ .


4

අක්ෂරයක ASCII කේතය ලබා ගැනීම සඳහා, ඔබට ord()ශ්‍රිතය භාවිතා කළ හැකිය .

මෙන්න උදාහරණ කේතයක්:

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

ප්‍රතිදානය:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.