From 68ecab5d269da9393f5d36aafd3515c9a8925a37 Mon Sep 17 00:00:00 2001 From: feilong Date: Thu, 18 Nov 2021 21:45:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B3=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function.json" | 14 +- .../function.md" | 187 ++++++++++++++++++ .../function.py" | 70 +++++-- 3 files changed, 240 insertions(+), 31 deletions(-) create mode 100644 "data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.md" diff --git "a/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.json" "b/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.json" index eeb224b..9723f03 100644 --- "a/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.json" +++ "b/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.json" @@ -1,17 +1,5 @@ { - "one_line": { - "token[\"key\"] ": [ - "token" - ], - "print(\"\".join(result))": [ - "print(result)", - "print(\"\".join(result))" - ], - "dump_monkey(tokens):": [ - "dumpmonkey(tokens):" - ] - }, - "source": "function.py", + "source": "function.md", "depends": [], "exercise_id": 28, "type": "code_options" diff --git "a/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.md" "b/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.md" new file mode 100644 index 0000000..3fccb41 --- /dev/null +++ "b/data/1.python\345\210\235\351\230\266/1.\351\242\204\345\244\207\347\237\245\350\257\206/2.\347\250\213\345\272\217\350\256\276\350\256\241\346\200\235\346\203\263/function.md" @@ -0,0 +1,187 @@ +# 编程语言发明家 + +每个编程语言都有其内在的编程范式,体现着编程语言设计者的哲学。编程语言发展史上有许多杰出的人物。下面是一些例子: + +```python +programmers = [ + "约翰·巴科斯(JohnWarnerBackus), 创建了Fortran语言", + "阿兰·库珀(Alan Cooper), 开发了Visual Basic语言", + "艾兹格·迪杰斯特拉(Edsger Wybe Dijkstra), 提出了程序设计的框架结构", + "詹姆斯·高斯林(James Gosling), 开发了Java语言", + "安德斯·海尔斯伯格(Anders Hejlsberg), 开发了Turbo Pascal、Delphi、C#以及TypeScript", + "葛丽丝·霍普(Grace Murray Hopper), 开发了Flow-Matic,该语言对COBOL造成了影响", + "肯尼斯·艾佛森(Kenneth E. Iverson), 开发了APL,并与Roger Hui合作开发了J", + "威廉·纳尔逊·乔伊(William Nelson Joy), 发明了vi,BSD Unix的前期作者,以及SunOS的发起人,该操作系统后来改名为Solaris", + "艾伦·凯(Alan Curtis Kay), 开创了面向对象编程语言,以及Smalltalk的发起人", + "罗布·派克(Brian Kernighan), 与丹尼斯·里奇合著第一本C程式设计语言的书籍,同时也是AWK与AMPL程式设计语言的共同作者", + "约翰·麦卡锡(John McCarthy), 发明了LISP,在1956年的达特矛斯会议上提出了“人工智能”这个概念,被称为“人工智能之父", + "约翰·冯·诺伊曼(John von Neumann), 操作系统概念的发起者", + "丹尼斯·里奇(Dennis MacAlistair Ritchie), 发明了C语言,1978年与布莱恩·科尔尼干(Brian W. Kernighan)一起出版了名著《C程序设计语言(The C Programming Language)》", + "比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup), 他以创造C++编程语言而闻名,被称为“C++之父”", + "肯·汤普逊(Kenneth Lane Thompson), 与丹尼斯·里奇同为1983年图灵奖得主。他与丹尼斯·里奇设计了B语言、C语言,创建了Unix和Plan 9操作系统,编程语言Go的共同作者。发展正规表示法,写作了早期的电脑文字编辑器QED与ed,定义UTF-8编码,以及发展电脑象棋", + "尼克劳斯·维尔特(Niklaus Emil Wirth), 发明了Pascal与Modula", + "拉里·沃尔(Larry Wall), 创造了Perl与Perl6", + "吉多·范罗苏姆(Guido van Rossum), 创造了 Python" +] +``` + +为了进一步对上述文本数据解析,获得如下格式的结构化信息: + +```json +[ + {"name_cn": "约翰·巴科斯", "name_en": "JohnWarnerBackus", "achievement": "创建了Fortran语言"}, {"name_cn": "阿兰·库珀", "name_en": "Alan Cooper", "achievement": "开发了Visual Basic语言"}, + ... +] +``` + +我们先分析一个例子,解析这个文本数据:`"吉多·范罗苏姆(Guido van Rossum), 创造了 Python"`。 + +* 首先,定义一个函数 `parse_parts`,通过第一个逗号,拆分出发明家的`名字信息`和`成就信息`。 +* 其次,定义一个函数 `parse_name`,通过对`name`的进一步拆分,获得发明家的中英文名字信息。 +* 最后,定义一个函数 `parse_creators`,完成解析。 + +完整的代码模版如下: + +```python +def parse_parts(creator): + index = creator.find(',') + name, achievement = creator[0:index], creator[index+1:] + return name.strip(), achievement.strip() + +def parse_name(name): + index = name.find('(') + name_cn, name_en = name[0:index], name[index:] + name_en = name_en[1:len(name_en)-1] + return name_cn, name_en + +def parse_creators(creators): + # TODO(YOU): 请在此处正确实现 + +if __name__ == '__main__': + creators = ... + profiles = parse_creators(creators) + print(profiles) +``` + +请找出以下对函数`parse_creators`的实现中,不正确的选项。 + +## template + +```python +# -*- coding: UTF-8 -*- +# 作者:幻灰龙 +# 标题:编程语言发明家 +# 描述:使用 Python 函数处理编程语言发明家的信息 + +def parse_name(name): + index = name.find('(') + name_cn, name_en = name[0:index], name[index:] + name_en = name_en[1:len(name_en)-1] + return name_cn, name_en + + +def parse_parts(creator): + index = creator.find(',') + name, achievement = creator[0:index], creator[index+1:] + return name.strip(), achievement.strip() + + +def parse_profile(creator): + name, achievement = parse_parts(creator) + name_cn, name_en = parse_name(name) + return { + 'name_cn': name_cn, + 'name_en': name_en, + 'achievement': achievement + } + + +def parse_creators(creators): + profiles = [] + for creator in creators: + profile = parse_creator(creator) + profiles.append(profile) + return profiles + + +if __name__ == '__main__': + creators = [ + "约翰·巴科斯(JohnWarnerBackus), 创建了Fortran语言", + "阿兰·库珀(Alan Cooper), 开发了Visual Basic语言", + "艾兹格·迪杰斯特拉(Edsger Wybe Dijkstra), 提出了程序设计的框架结构", + "詹姆斯·高斯林(James Gosling), 开发了Java语言", + "安德斯·海尔斯伯格(Anders Hejlsberg), 开发了Turbo Pascal、Delphi、C#以及TypeScript", + "葛丽丝·霍普(Grace Murray Hopper), 开发了Flow-Matic,该语言对COBOL造成了影响", + "肯尼斯·艾佛森(Kenneth E. Iverson), 开发了APL,并与Roger Hui合作开发了J", + "威廉·纳尔逊·乔伊(William Nelson Joy), 发明了vi,BSD Unix的前期作者,以及SunOS的发起人,该操作系统后来改名为Solaris", + "艾伦·凯(Alan Curtis Kay), 开创了面向对象编程语言,以及Smalltalk的发起人", + "罗布·派克(Brian Kernighan), 与丹尼斯·里奇合著第一本C程式设计语言的书籍,同时也是AWK与AMPL程式设计语言的共同作者", + "约翰·麦卡锡(John McCarthy), 发明了LISP,在1956年的达特矛斯会议上提出了“人工智能”这个概念,被称为“人工智能之父", + "约翰·冯·诺伊曼(John von Neumann), 操作系统概念的发起者", + "丹尼斯·里奇(Dennis MacAlistair Ritchie), 发明了C语言,1978年与布莱恩·科尔尼干(Brian W. Kernighan)一起出版了名著《C程序设计语言(The C Programming Language)》", + "比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup), 他以创造C++编程语言而闻名,被称为“C++之父”", + "肯·汤普逊(Kenneth Lane Thompson), 与丹尼斯·里奇同为1983年图灵奖得主。他与丹尼斯·里奇设计了B语言、C语言,创建了Unix和Plan 9操作系统,编程语言Go的共同作者。发展正规表示法,写作了早期的电脑文字编辑器QED与ed,定义UTF-8编码,以及发展电脑象棋", + "尼克劳斯·维尔特(Niklaus Emil Wirth), 发明了Pascal与Modula", + "拉里·沃尔(Larry Wall), 创造了Perl与Perl6", + "吉多·范罗苏姆(Guido van Rossum), 创造了 Python" + ] + + profiles = parse_creators(creators) + print(profiles) +``` + +## 答案 + +```python +def parse_creators(creators): + profiles = [] + i = 0 + while i