认识 Python
人生苦短,我用 Python —— Life is short, you need Python
目标
Python 的起源
为什么要用 Python?
Python 的特点
Python 的优缺点
1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序,作为 ABC 语言的一种继承(感觉下什么叫牛人)
ABC 是由吉多参加设计的一种教学语言,就吉多本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是 ABC 语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在 Python 中避免这一错误,并获取了非常好的效果
之所以选中 Python(蟒蛇) 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者
1991 年,第一个 Python 解释器 诞生,它是用 C 语言实现的,并能够调用 C 语言的库文件
1.1 解释器(科普)
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器
编译器翻译的方式有两种:一个是编译,另外一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如 C、C++
解释型语言:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行
编译型语言和解释型语言对比
速度 —— 编译型语言比解释型语言执行速度快
跨平台性 —— 解释型语言比编译型语言跨平台性好
1.2 Python 的设计目标
1999 年,吉多·范罗苏姆向 DARPA 提交了一条名为 “Computer Programming for Everybody” 的资金申请,并在后来说明了他对 Python 的目标:
一门简单直观的语言并与主要竞争者一样强大
开源,以便任何人都可以为它做贡献
代码像纯英语那样容易理解
适用于短期开发的日常任务
这些想法中的基本都已经成为现实,Python 已经成为一门流行的编程语言
1.3 Python 的设计哲学
优雅
明确
简单
Python 开发者的哲学是:用一种方法,最好是只有一种方法来做一件事
如果面临多种选择,Python 开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法
在 Python 社区,吉多被称为“仁慈的独裁者”
02. 为什么选择 Python?
代码量少
……
同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下 Python 是 Java 的 1/5,所以说 人生苦短,我用 Python
03. Python 特点
Python 是完全面向对象的语言
函数、模块、数字、字符串都是对象,在 Python 中一切皆对象
完全支持继承、重载、多重继承
支持重载运算符,也支持泛型设计
Python 拥有一个强大的标准库,Python 语言的核心只包含 数字、字符串、列表、字典、文件 等常见类型和函数,而由 Python 标准库提供了 系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理 等额外的功能
Python 社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖 科学计算、人工智能、机器学习、Web 开发、数据库接口、图形系统 多个领域
面向对象的思维方式
面向对象 是一种 思维方式,也是一门 程序设计技术
要解决一个问题前,首先考虑 由谁 来做,怎么做事情是 谁 的职责,最后把事情做好就行!
对象 就是 谁
要解决复杂的问题,就可以找多个不同的对象,各司其职,共同实现,最终完成需求
04. Python 的优缺点
4.1 优点
简单、易学
免费、开源
面向对象
丰富的库
可扩展性
如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把这部分程序用 C 或 C++ 编写,然后在 Python 程序中使用它们
……
4.2 缺点
运行速度
国内市场较小
中文资料匮乏
第一个 Python 程序
目标
第一个 HelloPython 程序
Python 2.x 与 3.x 版本简介
执行 Python 程序的三种方式
解释器 —— python / python3
交互式 —— ipython
集成开发环境 —— PyCharm
在终端中输入以下命令执行 01-HelloPython.py
$ python 01-HelloPython.py
print 是 python 中我们学习的第一个 函数
print 函数的作用,可以把 “” 内部的内容,输出到屏幕上
1.3 演练扩展 —— 认识错误(BUG)
关于错误
编写的程序不能正常执行,或者执行的结果不是我们期望的
俗称 BUG,是程序员在开发时非常常见的,初学者常见错误的原因包括:
手误
对已经学习过的知识理解还存在不足
对语言还有需要学习和提升的内容
在学习语言时,不仅要学会语言的语法,而且还要学会如何认识错误和解决错误的方法
每一个程序员都是在不断地修改错误中成长的
第一个演练中的常见错误
1> 手误,例如使用 pirnt(“Hello world”)
NameError: name ‘pirnt’ is not defined
名称错误:‘pirnt’ 名字没有定义
2> 将多条 print 写在一行
SyntaxError: invalid syntax
语法错误:语法无效
每行代码负责完成一个动作
3> 缩进错误
IndentationError: unexpected indent
缩进错误:不期望出现的缩进
Python 是一个格式非常严格的程序设计语言
目前而言,大家记住每行代码前面都不要增加空格
4> python 2.x 默认不支持中文
目前市场上有两个 Python 的版本并存着,分别是 Python 2.x 和 Python 3.x
Python 2.x 默认不支持中文,具体原因,等到介绍 字符编码 时给大家讲解
Python 2.x 的解释器名称是 python
Python 3.x 的解释器名称是 python3
SyntaxError: Non-ASCII character ‘\xe4’ in file 01-HelloPython.py on line 3,
but no encoding declared;
see http://python.org/dev/peps/pep-0263/ for details
语法错误: 在 01-HelloPython.py 中第 3 行出现了非 ASCII 字符 ‘\xe4’,但是没有声明文件编码
请访问 http://python.org/dev/peps/pep-0263/ 了解详细信息
ASCII 字符只包含 256 个字符,不支持中文
有关字符编码的问题,后续会讲
单词列表
$ python xxx.py
$ python3 xxx.py
其他解释器(知道)
Python 的解释器 如今有多个语言的实现,包括:
CPython —— 官方版本的 C 语言实现
Jython —— 可以运行在 Java 平台
IronPython —— 可以运行在 .NET 和 Mono 平台
PyPy —— Python 实现的,支持 JIT 即时编译
3.2. 交互式运行 Python 程序
直接在终端中运行解释器,而不输入要执行的文件名
在 Python 的 Shell 中直接输入 Python 的代码,会立即看到程序执行结果
exit()
2> 使用热键退出
在 python 解释器中,按热键 ctrl + d 可以退出解释器
2> 使用热键退出
在 IPython 解释器中,按热键 ctrl + d,IPython 会询问是否退出解释器
IPython 的安装
$ sudo apt install ipython
3.3. Python 的 IDE —— PyCharm
1) 集成开发环境(IDE)
集成开发环境(IDE,Integrated Development Environment)—— 集成了开发软件需要的所有工具,一般包括以下工具:
图形用户界面
代码编辑器(支持 代码补全/自动缩进)
编译器/解释器
调试器(断点/单步执行)
……
2)PyCharm 介绍
PyCharm 是 Python 的一款非常优秀的集成开发环境
PyCharm 除了具有一般 IDE 所必备功能外,还可以在 Windows、Linux、macOS 下使用
PyCharm 适合开发大型项目
一个项目通常会包含 很多源文件
每个 源文件 的代码行数是有限的,通常在几百行之内
每个 源文件 各司其职,共同完成复杂的业务功能
3)PyCharm 快速体验
文件导航区域 能够 浏览/定位/打开 项目文件
文件编辑区域 能够 编辑 当前打开的文件
控制台区域 能够:
输出程序执行内容
跟踪调试代码的执行
右上角的 工具栏 能够 执行(SHIFT + F10) / 调试(SHIFT + F9) 代码
通过控制台上方的单步执行按钮(F8),可以单步执行代码
PyCharm 的初始设置(知道)
目标
恢复 PyCharm 的初始设置
第一次启动 PyCharm
新建一个 Python 项目
设置 PyCharm 的字体显示
PyCharm 的升级以及其他
PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/
重新启动 PyCharm
02. 第一次启动 PyCharm
导入配置信息
选择许可协议
配置初始界面
2.1 导入配置信息
在第一次启动 PyCharm 时,会首先提示用户是否导入 之前的配置信息
如果是第一次使用,直接点击 OK 按钮
2.2 选择许可协议
PyCharm 是一个付费软件,购买费用为 199$ / 年 或者 19.90$ / 月
不过 PyCharm 提供了对 学生和教师免费使用的版本
下载地址是:https://www.jetbrains.com/pycharm-edu/download/#section=linux
商业版本会提示输入注册信息,或者选择免费评估
2.3 PyCharm 的配置初始界面
在初始配置界面,可以通过 Editor colors and fonts 选择 编辑器的配色方案
2.4 欢迎界面
所有基础配置工作结束之后,就可以看到 PyCharm 的 欢迎界面了,通过 欢迎界面 就可以开始开发 Python 项目了
设置项目使用的解释器版本
打开的目录如果不是由 PyCharm 建立的项目目录,有的时候 使用的解释器版本是 Python 2.x 的,需要单独设置解释器的版本
通过 File / Settings… 可以打开设置窗口,如下图所示:
3.3 新建项目
设置 PyCharm 的字体显示
PyCharm 的升级以及其他
PyCharm 提供了对 学生和教师免费使用的版本
教育版下载地址:https://www.jetbrains.com/pycharm-edu/download/#section=linux
专业版下载地址:https://www.jetbrains.com/pycharm/download/#section=linux
5.1 安装和启动步骤
执行以下终端命令,解压缩下载后的安装包
$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
将解压缩后的目录移动到 /opt 目录下,可以方便其他用户使用
/opt 目录用户存放给主机额外安装的软件
$ sudo mv pycharm-2017.1.3/ /opt/
切换工作目录
$ cd /opt/pycharm-2017.1.3/bin
启动 PyCharm
$ ./pycharm.sh
5.2 设置专业版启动图标
在专业版中,选择菜单 Tools / Create Desktop Entry… 可以设置任务栏启动图标
注意:设置图标时,需要勾选 Create the entry for all users
5.3 卸载之前版本的 PyCharm
删除家目录下用于保存配置信息的隐藏目录
$ rm -r ~/.PyCharm2016.3/
如果不再使用 PyCharm 还需要将 /usr/share/applications/ 下的 jetbrains-pycharm.desktop 删掉
5.4 教育版安装演练
$ tar -zxvf pycharm-edu-3.5.1.tar.gz
/opt
目录下,可以方便其他用户使用$ sudo mv pycharm-edu-3.5.1/ /opt/
PyCharm
/opt/pycharm-edu-3.5.1/bin/pycharm.sh
后续课程都使用专业版本演练
设置启动图标
编辑快捷方式文件
$ sudo gedit /usr/share/applications/jetbrains-pycharm.desktop
按照以下内容修改文件内容,需要注意指定正确的 pycharm 目录
[Desktop Entry]
Version=1.0
Type=Application
Name=PyCharm
Icon=/opt/pycharm-edu-3.5.1/bin/pycharm.png
Exec="/opt/pycharm-edu-3.5.1/bin/pycharm.sh" %f
Comment=The Drive to Develop
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-pycharm
多文件项目的演练
开发 项目 就是开发一个 专门解决一个复杂业务功能的软件
通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件
一个项目通常会包含 很多源文件
目标
在项目中添加多个文件,并且设置文件的执行
多文件项目演练
在 01_Python基础 项目中新建一个 hm_02_第2个Python程序.py
在 hm_02_第2个Python程序.py 文件中添加一句 print(“hello”)
点击右键执行 hm_02_第2个Python程序.py
提示
在 PyCharm 中,要想让哪一个 Python 程序能够执行,必须首先通过 鼠标右键的方式执行 一下
对于初学者而言,在一个项目中设置多个程序可以执行,是非常方便的,可以方便对不同知识点的练习和测试
对于商业项目而言,通常在一个项目中,只有一个 可以直接执行的 Python 源程序
注释
目标
注释的作用
单行注释(行注释)
多行注释(块注释)
注释的作用
使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性
单行注释(行注释)
以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用
示例代码如下:
print(“hello python”)
为了保证代码的可读性,# 后面建议先添加一个空格,然后再编写相应的说明文字
在代码后面增加的单行注释
在程序开发时,同样可以使用 # 在代码的后面(旁边)增加说明性的文字
但是,需要注意的是,为了保证代码的可读性,注释和代码之间 至少要有 两个空格
示例代码如下:
print(“hello python”) # 输出 hello python
在多行注释之间,可以写很多很多的内容……
“”"
print(“hello python”)
什么时候需要使用注释?
注释不是越多越好,对于一目了然的代码,不需要添加注释
对于 复杂的操作,应该在操作开始前写上若干行注释
对于 不是一目了然的代码,应在其行尾添加注释(为了提高可读性,注释应该至少离开代码 2 个空格)
绝不要描述代码,假设阅读代码的人比你更懂 Python,他只是不知道你的代码要做什么
在一些正规的开发团队,通常会有 代码审核 的惯例,就是一个团队中彼此阅读对方的代码
关于代码规范
Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档
其中第 8 篇文档专门针对 Python 的代码格式 给出了建议,也就是俗称的 PEP 8
文档地址:https://www.python.org/dev/peps/pep-0008/
谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
算数运算符
计算机,顾名思义就是负责进行 数学计算 并且 存储计算结果 的电子设备
目标
算术运算符的基本使用
思考题
计算机中哪一个硬件设备负责执行程序?
CPU
内存 的速度快还是 硬盘 的速度快?
内存
我们的程序是安装在内存中的,还是安装在硬盘中的?
硬盘
我买了一个内存条,有 500G 的空间!!!,这句话对吗?
不对,内存条通常只有 4G / 8G / 16G / 32G
计算机关机之后,内存中的数据都会消失,这句话对吗?
正确
02. 程序执行的原理
程序 运行之前,程序是 保存在硬盘 中的
当要运行一个程序时
操作系统会首先让 CPU 把程序复制到 内存 中
CPU 执行 内存 中的 程序代码
程序要执行,首先要被加载到内存
2.1 Python 程序执行原理
操作系统会首先让 CPU 把 Python 解释器 的程序复制到 内存 中
Python 解释器 根据语法规则,从上向下 让 CPU 翻译 Python 程序中的代码
CPU 负责执行翻译完成的代码
Python 的解释器有多大?
执行以下终端命令可以查看 Python 解释器的大小
$ which python
$ ls -lh /usr/bin/python
$ ls -lh /usr/bin/python2.7
提示:建立 软链接 的目的,是为了方便使用者不用记住使用的解释器是 哪一个具体版本
03. 程序的作用
程序就是 用来处理数据 的!
新闻软件 提供的 新闻内容、评论…… 是数据
电商软件 提供的 商品信息、配送信息…… 是数据
运动类软件 提供的 运动数据…… 是数据
地图类软件 提供的 地图信息、定位信息、车辆信息…… 是数据
即时通讯软件 提供的 聊天信息、好友信息…… 是数据
……
3.1 思考 QQ 程序的启动过程
QQ 在运行之前,是保存在 硬盘 中的
运行之后,QQ 程序就会被加载到 内存 中了
3.2 思考 QQ 程序的 登录 过程
读取用户输入的 QQ 号码
读取用户输入的 QQ 密码
将 QQ 号码 和 QQ 密码 发送给腾讯的服务器,等待服务器确认用户信息
思考 1
在 QQ 这个程序将 QQ 号码 和 QQ 密码 发送给服务器之前,是否需要先存储一下 QQ 号码 和 密码?
答案
肯定需要!—— 否则 QQ 这个程序就不知道把什么内容发送给服务器了!
思考 2
QQ 这个程序把 QQ 号码 和 QQ 密码 保存在哪里?
答案
保存在 内存 中,因为 QQ 程序自己就在内存中
思考 3
QQ 这个程序是怎么保存用户的 QQ 号码 和 QQ 密码 的?
答案
在内存中为 QQ 号码 和 QQ 密码 各自分配一块空间
在 QQ 程序结束之前,这两块空间是由 QQ 程序负责管理的,其他任何程序都不允许使用
在 QQ 自己使用完成之前,这两块空间始终都只负责保存 QQ 号码 和 QQ 密码
使用一个 别名 标记 QQ 号码 和 QQ 密码 在内存中的位置
在程序内部,为 QQ 号码 和 QQ 密码 在内存中分配的空间就叫做 变量
程序就是用来处理数据的,而变量就是用来存储数据的
变量的基本使用
程序就是用来处理数据的,而变量就是用来存储数据的
目标
变量定义
变量的类型
变量的命名
变量定义之后,后续就可以直接使用了
In [1]: qq_number = “1234567”
In [2]: qq_number
Out[2]: ‘1234567’
In [3]: qq_password = “123”
In [4]: qq_password
Out[4]: ‘123’
使用交互式方式,如果要查看变量内容,直接输入变量名即可,不需要使用 print 函数
2) 变量演练 2 —— PyCharm
qq_number = “1234567”
qq_password = “123”
print(qq_number)
print(qq_password)
使用解释器执行,如果要输出变量的内容,必须要要使用 print 函数
3) 变量演练 3 —— 超市买苹果
可以用 其他变量的计算结果 来定义变量
变量定义之后,后续就可以直接使用了
需求
苹果的价格是 8.5 元/斤
买了 7.5 斤 苹果
计算付款金额
price = 8.5
weight = 7.5
money = price * weight
print(money)
思考题
如果 只要买苹果,就返 5 块钱
请重新计算购买金额
price = 8.5
weight = 7.5
money = price * weight
money = money - 5
print(money)
提问
上述代码中,一共定义有几个变量?
三个:price/weight/money
money = money - 5 是在定义新的变量还是在使用变量?
直接使用之前已经定义的变量
变量名 只有在 第一次出现 才是 定义变量
变量名 再次出现,不是定义变量,而是直接使用之前定义过的变量
在程序开发中,可以修改之前定义变量中保存的值吗?
可以
变量中存储的值,就是可以 变 的
02. 变量的类型
在内存中创建一个变量,会包括:
变量的名称
变量保存的数据
变量存储数据的类型
变量的地址(标示)
2.1 变量类型的演练 —— 个人信息
需求
定义变量保存小明的个人信息
姓名:小明
年龄:18 岁
性别:是男生
身高:1.75 米
体重:75.0 公斤
利用 单步调试 确认变量中保存数据的类型
提问
在演练中,一共有几种数据类型?
4 种
str —— 字符串
bool —— 布尔(真假)
int —— 整数
float —— 浮点数(小数)
在 Python 中定义变量时需要指定类型吗?
不需要
Python 可以根据 = 等号右侧的值,自动推导出变量中存储数据的类型
2.2 变量的类型
在 Python 中定义变量是 不需要指定类型(在其他很多高级语言中都需要)
数据类型可以分为 数字型 和 非数字型
数字型
整型 (int)
浮点型(float)
布尔型(bool)
真 True 非 0 数 —— 非零即真
假 False 0
复数型 (complex)
主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题
非数字型
字符串
列表
元组
字典
提示:在 Python 2.x 中,整数 根据保存数值的长度还分为:
int(整数)
long(长整数)
使用 type 函数可以查看一个变量的类型
In [1]: type(name)
2.3 不同类型变量之间的计算
In [2]: last_name = “张”
In [3]: first_name + last_name
Out[3]: ‘三张’
字符串变量 可以和 整数 使用 * 重复拼接相同的字符串
In [1]: “-” * 50
Out[1]: ‘--------------------------------------------------’
数字型变量 和 字符串 之间 不能进行其他计算
In [1]: first_name = “zhang”
In [2]: x = 10
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
类型错误:+
不支持的操作类型:int
和 str
2.4 变量的输入
所谓 输入,就是 用代码 获取 用户通过 键盘 输入的信息
例如:去银行取钱,在 ATM 上输入密码
在 Python 中,如果要获取用户在 键盘 上的输入信息,需要使用到 input 函数
关于函数
一个 提前准备好的功能(别人或者自己写的代码),可以直接使用,而 不用关心内部的细节
目前已经学习过的函数
函数 说明
print(x) 将 x 输出到控制台
type(x) 查看 x 的变量类型
input 函数实现键盘输入
在 Python 中可以使用 input 函数从键盘等待用户的输入
用户输入的 任何内容 Python 都认为是一个 字符串
语法如下:
字符串变量 = input(“提示信息:”)
类型转换函数
函数 说明
int(x) 将 x 转换为一个整数
float(x) 将 x 转换到一个浮点数
变量输入演练 —— 超市买苹果增强版
需求
收银员输入 苹果的价格,单位:元/斤
收银员输入 用户购买苹果的重量,单位:斤
计算并且 输出 付款金额
演练方式 1
price_str = input(“请输入苹果价格:”)
weight_str = input(“请输入苹果重量:”)
price = float(price_str)
weight = float(weight_str)
money = price * weight
print(money)
提问
演练中,针对 价格 定义了几个变量?
两个
price_str 记录用户输入的价格字符串
price 记录转换后的价格数值
思考 —— 如果开发中,需要用户通过控制台 输入 很多个 数字,针对每一个数字都要定义两个变量,方便吗?
演练方式 2 —— 买苹果改进版
定义 一个 浮点变量 接收用户输入的同时,就使用 float 函数进行转换
price = float(input(“请输入价格:”))
改进后的好处:
节约空间,只需要为一个变量分配空间
起名字方便,不需要为中间变量起名字
改进后的“缺点”:
初学者需要知道,两个函数能够嵌套使用,稍微有一些难度
提示
如果输入的不是一个数字,程序执行时会出错,有关数据转换的高级话题,后续会讲!
2.5 变量的格式化输出
苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元
在 Python 中可以使用 print 函数将信息输出到控制台
如果希望输出文字信息的同时,一起输出 数据,就需要使用到 格式化操作符
% 被称为 格式化操作符,专门用于处理字符串中的格式
包含 % 的字符串,被称为 格式化字符串
% 和不同的 字符 连用,不同类型的数据 需要使用 不同的格式化字符
格式化字符 含义
%s 字符串
%d 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全
%f 浮点数,%.2f 表示小数点后只显示两位
%% 输出 %
语法格式如下:
print(“格式化字符串” % 变量1)
print(“格式化字符串” % (变量1, 变量2…))
格式化输出演练 —— 基本练习
需求
定义字符串变量 name,输出 我的名字叫 小明,请多多关照!
定义整数变量 student_no,输出 我的学号是 000001
定义小数 price、weight、money,输出 苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元
定义一个小数 scale,输出 数据比例是 10.00%
print(“我的名字叫 %s,请多多关照!” % name)
print(“我的学号是 %06d” % student_no)
print(“苹果单价 %.02f 元/斤,购买 %.02f 斤,需要支付 %.02f 元” % (price, weight, money))
print(“数据比例是 %.02f%%” % (scale * 100))
课后练习 —— 个人名片
需求
在控制台依次提示用户输入:姓名、公司、职位、电话、邮箱
按照以下格式输出:
公司名称
姓名 (职位)
电话:电话
邮箱:邮箱
实现代码如下:
“”"
在控制台依次提示用户输入:姓名、公司、职位、电话、电子邮箱
“”"
name = input(“请输入姓名:”)
company = input(“请输入公司:”)
title = input(“请输入职位:”)
phone = input(“请输入电话:”)
email = input(“请输入邮箱:”)
print("" * 50)
print(company)
print()
print("%s (%s)" % (name, title))
print()
print(“电话:%s” % phone)
print(“邮箱:%s” % email)
print("" * 50)