零基础入门学习Python(15)--格式化
前言
上节课我们介绍了字符串N多种奇葩方法的用法,但是我们唯独漏掉了format方法,那为何不把format方法和上节课的内容一起讲呢?
因为小甲鱼觉得format方法,跟今天的主题是如出一辙的,都是讨论字符串的格式问题。哎呀,那有些朋友听到格式化就来劲了,那格式化跟我们的硬盘格式化有关系吗?
没有关系的。
那什么是字符串的格式化呢?又为什么需要对字符串进行格式化呢?
我们举个小例子,给大家讲一下:
某天小甲鱼召开了鱼c国际安全大会,到会的朋友有来自世界各方各地的精英人士,
有这个小乌龟啦,有喵星人啦,有汪星人啦,当然还有这个米奇和唐老鸭,哇塞,那气势
简直就像小甲鱼开了个动物园一样,但是呢,那问题来了,那真是鸡同鸭讲,驴唇不对马嘴,
不知所云,但是呢,小甲鱼还是聪明,想办法把问题解决了,什么办法呢?
小甲鱼在各界找一个翻译,翻译成普通话之后,再开会,最后呢,大会完美举行成功。
举这个例子,是想跟大家说,格式化字符串,就是按照统一的规格去输出,成为一个字符串。如果规格不统一,就可能会造成误会。
例如说,十六进制的10,十进制的10 ,二进制的10完全就是不同的概念,
十六进制的10 对于 10进制是等于16
十进制的10 对于 10进制等于10
二进制的10 对于 10进制等于2
所以他们是完全不同概念。字符串格式化就是帮助我们纠正规范这类可能出现的问题。
知识点
format 方法,有两个参数,分别是 位置参数,关键字参数
位置参数:
>>> "{0} love {1}.{2}".format("I","FishC","com")
'I love FishC.com'
字段0,字段1,字段2,分别用'{}'括起来,表示'字段',
它通过位置参数"I","FishC","com"传递给我们的format方法,
然后再用format方法对字符串进行格式化处理,得到了我们最终的目标:'I love FishC.com'
关键字参数
>>> "{a} love {b}.{c}".format("I","FishC","com")
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
"{a} love {b}.{c}".format("I","FishC","com")
KeyError: 'a'
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
'I love FishC.com'
位置参数与关键字参数一起使用
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
'I love FishC.com'
>>> "{0} love {b}.{c}".format("I",b="FishC",c="com")
'I love FishC.com'
【注意】同时使用时,
必须位置参数在前,关键字参数在后,否则会报错:
>>> "{a} love {b}.{0}".format(a="I",b="FishC","com")
SyntaxError: positional argument follows keyword argument
如果想把{}打印出来,有没有办法呢?
>>> "{{0}}".format("不打印")
'{0}'
>>>
看如下例子:
>>> '{0:.1f}{1}'.format(27.658,'GB')
'27.7GB'
为什么不是打印27.658GB,而是27.7GB呢?
位置参数跟以前的不一样,化了点小妆,
后边多了一个冒号,在替换域中,
冒号:表示格式化符号的开始,后边接的就是格式化符号。
下面开始讲字符串格式化符号含义及转义字符含义
字符串格式化符号含义
| 符号 | 说明 | 示例 |
|---|---|---|
| %c | 格式化字符及其ASCII码 | >>> '%c' % 97'a'>>> '%c %c %c' % (97,98,99)'a b c'>>> '%c,%c,%c' % (97,98,99)'a,b,c' |
| %s | 格式化字符串 | >>> '%s' % 'I love FishC.com''I love FishC.com' |
| %d | 格式化整数 | >>> '%d + %d = %d' % (4,5,4+5)'4 + 5 = 9' |
| %o | 格式化无符号八进制数 | >>> '%o' % 10'12' |
| %x | 格式化无符号十六进制数 | >>> '%x' % 10'a' |
| %X | 格式化无符号十六进制数 | >>> '%X' % 10'A' |
| %f | 格式化定点数,可指定小数点后的精度,默认6位小数 | >>> '%f' % 27.658'27.658000' |
| %e | 用科学计数法格式化定点数 | >>> '%e' % 27.658'2.765800e+01' |
| %E | 作用同%e,用科学计数法格式化定点数 | >>> '%E' % 27.658'2.765800E+01' |
| %g | 根据值得大小决定使用%f或%e | >>> '%g' % 27.658'27.658'>>> '%g' % 271111111111.6581111111111'2.71111e+11 |
| %G | 作用同%g,根据值得大小决定使用%F或%E | >>> '%G' % 27.658'27.658'>>> '%G' % 271111111111.6581111111111'2.71111E+11 |
格式化操作符辅助指定
| 符号 | 说明 | 示例 |
|---|---|---|
| m.n | m显示最小总宽度,n是小数点后的位数 | >>> '%5.1f' % 27.658' 27.7'>>> '%.2e' % 27.658'2.77e+01'>>> '%10d' % 5' 5'有9个空格在5前面 |
| - | 用于左对齐 | >>> '%-10d' % 5'5 '有9个空格在5后面 |
| + | 在正数前面显示加号(+) | >>> '%+d' % 5'+5'>>> '%+d' % -5'-5' |
| # | 在八进制数前面显示零0o,在十六进制前面显示0x或0X |
>>> '%#o' % 10'0o12'>>> '%#X' % 109'0X6D'>>> '%#d' % 10'10' |
| 0 | 显示的数字前面填充0取代空格 |
>>> '%010d' % 5'0000000005'>>> '%0-10d' % 5'5 '有9个空格在5后面>>> '%0+10d' % -5'-000000005' |
字符串转义字符含义
| 符号 | 说明 | 示例 |
|---|---|---|
| \’ | 单引号 | >>> print('\'')' |
| \” | 双引号 | >>> print('\"')" |
| \a | 发出系统响铃声 | >>> print('\a') |
| \b | 退格符 | >>> print('1\bf')1f |
| \n | 换行符 | >>> print('1\nf')1f |
| \t | 横向指标符(TAB) | >>> print('1\tf')1 f |
| \v | 纵向制表符 | >>> print('1\vf')1f |
| \r | 回车符 | >>> print('1\rf')1f |
| \f | 换页符 | >>> print('1\f111111')1111111 |
| \o | 八进制代表的字符 | >>> print('\o1111')\o1111 |
| \x | 十六进制代表的字符 | >>> print('\x1111')11 |
| \0 | 表示一个空字符 | >>> print('\01234')34 |
| \ | 反斜杠 | >>> print('\\')\ |
课后习题
测试题
请问以下代码会打印什么内容?
>>> "{{1}}".format("不打印","打印")
运行结果:
'{1}'
如果想要显示Pi=3.14,format前边的字符串应该怎么填写?
''.format('Pi = ', 3.1415)
>>> '{0}{1:.2f}'.format('pi= ',3.1415)
'pi= 3.14'
动动手
编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF)
q = True
while q:
temp = input('请输入一个整数(输入Q结束程序):')
if temp != 'Q':
if temp.isdigit():
i = int(temp)
print('十进制 -> 十六进制:',i,'->','%#x' % i)
print('十进制 -> 八进制:',i,'->','%#o' % i)
print('十进制 -> 二进制:',i,'->',bin(i))
else:
print("抱歉,",end=" ")
else:
q = False
================== RESTART: C:/Users/ThinkPad/Desktop/6.py ==================
请输入一个整数(输入Q结束程序):108
十进制 -> 十六进制: 108 -> 0x6c
十进制 -> 八进制: 108 -> 0o154
十进制 -> 二进制: 108 -> 0b1101100
请输入一个整数(输入Q结束程序):F
抱歉, 请输入一个整数(输入Q结束程序):FS
抱歉, 请输入一个整数(输入Q结束程序):109
十进制 -> 十六进制: 109 -> 0x6d
十进制 -> 八进制: 109 -> 0o155
十进制 -> 二进制: 109 -> 0b1101101
请输入一个整数(输入Q结束程序):Q
零基础入门学习Python(15)--格式化的更多相关文章
- 【Python教程】《零基础入门学习Python》(小甲鱼)
[Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 零基础入门学习Python(36)--类和对象:给大家介绍对象
知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...
- 零基础入门学习Python(17)--函数:Python的乐高积木
前言 相信大家小时候都玩过神奇的乐高积木, 只要通过想象力和创造力我们可以拼凑很多神奇的东西,那么随着我们学习的深入,我们编写的Python代码也将日益增加,并且也越来越复杂, 所以呢,我们需要找寻一 ...
- 零基础入门学习Python(35)--图形用户界面入门:EasyGui
知识点 EasyGui学习文档[超详细中文版] 1. 建议不要在IDLE上运行EasyGui EasyGui是运行在TKinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并 ...
- 零基础入门学习Python(14)--字符串:各种奇葩的内置方法
前言 这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦.由于字 ...
随机推荐
- 【原创】MapReduce备份Elasticsearch数据到HDFS(JAVA)
一.环境:JAVA8,Elasticsearch-5.6.2,Hadoop-2.8.1二.实现功能:mapreduce读elasticsearch数据.输出parquet文件.多输出路径三.主要依赖 ...
- bzoj 2303: [Apio2011]方格染色【并查集】
画图可知,每一行的状态转移到下一行只有两种:奇数列不变,偶数列^1:偶数列不变,奇数列^1 所以同一行相邻的变革染色格子要放到同一个并查集里,表示这个联通块里的列是联动的 最后统计下联通块数(不包括第 ...
- C# Web页面打印网页
<style media=print type="text/css"> .noprint{display:none} </style> 在打印时 ...
- 《windows核心编程系列》二十一谈谈基址重定位和模块绑定
每个DLL和可执行文件都有一个首选基地址.它表示该模块被映射到进程地址空间时最佳的内存地址.在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000.对于DLL来说,链接器会将它的首 ...
- 51nod 1100 斜率最大
可以用三个点简单证明斜率最大的直线两个点! #include <bits/stdc++.h> #define MAXN 10010 using namespace std; struct ...
- 洛谷 P2062 分队问题
这题太毒了....一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来.. 好像有一点被错误的题解误导了? #include<cstdio> #include<algo ...
- ACM_查找ACM(加强版)
查找ACM(加强版) Time Limit: 2000/1000ms (Java/Others) Problem Description: 作为一个acmer,应该具备团队合作能力和分析问题能力.给你 ...
- SpringCloud开发学习总结(五)—— 服务容错保护Hystrix
在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式相互依赖.但由于每个单元都在不同的进程中运行,一来通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身 ...
- [转]Oracle - 数据库的实例、表空间、用户、表之间关系
本文转自:http://www.cnblogs.com/adforce/p/3312252.html 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物 ...
- LN : leetcode 343 Integer Break
lc 343 Integer Break 343 Integer Break Given a positive integer n, break it into the sum of at least ...