พื้นหลัง
Python 3 มีสตริงตัวอักษรหลายประเภท ตัวอย่างเช่นสตริงthis 'is' an exa\\m/ple
สามารถแสดงเป็น:
'this \'is\' an exa\\\\m/ple'
"this 'is' an exa\\\\m/ple"
r"this 'is' an exa\\m/ple"
'''this 'is' an exa\\\\m/ple'''
"""this 'is' an exa\\\\m/ple"""
r'''this 'is' an exa\\m/ple'''
r"""this 'is' an exa\\m/ple"""
อย่างที่คุณเห็นการใช้ตัวคั่นที่แตกต่างกันสำหรับสตริงสามารถทำให้สตริงยาวขึ้นหรือสั้นลงได้โดยการเปลี่ยนการหลบหลีกที่จำเป็นสำหรับตัวละครบางตัว ตัวคั่นบางตัวไม่สามารถใช้กับสตริงทั้งหมด: r'
หายไปด้านบน (ดูคำอธิบายภายหลัง) การรู้จักสายอักขระของคุณนั้นมีประโยชน์มากในการตีกอล์ฟ
หนึ่งยังสามารถรวมตัวอักษรสตริงหลายตัวเป็นหนึ่ง:
'this \'is\' an ''''exa\\\\m/ple'''
"this 'is' an "r'exa\\m/ple'
ท้าทาย
ความท้าทายคือการกำหนดสตริง ASCII ที่พิมพ์ได้เพื่อส่งออกการแสดงตัวอักษรที่สั้นที่สุดใน Python
รายละเอียดเกี่ยวกับกลศาสตร์สตริง
Strings สามารถคั่นใช้'
, "
, และ'''
"""
สตริงสิ้นสุดลงเมื่อตัวคั่นเริ่มต้นถูกกดอีกครั้งโดยไม่ใช้ Escape
หากสตริงตัวอักษรเริ่มต้นด้วย'''
หรือ"""
จะใช้เป็นตัวคั่น มิฉะนั้น'
หรือ"
จะใช้
ตัวละครสามารถหลบหนีได้โดยวาง\
ก่อนหน้าพวกเขา สิ่งนี้จะแทรกอักขระในสตริงและกำจัดความหมายพิเศษที่อาจมี ยกตัวอย่างเช่นใน'a \' b'
ช่วงกลางจะหนีออกมาและทำให้ไม่ได้จบที่แท้จริงและสตริงที่เกิดคือ'
a ' b
เป็นทางเลือกหนึ่งในr
หรือR
อาจแทรกก่อนตัวคั่นเริ่มต้น หากทำเสร็จแล้วการหลบหนี\
จะปรากฏในผลลัพธ์ ยกตัวอย่างเช่นการประเมินr'a \' b'
a \' b
นี่คือเหตุผลที่ไม่สามารถคั่นด้วยa ' b
r'
ในการหลบหนี'''
หรือ"""
มีเพียงหนึ่งตัวเท่านั้นที่ต้องหลบหนีจากหนึ่งในตัวละคร
ตัวอักษรเหล่านี้สามารถรวมเข้าด้วยกันซึ่งเชื่อมต่อเนื้อหาของพวกเขา
กฎระเบียบ
- อินพุตเป็นสตริงของกอล์ฟ ASCII ที่พิมพ์ได้เท่านั้นดังนั้นจึงไม่มีบรรทัดใหม่หรืออักขระพิเศษอื่น ๆ
- ผลลัพธ์คือสตริงตัวอักษรกอล์ฟ หากมีหลายวิธีให้ส่งผลลัพธ์ออกมาหนึ่งรายการ
- เพื่อให้ง่ายต่อความท้าทายในไม่ใช่
r
สตริงหนีใด ๆ ยกเว้นสำหรับ\\
,\'
และ\"
ได้รับการพิจารณาที่ไม่ถูกต้อง พวกเขาจะต้องไม่ถูกใช้ในการส่งออกแม้ว่า'\m'
จะเท่ากับ'\\m'
ในหลาม\n
นี้จะเอาความจำเป็นในการประมวลผลรหัสหนีพิเศษเช่น - สร้างขึ้นสำหรับการเล่นกอล์ฟสายไพ ธ อนไม่ได้รับอนุญาต
repr
อนุญาตให้ใช้Python ได้เนื่องจากเป็นเส็งเคร็งอยู่ดี - ใช้กฎมาตรฐานของกอล์ฟ
ตัวอย่างอินพุต / เอาท์พุต
ฉันพยายามอย่างดีที่สุดเพื่อตรวจสอบสิ่งเหล่านี้ แต่แจ้งให้เราทราบหากมีข้อผิดพลาด หากมีเอาต์พุตที่ถูกต้องหลายตัวในเคสเหล่านั้นทั้งหมดจะถูกลิสต์ด้านล่างอินพุต
test
-> 'test'
-> "test"
te\st
-> 'te\\st'
-> "te\\st"
-> r'te\st'
-> r"te\st"
te'st
-> "te'st"
te"st
-> 'te"st'
t"e"s't
-> 't"e"s\'t'
te\'st
-> "te\\'st"
-> r'te\'st'
-> r"te\'st"
te\'\"st
-> r'te\'\"st'
-> r"te\'\"st"
t"'e"'s"'t"'s"'t"'r"'i"'n"'g
-> """t"'e"'s"'t"'s"'t"'r"'i"'n"'g"""
-> '''t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''
t"\e"\s"\t"\s'\t"\r"\i"\n"\g
-> r"""t"\e"\s"\t"\s'\t"\r"\i"\n"\g"""
-> r'''t"\e"\s"\t"\s'\t"\r"\i"\n"\g'''
t"""e"""s"""'''t'''s'''"""t"""r"""'''i'''n'''g
-> 't"""e"""s"""'"'''t'''s'''"'"""t"""r"""'"'''i'''n'''g"
t\"""e\"""s\"""'''t'''s'''\"""t\"""r\"""'''i'''n'''g
-> r"""t\"""e\"""s\"""'''t'''s'''\"""t\"""r\"""'''i'''n'''g"""
t"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\'\
-> r't"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\'''\\'
-> r't"e"s"t"s"t"r"i"n"g"\'\'\'\'\'\'\''"\\"
"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''
-> """\"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''"""
-> '''"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g''\''''
ขอบคุณAnders Kaseorgสำหรับกรณีเพิ่มเติมเหล่านี้:
\\'"\\'\
-> "\\\\'\"\\\\'\\"
''"""''"""''
-> '''''"""''"""'\''''
u'
และb'
?
b
ไม่สามารถแม้แต่จะรวมเข้ากับสตริงปกติได้ดังนั้นฉันจึงทิ้งมันไว้
"
หรือ'
->"""t"'e"'s"'t"'s"'t"'r"'i"'n"'g'''