ฉันจะรับค่าASCIIของตัวละครเป็นint
in Python ได้อย่างไร?
ฉันจะรับค่าASCIIของตัวละครเป็นint
in Python ได้อย่างไร?
คำตอบ:
จากที่นี่ :
function ord () จะได้รับค่า int ของ char และในกรณีที่คุณต้องการแปลงกลับหลังจากเล่นกับตัวเลขฟังก์ชัน chr () ก็ทำตามเคล็ดลับ
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
ใน Python 2 มีunichr
ฟังก์ชั่นส่งคืนอักขระ Unicodeซึ่งมีลำดับเป็นunichr
อาร์กิวเมนต์:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
ในหลาม 3 คุณสามารถใช้แทนchr
unichr
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
มันเกินที่คุณจะตีความว่าเป็นเช่นตัวอักษร ใน Python 3 (หรือunichr
ใน Python 2) หมายเลขอินพุตจะถูกตีความเป็นลำดับเลขจำนวนเต็ม Unicode codepoint: unichr(0x439) == '\u0439'
(จำนวนเต็ม 256 ตัวแรกมีการจับคู่แบบเดียวกับ latin-1 unichr(0xe9) == b'\xe9'.decode('latin-1')
:, อันดับแรก 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
เป็นสิ่ง Unicode ไม่ใช่ งูใหญ่)
โปรดทราบว่าord()
ไม่ให้ค่า ASCII ต่อคุณ มันให้คุณค่ากับตัวเลขของตัวละครไม่ว่าจะเป็นการเข้ารหัสอะไรก็ตามดังนั้นผลลัพธ์ของมันord('ä')
อาจเป็น 228 ถ้าคุณใช้ภาษาละติน -1 หรือเพิ่มขึ้นTypeError
ถ้าคุณใช้ UTF-8 มันยังสามารถส่งคืน codepoint Unicode แทนถ้าคุณผ่านมัน Unicode:
>>> ord(u'あ')
12354
คุณกำลังมองหา:
ord()
คำตอบที่ยอมรับนั้นถูกต้อง แต่มีวิธีที่ชาญฉลาด / มีประสิทธิภาพมากขึ้นในการทำเช่นนี้หากคุณต้องการแปลงอักขระ ASCII ทั้งกลุ่มเป็นรหัส ASCII ในคราวเดียว แทนที่จะทำ:
for ch in mystr:
code = ord(ch)
หรือเร็วกว่าเล็กน้อย:
for code in map(ord, mystr):
คุณแปลงเป็นชนิดเนทิฟของ Python ที่วนซ้ำรหัสโดยตรง ใน Python 3 มันเป็นเรื่องเล็กน้อย:
for code in mystr.encode('ascii'):
และใน Python 2.6 / 2.7 มันเกี่ยวข้องเพียงเล็กน้อยเท่านั้นเพราะมันไม่มีbytes
วัตถุสไตล์ Py3 ( 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 การทำซ้ำ a str
เพื่อรับรหัส ASCII โดยใช้map(ord, mystr)
เริ่มต้นปิดโดยใช้เวลาประมาณสองเท่านานกว่าlen
10 str
กว่าการใช้bytearray(mystr)
บน Py2 หรือmystr.encode('ascii')
บน Py3 และเมื่อstr
ได้รับนานขึ้นตัวคูณที่จ่ายให้map(ord, mystr)
เพิ่มขึ้น ถึง ~ 6.5x-7x
ข้อเสียเพียงอย่างเดียวคือการแปลงทั้งหมดในครั้งเดียวดังนั้นผลลัพธ์แรกของคุณอาจใช้เวลานานกว่าเล็กน้อยและขนาดมหึมาอย่างแท้จริงstr
จะมีขนาดใหญ่ชั่วคราวbytes
/ bytearray
แต่ยกเว้นว่าสิ่งนี้บังคับให้คุณเข้าสู่การเฆี่ยนตีหน้า .
ในการรับรหัส 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]