Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_python
提交
68ecab5d
S
skill_tree_python
项目概览
CSDN 技术社区
/
skill_tree_python
通知
66
Star
14
Fork
6
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_python
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
68ecab5d
编写于
11月 18, 2021
作者:
F
feilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
改进3题
上级
241f1a1c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
240 addition
and
31 deletion
+240
-31
data/1.python初阶/1.预备知识/2.程序设计思想/function.json
data/1.python初阶/1.预备知识/2.程序设计思想/function.json
+1
-13
data/1.python初阶/1.预备知识/2.程序设计思想/function.md
data/1.python初阶/1.预备知识/2.程序设计思想/function.md
+187
-0
data/1.python初阶/1.预备知识/2.程序设计思想/function.py
data/1.python初阶/1.预备知识/2.程序设计思想/function.py
+52
-18
未找到文件。
data/1.python初阶/1.预备知识/2.程序设计思想/function.json
浏览文件 @
68ecab5d
{
{
"one_line"
:
{
"source"
:
"function.md"
,
"token[\"key\"] "
:
[
"token"
],
"print(\"\".join(result))"
:
[
"print(result)"
,
"print(
\"\"
.join(result))"
],
"dump_monkey(tokens):"
:
[
"dumpmonkey(tokens):"
]
},
"source"
:
"function.py"
,
"depends"
:
[],
"depends"
:
[],
"exercise_id"
:
28
,
"exercise_id"
:
28
,
"type"
:
"code_options"
"type"
:
"code_options"
...
...
data/1.python初阶/1.预备知识/2.程序设计思想/function.md
0 → 100644
浏览文件 @
68ecab5d
# 编程语言发明家
每个编程语言都有其内在的编程范式,体现着编程语言设计者的哲学。编程语言发展史上有许多杰出的人物。下面是一些例子:
```
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`
的实现中,
<span
style=
"color:red"
>
不正确
</span>
的选项。
## 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
<
len
(
creators
):
creator
=
creators
[
i
]
name
,
achievement
=
parse_parts
(
creator
)
profiles
.
append
({
'name_cn'
:
name
,
'name_en'
:
name
,
'achievement'
:
achievement
})
i
+=
1
return
profiles
```
## 选项
### 再次拆成两步解析
```
python
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
```
### 函数+列表表达式
```
python
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
):
return
[
parse_profile
(
creator
)
for
creator
in
creators
]
```
### 一个函数完成解析
```
python
def
parse_creators
(
creators
):
profiles
=
[]
for
creator
in
creators
:
name
,
achievement
=
parse_parts
(
creator
)
name_cn
,
name_en
=
parse_name
(
name
)
profiles
.
append
({
'name_cn'
:
name_cn
,
'name_en'
:
name_en
,
'achievement'
:
achievement
})
return
profiles
```
data/1.python初阶/1.预备知识/2.程序设计思想/function.py
浏览文件 @
68ecab5d
# -*- coding: UTF-8 -*-
# -*- coding: UTF-8 -*-
# 作者:幻灰龙
# 作者:幻灰龙
# 标题:
函数代码
# 标题:
编程语言发明家
# 描述:使用 Python 函数
组织代码,输出“猴子在苹果树下打架”
# 描述:使用 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
dump_monkey
(
tokens
):
result
=
[]
def
parse_parts
(
creator
):
for
token
in
tokens
:
index
=
creator
.
find
(
','
)
result
.
append
(
token
[
"key"
])
name
,
achievement
=
creator
[
0
:
index
],
creator
[
index
+
1
:]
print
(
""
.
join
(
result
))
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_profile
(
creator
)
profiles
.
append
(
profile
)
return
profiles
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
tokens
=
[
creators
=
[
{
"约翰·巴科斯(JohnWarnerBackus), 创建了Fortran语言"
,
"key"
:
"猴子在"
"阿兰·库珀(Alan Cooper), 开发了Visual Basic语言"
,
},
"艾兹格·迪杰斯特拉(Edsger Wybe Dijkstra), 提出了程序设计的框架结构"
,
{
"詹姆斯·高斯林(James Gosling), 开发了Java语言"
,
"key"
:
"苹果树下"
"安德斯·海尔斯伯格(Anders Hejlsberg), 开发了Turbo Pascal、Delphi、C#以及TypeScript"
,
},
"葛丽丝·霍普(Grace Murray Hopper), 开发了Flow-Matic,该语言对COBOL造成了影响"
,
{
"肯尼斯·艾佛森(Kenneth E. Iverson), 开发了APL,并与Roger Hui合作开发了J"
,
"key"
:
"打架"
"威廉·纳尔逊·乔伊(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"
]
]
dump_monkey
(
tokens
)
profiles
=
parse_creators
(
creators
)
print
(
profiles
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录