学习笔记(1)格式化输出打印,C、Python、MATLAB对比 超详细

一、C中格式化输出

1. 进制转换符号

进制转换符号
以上符号以%(引导符)开头,字母一般写在格式化转换说明的结尾,例如:%3.2f(这里的3.2后续会讲解)。

2. 转换修饰符

转换修饰符
在这里插入图片描述
笔者在吸取前辈的经验后,总结了一个方便记忆的表格:
在这里插入图片描述

#include <stdio.h>

void main(void)
{
	int a_int             = -12;
	unsigned int a_uint   = 12;
	float b_float         = 3.123456789;
	double b_double       = 3.1234567890123456789;
	long double b_ldouble = 3.1234567890123456789;
	unsigned char c       = 0xFF;

	printf("\n");
	printf(" a_int格式化结果:   %-10.5d\n", a_int);  //左对齐、10位宽、最小显示5位
	printf(" a_uint格式化结果:  %010u\n", a_uint);   //10位宽、0填充
	printf(" b_float格式化结果: %.10f\n", b_float);  //保留小数10位,有效小数位 7位
	printf(" b_double格式化结果:%.20f\n", b_double); //保留小数20位,有效小数位16位
	printf(" 0xFF格式化结果:    %#X\n", c);          //十六进制显示,加上0X前缀
	getchar();                                       //防止调试窗口一闪而过
}

运行结果:
在这里插入图片描述

3. 特殊情况

(1) Q:如果转换说明中的数据类型符号和传入的变量类型不同会如何?(见下方代码)
A:当类型不一致时并不会进行类型转换,而是直接传入,造成的结果就是打印的不是我们所传入的值。

(2) Q:如果前方有两个%,而后面只传入一个变量会如何?(见下方代码)
A:第二个%格式化,内存中传入变量后面存储的值,这个值是什么我们不得而知。

void main(void)
{
	unsigned char c_char = 'A';
	int a_int = 12;
	float b_float = 3.14;

	printf("\n");
	printf(" c_char格式化结果:  %d\n", c_char);   //A 对应的ASCII码值是65
	printf(" a_int格式化结果:   %f\n", a_int);    
	printf(" b_float格式化结果: %d,%f\n", b_float);  
	getchar();                                  //防止调试窗口一闪而过
}

运行结果:
在这里插入图片描述

二、Python中格式化输出

笔者有时候也需要用到Python,索性把Python中的格式化打印也整理一下。
Python中格式化打印有三种方法:%(最古老)、format(2.5版本)、f-string(3.6版本)。

1. %方法

在这里插入图片描述
% 方法与C语言中 printf 的格式化方法很像,而 format 方法和 f-string 方法更加易读,所以 % 方法笔者知道,但是很少使用。详细用法请参考大佬文章1,这里举个简单的例子:

a = 12
print("a格式化结果是:%d" % a)
s1 = "%s" % "Hello World!"
print(s1)
# s2 = "%d" % "Hello World!"  
# print(s2)     # 此时会报错,类型不匹配

运行结果:

在这里插入图片描述

2. format方法

该方法是一种高级的格式化方法,可以格式化的方法很多,同时还能搭配推导式一起使用。老样子,总结了一个方便记忆的表格:
{<参数序号或参数关键词>:<填充> <对齐> <正负号> <#> <位宽> <千分位符> <小数位> <类型>}
在这里插入图片描述
在这里插入图片描述
各种自定义格式打印输出笔者就不一一展示了,可参考网站文章1,里面列举了很多例子方便理解。

(1) <参数序号>详解

print("今天是: {}/{}/{}/{}".format("2024年", "6月", "8日", "星期六"))
print("今天是: {0}/{1}/{2}/{3}".format("2024年", "6月", "8日", "星期六"))
print("今天是: {3}/{2}/{1}/{0}".format("2024年", "6月", "8日", "星期六"))

运行结果:
在这里插入图片描述
第一种和第二种相同,说明默认参数序号从左到右,从0开始递增;当然也可以自定义参数序号。

(2) <参数关键词>详解

Python中 format 函数的定义:
在这里插入图片描述
format函数可接收位置参数(传入的参数放在名为args的元组里)和关键词参数(传入的参数放在名为kwargs字典中。
注:当我们传入一个字典时需要加上**符号,不可省略

date_list = {'year': '2024年', 'day': '6月7日'}
# 注意:print中的“**”不能省略
print("今天是: {year}/{day}".format(**date_list))

my_list = ['6月1日', '6月2日']
your_list = ['8月1日', '8月15日']
# 注意:print中的“0”和“1”不能省略;0、1分别表示第一个、第二个列表
print("儿童节是: {0[0]}, 中秋节是: {1[1]}".format(my_list, your_list))

运行结果:
在这里插入图片描述

3. f-string方法

f-string 格式化以 f 或者 F 开头,字符串中的大括号 { } 中可以填入变量、表达式等。举例说明如下:

string1 = "我的介绍如下: "
string2 = "我的家人有: "
info = {"name": "洛宇", "age": "10岁"}
family = ['爸爸', '妈妈']
print(f'{string1}姓名: {info["name"]}、年龄: f{info["age"]}。\n'
      f'{string2}{family[0]}{family[1]}。')

运行结果:
在这里插入图片描述

三、MATLAB格式化输出

在Matlab中实现输出的方法有:disp 函数、fprintf 函数、print 函数,如下:

:在Matlab帮助网页搜索框输入 “formatSpec” 字样,可以看到很详细的解释和使用方法。这里针对特殊的一点进行说明:
在这里插入图片描述
官方解释:
  标识符: 处理函数输入参量的顺序。使用语法 n$,其中 n 代表函数调用中其他输入参量的位置。
  示例: (‘%3$s %2$s %1$s %2$s’,‘A’,‘B’,‘C’) 将输入参量 ‘A’、‘B’、‘C’ 输出为:C B A B。
  注:如果输入参量为数组,则不能使用标识符指定该输入参量中的特定数组元素。

最后感谢前辈们经验,参考资料如下:
[1] 书籍:《C Primer Plus 第6版 中文版》
[2] 大佬文章1:Python字符串格式化
[3] 大佬文章2:python格式化字符串的三种方法
[4] 网站文章1
[5] Matlab帮助文档disp
[6] Matlab帮助文档fprintf
[7] Matlab帮助文档print

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值