ฉันจะรับค่าASCIIของตัวละครเป็นintin Python ได้อย่างไร?
ฉันจะรับค่าASCIIของตัวละครเป็นintin 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 คุณสามารถใช้แทนchrunichr
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)เริ่มต้นปิดโดยใช้เวลาประมาณสองเท่านานกว่าlen10 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]