大爽Python入门公开课教案

点击查看教程总目录

1 整数与浮点数

整数大家都知道,比如1, 2, 10, 123, 都是整数int

浮点数是什么呢?

上一节的除法运算,不知道有没有人注意到,其结果的样子和整数是不同的。

>>> 8/7
1.1428571428571428

上面输出的小数就是浮点数float

在python里,浮点数就是小数。

辨别方法就是小数点。

同时

  • /除法运算的结果永远是浮点数
  • 浮点数和整数运算的结果永远是浮点数
>>> 10 / 5
2.0
>>> 2.0 * 10
20.0
>>> 2.0 + 5
7.0
>>> 2.0 // 2
1.0
>>> 5.0 // 3
2.0

其中结果虽然都可以写成整数形式,但是

却是带小数点的小数形式。

爱思考的朋友可能会想到,

从数学上来讲,所有的整数都可以写成小数形式,

对应到python里刚展示的,所有的整数都可以表示成浮点数。

以后是不是可以只用浮点数,不用整数。

并不是!

由于某种原因,计算机的浮点数是不精确的,所以能使用整数时最好使用整数。

python的浮点数有两种形式

  1. 十进制形式

也就是我们平时所看到的小数形式,比如

3.14, 2.0, 0.3333333333333333

  1. 指数形式

也就是科学计数法的形式。

其写法为aen或者aEn, 对应的效果都是\(a \times 10^n\), n一般会带正负号。

  • a为科学计数法的有效数(或尾数),
  • n是科学计数法的指数部分,
  • eE表示10的幂。

举例说明

  • 1.23e-28, 即\(1.23 \times 10^{-28}\)
  • 2.01e+19, 即\(2.01 \times 10^{19}\)

一般来讲,浮点数过长时会自动使用指数形式展示,比如

>>> 0.000000000000000000000000000123
1.23e-28
>>> 2010.0 * 100000000 * 100000000
2.01e+19

实际是浮点数长度超过其本身精度限制时,会使用指数形式来展示。

只要写成指数形式,就都是浮点数。

2 字符串

除了整数和浮点数,python还能直接操作字符串string

字符串可以用单引号'...'或双引号"..."来表示(两种表现形式意义相同),

引号里面就是字符串的内容。

注意: 单引号或双引号必须是英文输入法下的。

字符串示例

  • "a"
  • "abc"
  • "hello"

字符串之间可以做加法(拼接),

也可以和整数做乘法。

>>> "hello " + "lihua"
'hello lihua'
>>> "a" + "b" + "c"
'abc'
>>> "a" * 10
'aaaaaaaaaa'
>>> "hello"*3
'hellohellohello'

补充: 字符串不能做除法和减法。

3 计算与转换

type

想要知道一个变量的类型,我们可以使用函数type

示例如下

>>> type(123)
<class 'int'>
>>> type(0.1)
<class 'float'>
>>> type("abc")
<class 'str'>
>>> type("123")
<class 'str'>

注意,被引号括起来的"123"是字符串,不是整数。

计算

  • 整数和浮点数可以直接计算,计算的结果永远是浮点数。
  • 字符串之间可以做加法,效果是拼接。
  • 字符串除了和整数做乘法外,不能和数直接计算(会报错)。

举例如下

>>> 3.14 * 100
314.0
>>> 123 + 345
468
>>> "123" + "345"
'123345'
>>> "123" + 345
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
"123" + 345
TypeError: can only concatenate str (not "int") to str
  • 两个内容为数字的字符串做加法,其效果为拼接。
  • 字符串和数字相加会报错,

    TypeError: can only concatenate str (not "int") to str,

    该报错翻译(直接使用的百度翻译)为:

    类型错误,只能将str(而不是int)连接到str

转换

如果我们要进行计算的话,首先要进行类型转换。

把数转换成字符串可以使用str(n)方法。

把字符串转换成数,需要进行强制转换,无法转换就会报错,方法如下。

  • int(s): 将s强制转换成整数int
  • float(s): 将s强制转换成浮点数float

举例:

>>> str(123)  # 把整数123转换为字符串"123"
'123'
>>> "123" + str(123)
'123123'
>>> str(3.14) # 把浮点数3.14转换为字符串"3.14"
'3.14'
>>> "1 + 2 = " + str(3)
'1 + 2 = 3'
>>> 123 + int("123")
246
>>> 123 + float("123")
246.0

4 情景思考

简单场景

首先,我们思考一个场景,

我们想展示简单的加法,

给x, y变量赋不同的值,

然后以x + y = z的形式展示输出。

输出示例:

1 + 2 = 3
2 + 2 = 4
3 + 4 = 7

直接反应

可能有的朋友,直接想到的是

print("1 + 2 = 3")
print("2 + 2 = 4")
print("3 + 4 = 7")

这个写法不合适,

一是不符合题意(没有定义x, y进行变量赋值)。

二是不应该写死。(这个我们以后会进一步的展开)

简单优化

那么简单优化下,定义x, y进行变量赋值,代码如下

x = 1
y = 2
z = x + y
print("1 + 2 = " + str(z)) x = 2
y = 2
z = x + y
print("2 + 2 = " + str(z)) x = 3
y = 4
z = x + y
print("3 + 4 = " + str(z))

这个时候在print里面,仍然有写死的问题。

写死的代码,存在不能通用的问题,变量每次变化都要手动改动。

再次优化

那么再次优化下,解决下写死的问题

x = 1
y = 2
z = x + y
s = str(x) + " + " + str(y) + " = " + str(z)
print(s) x = 2
y = 2
z = x + y
s = str(x) + " + " + str(y) + " = " + str(z)
print(s) x = 3
y = 4
z = x + y
s = str(x) + " + " + str(y) + " = " + str(z)
print(s)

也就是使用了强制转换加字符串拼接,把数据变量插入到字符串中。

其优点是:无论以后变量的值怎么变,print里面的s都不用在做修改。

5 占位符

介绍

虽然上面使用强制转换加字符串拼接,解决了把数据变量插入到字符串中的问题。

但是其代码可读性比较差,写起来也很麻烦。

其实,python为我们提供了一种更方便的技术,

帮助我们更灵活高效方便的,把变量的值插入到字符串中。

那就是占位符

占位符,简单解释,就是在字符串中帮变量占住位置的特殊符号。

就像大学时,经常有人帮同学占座位,一般是用个东西放在那个座位上,表示这个地方有人占了,

然后等正主来了,收起东西,让正主坐下。

占位符的工作原理就是这样。

python里面有三种占位符表示方法

  • %
  • format
  • f表达式

这里只给大家简单的介绍下这三种写法。

前两种的写法格式如下

string operator variables

  • string: 含占位符的字串
  • operator: 特殊的操作符,可以理解为该操作符告诉字符串,正主来了
  • variables: 定义的变量名,正主

注意:正主来了才能进行字符串替换,正主没来原样展示string

%

占位符简单写法为%s,然后其操作符为%

只有一个变量的话,就直接放在操作符后面,

多个变量,就用小括号一起括起来,再放在操作符后面。

举例

>>> x = 3
>>> y = 4
>>> z = x + y
>>> "%s"
'%s'
>>> "%s" % x
'3'
>>> "%s" % z
'7'
>>> "%s + %s" % (x, y)
'3 + 4'
>>> "%s + %s = %s" % (x, y, z)
'3 + 4 = 7'

format

占位符简单写法为{}

然后其操作符为.format()

变量都放到format的括号里面。

举例

>>> x = 3
>>> y = 4
>>> z = x + y
>>> "{}"
'{}'
>>> "{}".format(z)
'7'
>>> "{} + {} = {}".format(x, y, z)
'3 + 4 = 7'

f表达式

这个是Python 3.6开始的一个新功能,

其简单格式为f'...{var}...'

注意: 此时var必须填写(不然会报错)。

举例

>>> x = 3
>>> y = 4
>>> z = x + y
>>> f'{}'
SyntaxError: f-string: empty expression not allowed
>>> f'{z}'
'7'
>>> f"{x} + {y} = {z}"
'3 + 4 = 7'

补充

占位符不仅可以给数据变量用,还可以给其他类型变量用,比如也可以做字符串的拼接。

>>> name = "lihua"
>>> age = 18
>>> "I am %s, %s years old." % (name, age)
'I am lihua, 18 years old.'
>>> "I am {}, {} years old.".format(name, age)
'I am lihua, 18 years old.'
>>> f"I am {name}, {age} years old."
'I am lihua, 18 years old.'

本系列课程,主要会使用前两种占位符。

简单情况使用%,较麻烦的会使用format

参考与拓展: python 格式化输出详解(占位符:%、format、f表达式)——上篇 理论篇

大爽Python入门教程 1-2 数与字符串的更多相关文章

  1. 大爽Python入门教程 3-1 布尔值: True, False

    大爽Python入门公开课教案 点击查看教程总目录 1 布尔值介绍 从判断说起 回顾第一章介绍的简单的判断 >>> x = 10 >>> if x > 5: ...

  2. 大爽Python入门教程 1-4 习题

    大爽Python入门公开课教案 点击查看教程总目录 1 [思考]方向变换 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (360度为一圈,圈数向 ...

  3. 大爽Python入门教程 1-1 简单的数学运算

    大爽Python入门公开课教案 点击查看教程总目录 1 使用pycharm建立我们的第一个项目 打开pycharm,点击菜单栏,File->New Project 在Location(项目地址) ...

  4. 大爽Python入门教程 3-3 循环:`for`、`while`

    大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...

  5. 大爽Python入门教程 3-4 实践例题

    大爽Python入门公开课教案 点击查看教程总目录 1. 求和 使用循环,计算列表所有项的和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, 11 ...

  6. 大爽Python入门教程 3-5 习题

    大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...

  7. 大爽Python入门教程 3-6 答案

    大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...

  8. 大爽Python入门教程 2-5 *拓展实践,对比与思考

    大爽Python入门公开课教案 点击查看教程总目录 本文偏难. 推荐等第一二三四章上完后,回过来拓展阅读. 基础情景思考 假设有这样一张成绩表 最左边的一列是名字,起名麻烦. 这里直接用ABC...来 ...

  9. 大爽Python入门教程 3-2 条件判断: if...elif..else

    大爽Python入门公开课教案 点击查看教程总目录 简单回顾if 回顾下第一章的代码 >>> x = 5 >>> if x > 0: ... print(&q ...

随机推荐

  1. MFC修改窗口图标

    Visual Studio写MFC应用程序,默认的程序左上角图标是自带的(如下图),想要自己个性化定制一个新的图标则需要以下几个步骤. 一.准备工作(icon图标) 首先准备一个自己个性化定制的图片, ...

  2. disruptor笔记之六:常见场景

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. Matlab 速记

    链接:https://zhuanlan.zhihu.com/p/370259237 % 1.进度提醒 f = waitbar(0,'1','Name','进度'); set(f,'color','w' ...

  4. K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes

    1 什么是K8ssandra Cassandra是一款非常优秀的开源的分布式NoSQL数据库,被许多优秀的大公司采用,具有高可用.弹性扩展.性能好等特点. 正应Cassandra的优势,我们经常需要在 ...

  5. Vue插槽slot理解与初体验 ~

    一.插槽的理解 1.官网介绍 Vue 实现了一套内容分发的 API,将 <slot> 元素作为承载分发内容的出口. 2.为什么使用插槽 Vue 中有一个重要的概念-组件,可以在开发中将子组 ...

  6. Java基础- 重写,重构和重载

    重写也称为覆盖, 是指子类与父类的方法名相同但是可以有不同的权限(子类权限需大于父类),返回值(J2SE 5.0以后增加的功能,且子类的返回值必须是父类返回值的子类)或者方法实现. 重写体现了子类补充 ...

  7. diff算法深入一下?

    文章转自豆皮范儿-diff算法深入一下 一.前言 有同学问:能否详细说一下 diff 算法. 简单说:diff 算法是一种优化手段,将前后两个模块进行差异化比较,修补(更新)差异的过程叫做 patch ...

  8. Java RMI学习与解读(一)

    Java RMI学习与解读(一) 写在前面 本文记录在心情美丽的一个晚上. 嗯.就是心情很美丽. 那为什么晚上还要学习呢? emm... 卷... 卷起来. 全文基本都是根据su18师傅和其他师傅的文 ...

  9. 我的一些JAVA基础见解

    这个学期学习JAVA基础课,虽说之前都自学过,但在学习时仍可以思考一些模糊不清的问题,可以更深一步的思考.在这里写下一些需要深入的知识点,对小白们也很友好~ 一.Java数据类型 1.基本数据类型 这 ...

  10. Java并发:重入锁 ReentrantLock(二)

    一.理解锁的实现原理 1. 用wait()去实现一个lock方法,wait()要和synchronized同步关键字一起去使用的,直接使用wait方法会直接报IllegalMonitorStateEx ...