大爽Python入门教程 1-2 数与字符串
大爽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的浮点数有两种形式
- 十进制形式
也就是我们平时所看到的小数形式,比如
3.14
, 2.0
, 0.3333333333333333
等
- 指数形式
也就是科学计数法的形式。
其写法为aen
或者aEn
, 对应的效果都是\(a \times 10^n\), n一般会带正负号。
- a为科学计数法的有效数(或尾数),
- n是科学计数法的指数部分,
e
或E
表示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入门教程 1-2 数与字符串的更多相关文章
- 大爽Python入门教程 3-1 布尔值: True, False
大爽Python入门公开课教案 点击查看教程总目录 1 布尔值介绍 从判断说起 回顾第一章介绍的简单的判断 >>> x = 10 >>> if x > 5: ...
- 大爽Python入门教程 1-4 习题
大爽Python入门公开课教案 点击查看教程总目录 1 [思考]方向变换 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (360度为一圈,圈数向 ...
- 大爽Python入门教程 1-1 简单的数学运算
大爽Python入门公开课教案 点击查看教程总目录 1 使用pycharm建立我们的第一个项目 打开pycharm,点击菜单栏,File->New Project 在Location(项目地址) ...
- 大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...
- 大爽Python入门教程 3-4 实践例题
大爽Python入门公开课教案 点击查看教程总目录 1. 求和 使用循环,计算列表所有项的和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, 11 ...
- 大爽Python入门教程 3-5 习题
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...
- 大爽Python入门教程 3-6 答案
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...
- 大爽Python入门教程 2-5 *拓展实践,对比与思考
大爽Python入门公开课教案 点击查看教程总目录 本文偏难. 推荐等第一二三四章上完后,回过来拓展阅读. 基础情景思考 假设有这样一张成绩表 最左边的一列是名字,起名麻烦. 这里直接用ABC...来 ...
- 大爽Python入门教程 3-2 条件判断: if...elif..else
大爽Python入门公开课教案 点击查看教程总目录 简单回顾if 回顾下第一章的代码 >>> x = 5 >>> if x > 0: ... print(&q ...
随机推荐
- 前端从web服务器或者CDN下载资源
前段时间听到前端同学说前端拿到资源的CDN链接后可以直接从CDN下载资源,不需要经过后端,感觉很神奇,但是一致不明白是怎么实现的,前两天整理了下关于CDN和对象存储的知识,今天搜了下前端直接下载资源的 ...
- dg create datafile auto failed 排除处理
1.Environment:11.2.0.4 dg 2.Symptoms:告警描述:Wed Sep 22 14:29:15 2021Errors in file /data/app/oracle/di ...
- C++核心编程 4 类和对象-对象的初始化和清理
构造函数和析构函数 对象的初始化和清理工作是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用结果是未知的,同样,使用完一个对象或变量,没有及时清理,也会造成一定的安全问题.C++利用了构 ...
- 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...
- Java基础之(九):循环结构
循环结构 前面我们已经聊过了if语句,接下来我们就聊聊跟选择语句一样常用的语句:循环语句. 同样的,所有的循环语句都可以写成for语句 while循环 while循环的格式: while(布尔表达式) ...
- Java(36)IO流案例与总结
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228455.html 博客主页:https://www.cnblogs.com/testero ...
- jenkins的安装、配置使用
1.jenkins的使用 (1).需要先下载安装JDK 配置jdk的环境 变量JAVA_HOME的值是 jdk 的安装位置, 然后下载安装tomcat 安装好了之后,打开tomcat下的bin文件夹, ...
- 【UE4】GAMES101 图形学作业5:光线与物体相交(球、三角面)
总览 在这部分的课程中,我们将专注于使用光线追踪来渲染图像.在光线追踪中最重要的操作之一就是找到光线与物体的交点.一旦找到光线与物体的交点,就可以执行着色并返回像素颜色. 在这次作业中,我们要实现两个 ...
- 注解,@Qualifier+@Autowired 和 @Resource
摘要: 项目中,对于AOP的使用,就是通过用注解来注入的. 更改之前的注解,是使用:@Qualifier+@Autowired 但是,通过这样注解,在项目启动阶段,需要自动扫描的过程是非常缓慢的, ...
- Ruby on Rails 单元测试
Ruby on Rails 单元测试 为什么要写测试文件? 软件开发中,一个重要的环节就是编写测试文件,对代码进行单元测试,确保程序各部分功能执行正确.但是,这一环节很容易被我们轻视,认为进行单元测试 ...