【总结】回车换行符/r/n 的区别与来历,原来如此。。

本文介绍了计算机中“回车”和“换行”的由来,追溯到早期的打字机时代,并解释了不同操作系统中如何处理这些字符的区别。

有看过《辛德勒的名单》的朋友应该记得有这么个场景,当时辛德勒想招一个打字员,一个胖胖的妇女前来面试,打字飞快。不知道大家有没有注意,她每打完一行都要手动将打字机的针头移回至行首,然后再移至下一行继续,这其实就是“回车(carriage Return)、换行(Next line)”的来历,很形象吧。

此外在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车/r”,告诉打字机把打印头定位在左边界;另一个叫做“换行/n”,告诉打字机把纸向下移一行,这就是“/r”和“/n”的来历。

 

于是这两段历史使得他们自然就对应了起来。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix 系统里,每行结尾只有“<换行>”,即“/n”;Windows系统里面,每行结尾是“<换行><回车>”,即“ /n/r”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会 变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

而在c语言编程时(windows系统),/r 就是return 回到本行行首,这就会把这一行以前的输出给覆盖掉。

任务描述   几何图形是从现实世界抽象出的各种图形,如矩形、三角形、圆形等,可以用来刻画错综复杂的世界。在 Python 中,除了用绘图库绘制外,也可以利用print函数打印几何图形,而本关任务是打印一个高度为 n 的等腰三角形,如 n=4 时,打印结果如下: * *** ***** *******   即 n=4 时共有 4 行,其中: 第 1 行:3 个空格、1 个星号、3 个空格; 第 2 行:2 个空格、3 个星号、2 个空格; 第 3 行:1 个空格、5 个星号、1 个空格; 第 4 行:0 个空格、7 个星号、0 个空格。 相关知识 例题   若用print打印一个边长为 n 的正方形,代码如下: n = 4 for i in range(n): print('*' * n)   最后一行将字符串整数n相乘,表示将这个字符串重复拼接 n 次,如'*' * 4是****、'abc'*3是abcabcabc。此外,字符串字符串可以相加,其作用也是拼接,如'abc'+'def'的结果是'abcdef'。   因显示原因,上面的程序打印出来的结果看起来并不像正方形,可以将最后一行的'*' * n改为'* ' * n,即在第 1 个星号后面添加两个空格(本关过关程序中不用这么做)。 特殊字符   在字符串里面,有时会出现一些以\开头的特殊字符(称为转义符),如\n表示换行符(类似回车键的效果)、\t表示制表符(比空格更宽且宽度可变的一段空白)。尝试如下程序,观察这些特殊符号的显示效果。 print('a\nb') #a和b分两行显示,因为它们中间有一个换行符\n print('ccc\td') #ccc和d之间有一段较长的空白,即为制表符\t print('e\tf') #f上行的d对齐,形成表格效果,这也是“制表”的由来   可上网查询 Python 中的其他转义符。 print 的行尾符   行尾符是print在打印内容尾部添加的字符串。默认情况下,print的行尾符是换行符\n,所以每次使用print都会从新的一行开始打印,例如下面的程序两次使用print,打印出来的就是两行: print('a') #打印a,在a后面添加\n print('b') #打印b,在b后面添加\n   也可以手动设置print的行尾符,如下面的程序打印结果只有一行(a-b-): print('a', end='-') #将行尾符设置为-,打印a后,在后面添加- print('b', end='-') #将行尾符设置为-,打印b后,在后面添加-   如果想把若干个print的打印内容首尾拼接成一行,可以将行尾符设置成空字符串''(两个连续的引号),即包含 0 个字符的字符串,表示行尾什么都不加。比如,要打印“3 个减号、1 个星号、3 个减号”,程序可以是: print('-'*3, end='') #打印3个减号 print('*', end='') #打印1个星号 print('-'*3) #打印3个减号,然后添加\n   本关就可以采用这种方式打印三角形的每一行。 print 的分隔符   除行尾符外,print里面还有分隔符的概念,即print用来分隔多个打印对象所用的字符串。默认情况下,print使用空格作为分隔符,例如下面的程序打印结果为a b c,三个字符之间以空格分隔。 print('a','b','c') #依次打印a、b、c,并在它们之间加上空格   也可以手动设置print的分隔符,如下面的程序打印结果是a+b+c。 print('a','b','c', sep='+') #将分隔符设置为+ 编程要求   补全 Begin-End 区间的代码,其功能是打印高度为 n (用变量n表示)的等腰三角形,不要改动 Begin-End 区间之外的代码。n = int(input()) ########## Begin ########## ########## End ##########
最新发布
11-11
我们来逐步分析题目要求,并补全代码。 --- ### ✅ 任务目标: 输入一个整数 `n`,打印一个高度为 `n` 的**等腰三角形**,由星号 `*` 组成,每行星号居中,上下对称增长。 例如:当 `n = 4` 时输出如下: ``` * *** ***** ******* ``` 观察规律: | 行号 i(从1开始) | 空格数 | 星号数 | |------------------|--------|--------| | 1 | 3 | 1 | | 2 | 2 | 3 | | 3 | 1 | 5 | | 4 | 0 | 7 | 可以归纳出: - 第 `i` 行有 `(n - i)` 个空格(前导空格) - 第 `i` 行有 `(2*i - 1)` 个星号 - 后面不需要补空格(虽然示例看起来有,但实际一般只输出到星号为止即可,居中靠前面空格实现) > 注意:题目描述中说“第1行:3个空格、1个星号、3个空格”,但通常我们不会在星号后面加多余的空格。除非特别要求对齐总宽度。不过为了和样例完全一致,我们可以考虑每行总宽度是 `2*n - 1`(最大星号行的长度),前后空格对称。 即每行总字符数为:`2*n - 1`,比如 n=4,则每行共 7 个字符。 所以: - 每行结构:`left_spaces + stars + right_spaces` - 左右空格数量相等:`(total_width - star_count) // 2 = n - i` 但实际上左右空格是对称的,而由于 `star_count = 2*i - 1`,所以: ```python s = ' '*(n-i) + '*'*(2*i-1) + ' '*(n-i) ``` 但这会导致右边多出空格,一般不推荐输出冗余空格。然而如果只是用 `print` 直接输出字符串,默认会换行,所以我们只需构造中间对齐的字符串即可。 更简单的方法是利用字符串居中或直接拼接前导空格+星号。 但根据提示:“可以用 `end=''` 来控制不换行”,说明我们可能需要逐部分打印。 --- ### 🔧 解题思路(使用 end='' 分段打印) 我们可以对每一行这样处理: 1. 先打印 `(n - i)` 个空格; 2. 再打印 `(2*i - 1)` 个星号; 3. 然后换行(最后一行自动加 `\n`); 但是注意:如果我们用多个 `print(..., end='')`,最后要手动换行。 --- ### ✅ 正确实现方式(推荐): ```python n = int(input()) ########## Begin ########## for i in range(1, n + 1): # 打印前导空格 print(' ' * (n - i), end='') # 打印星号 print('*' * (2 * i - 1), end='') # 换行(结束当前行) print() # 默认换行 ########## End ########## ``` --- ### 💡 代码解释: - `for i in range(1, n+1)`:遍历每一行,i 从 1 到 n。 - `' ' * (n - i)`:生成前导空格,随着行数增加,空格减少。 - `' * ' * (2*i - 1)`:每行星号数量是奇数序列:1, 3, 5, ..., 2n-1。 - `end=''`:防止 print 自动换行,让下一次打印接在后面。 - 最后的 `print()` 是为了换行,相当于添加 `\n`。 --- ### 🧪 示例运行(n=4): ```text * → 3空格 + 1星 *** → 2空格 + 3星 ***** → 1空格 + 5星 ******* → 0空格 + 7星 ``` 完美匹配! --- ### ❗注意事项: - 不要在星号后面额外打印空格(除非题目强制要求总宽度对齐且必须补满),否则可能判错。 - 使用 `input()` 获取输入,已给出。 - 只能在 `Begin` 和 `End` 之间写代码。 --- ### ✅ 最终答案: ```python n = int(input()) ########## Begin ########## for i in range(1, n + 1): print(' ' * (n - i), end='') print('*' * (2 * i - 1), end='') print() ########## End ########## ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值