鱼C论坛

 找回密码
 立即注册
查看: 1414|回复: 8

[已解决]字符串内置方法expandtabs的使用方法

[复制链接]
发表于 2020-2-17 16:29:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
expandtabs后面不添加说明的话是默认空格长度为8个字符串,小甲鱼老师上课讲的那个例子'i\tlove\tfish'使用这个方法后输出'i       love    fish',i后面有7个空格,love后面有4个空格,因为这8个字符除了空格还要包括反斜杠前面的字符。
那么下面这个,str2 = 'i\tlove\tfish',str2.expandtabs(2),这个会输出什么,第一个i后面会有一个空格我能理解,但是第二个反斜杠前面的love本身就已经有四个字符了,按说应该要报错的吧,但是我在尝试的时候反而输出了一个结果,请大神们帮我解答一下这个问题
最佳答案
2020-2-17 16:33:48
本帖最后由 dlnb526 于 2020-2-17 19:04 编辑

下面的答案是错误的!!!
我的正确解答参见expandtabs()方法的探究
https://fishc.com.cn/thread-156862-1-1.html
(出处: 鱼C论坛)



expandtabs源代码如下
  1. def expandtabs(string, n):
  2.         result = ""
  3.         pos = 0
  4.         for char in string:
  5.             if char == "\t":
  6.                 # instead of the tab character, append the
  7.                 # number of spaces to the next tab stop
  8.                 char = " " * (n - pos % n)
  9.             if char == "\n":
  10.                 pos = 0
  11.             else:
  12.                 pos += len(char)
  13.             result += char
  14.         return result
复制代码


  1. " "*(-1)
  2. Out[5]: ''
复制代码

上述对一个空格乘以-1输出一个空字符串

所以如果位置数比给定的小,把换行符弄成了空字符串而已~
小甲鱼课上好像讲了如果字母数比那个数大,就会忽略expandtabs

希望能帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-17 16:33:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 dlnb526 于 2020-2-17 19:04 编辑

下面的答案是错误的!!!
我的正确解答参见expandtabs()方法的探究
https://fishc.com.cn/thread-156862-1-1.html
(出处: 鱼C论坛)



expandtabs源代码如下
  1. def expandtabs(string, n):
  2.         result = ""
  3.         pos = 0
  4.         for char in string:
  5.             if char == "\t":
  6.                 # instead of the tab character, append the
  7.                 # number of spaces to the next tab stop
  8.                 char = " " * (n - pos % n)
  9.             if char == "\n":
  10.                 pos = 0
  11.             else:
  12.                 pos += len(char)
  13.             result += char
  14.         return result
复制代码


  1. " "*(-1)
  2. Out[5]: ''
复制代码

上述对一个空格乘以-1输出一个空字符串

所以如果位置数比给定的小,把换行符弄成了空字符串而已~
小甲鱼课上好像讲了如果字母数比那个数大,就会忽略expandtabs

希望能帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 18:04:01 | 显示全部楼层
dlnb526 发表于 2020-2-17 16:33
expandtabs源代码如下

谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 18:15:35 | 显示全部楼层
dlnb526 发表于 2020-2-17 16:33
expandtabs源代码如下
  1. >>> str1 = 'i\tam\thappy'
  2. >>> str1.expandtabs(1)
  3. 'i am happy'
  4. >>> str1.expandtabs(2)
  5. 'i am  happy'
复制代码

那您能解释一下这个代码吗
参数为1的时候,位置数比给定的小,i和am后面的换行符换成了空字符串(也就是一个空格?)我能理解
参数为2的时候,我认为应该是i后面一个空格,am后面,因为参数没有大于位置数,所以也应该是一个个空格啊,但是结果出现了两个空格
不是很懂,您能给解释一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 18:16:50 | 显示全部楼层
dlnb526 发表于 2020-2-17 16:33
expandtabs源代码如下
  1. >>> str1 = 'i\tam\thappy'
  2. >>> str1.expandtabs(1)
  3. 'i am happy'
  4. >>> str1.expandtabs(2)
  5. 'i am  happy'
复制代码

那您能解释一下这个代码吗
参数为1的时候,位置数比给定的小,i和am后面的换行符换成了空字符串(也就是一个空格?)我能理解
参数为2的时候,我认为应该是i后面一个空格,am后面,因为参数没有大于位置数,所以也应该是一个个空格啊,但是结果出现了两个空格
不是很懂,您能给解释一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 18:41:00 | 显示全部楼层
巨兔12138 发表于 2020-2-17 18:16
那您能解释一下这个代码吗
参数为1的时候,位置数比给定的小,i和am后面的换行符换成了空字符串(也就 ...

谢谢你我发现了一个了不得的事情~一会我发一个主题然后回复你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 18:44:31 | 显示全部楼层
dlnb526 发表于 2020-2-17 18:41
谢谢你我发现了一个了不得的事情~一会我发一个主题然后回复你!

嗯嗯嗯好的好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 19:04:15 | 显示全部楼层

expandtabs()方法的探究
https://fishc.com.cn/thread-156862-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-23 23:30:10 | 显示全部楼层
dlnb526 发表于 2020-2-17 18:41
谢谢你我发现了一个了不得的事情~一会我发一个主题然后回复你!

能加个好友吗,有关于python的问题想要问您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-6 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表