前言最近在实习,任务不是很重,所以利用业余时间在PAT网站上用Python3写题,潜心利用的特点Python3和函数式编程的概念。大部分题目的输入输出格式都差不多,比如一行读取几个数字和字符串,每行输出多少个字符串等等,所以会产生很多重复的代码。Python代码于是我利用VSCode的代码片段功能写了一个代码框架来处理这些输入输出,并加入了测试函数(写函数前先写测试才是正确的)。代码如下:"""SimpleConsoleProgramWithDataInputAndOutput."""importsysimportiodefread_int():"""Readaserisofnumbers."""returnlist(map(int,sys.stdin.readline().split()))deftest_read_int():"""Testtheread_intfunction"""test_file=io.StringIO("123\n")sys.stdin=test_fileassertread_int()==[1,2,3],"read_interror"defread_float():"""Readaserisoffloatnumbers."""returnlist(map(float,sys.stdin.readline().split()))deftest_read_float():"""Testtheread_floatfunction"""test_file=io.StringIO("123\n")sys.stdin=test_fileassertread_float()==[1.0,2.0,3.0],"read_floaterror"defread_word():"""Readaserisofstring."""returnlist(map(str,sys.stdin.readline().split()))deftest_read_word():"""Testtheread_wordfunction"""test_file=io.StringIO("123\n")sys.stdin=test_fileassertread_word()==["1","2","3"],"read_worderror"defcombine_with(seq,sep='',num=None):"""Combinelistenumwithacharacterandreturnthestringobject"""res=sep.join(list(map(str,seq)))ifnumisnotNone:res=str(seq[0])forelementinrange(1,len(seq)):res+=sep+\str(seq[element])ifelement%num!=0else'\n'+\str(seq[element])returnresdeftest_combile_with():"""Testthecombile_withfunction."""assertcombine_with([1,2,3,4,5],'*',2)=="""1*23*45""","combine_witherror."defmain():"""Themainfunction."""passif__name__=='__main__':sys.exit(int(main()or0))在VSCode默认代码片段中添加VSCode代码片段的操作大致如下:File->*??*Items->UserCodeSnippets,选择Python编辑“python.json”文件如下:{/*//在此处放置您的Python代码段。每个代码段都在代码段名称下定义,并具有前缀、正文和//描述。前缀是whatisusedtotriggerthesnippetandthebodywillbeexpandedandinserted.Possiblevariablesare://$1,$2fortabstops,${id}and${id:label}and${1:label}forvariables.Variableswiththesameidareconnected.//Example:"Printtoconsole":{"prefix":"log","body":["console.log('$1');","$2"],"description":"Logoutputtoconsole"}*/"SimpleConsoleProgramWithDataInputAndOutput":{"prefix":"simple","body":["\"\"\"SimpleConsoleProgramWithDataInputAndOutput.\"\"\"\nimportsys\n\ndefread_int():\n\"\"\"Readaserisofnumbers.\"\"\"\nreturnlist(map(int,sys.stdin.readline().split()))\n\n\ndefread_float():\n\"\"\"Readaseisoffloatnumbers.\"\"\"\nreturnlist(map(float,sys.stdin.readline().split()))\n\n\ndefread_word():\n\"\"\"Readaseisofstring.\"\"\"\nreturnlist(map(str,sys.stdin.readline().split()))\n\n\ndefcombine_with(seq,sep='',num=None):\n\"\"\"Combinelistenumwithacharacterandreturnthestringobject\"\"\"\nres=sep.join(list(map(str,seq)))\nifnumisnotNone:\nres=str(seq[0])\nforeelementinrange(1,len(seq)):\nres+=sep+str(seq[element])ifelement%num!=0else'\\n'+str(seq[element])\nreturnres\n\n\ndefmain():\n\"\"\"mainfunction.\"\"\"\npass\n\n\nif__name__=='__main__':\nsys.exit(int(main()or0))\n"],"description":"SimpleConsoleProgramWithDataInputAndOutput"}}总结虽然Python不是特别适合解答算法题是对性能要求比较高的场景,但是在各种排队类型、字符串处理等一些模拟题的情况下,使用Python可以大大提高反汇编的效率。另外,也可以使用cimport来使用C语言的数据结构和Python的语法特点,效率不弱于原生C代码
