鱼C论坛

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

[已解决]请前辈指导此代码优化写法与思路是否正确.

[复制链接]
发表于 2016-11-5 18:45:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fdfanmo 于 2016-11-7 20:14 编辑

代码功能:将以下字串['小','甲','鱼','苍','井','空']转为UTF-8字符代码串0235673000240060334852011731354

  1. tt = ['小','甲','鱼','苍','井','空']
  2. aa = 0
  3. aa =str(aa)
  4. print(type(aa))

  5. for i in tt:
  6.     print('目前I是',i)
  7.     cc = str(ord(i))
  8.     print('cc目前型態',type(cc))
  9.     aa = aa+cc
  10.     print(cc)
  11.     if i == tt[5]:
  12.         print('得到的编码是'0235673000240060334852011731354)
复制代码


打印:
  1. 得到的编码是0235673000240060334852011731354
复制代码


问题1:

tt = ['小','甲','鱼','苍','井','空'] 如果今天字串是'小甲鱼苍井空' 而不是列表,那该如果转换所有字串编码?
得到'0235673000240060334852011731354'结果?
字串一定要是列表吗?那如果不是列表要如何将它转换为列表或是元祖?
因为列表或是元祖才可以用for的方法迭代出来.

问题2:
aa = 0
aa =str(aa)
为什么这边要先aa=0
因为要先让aa=0 之后再将aa转成字符串
因为aa = aa+cc ,cc就是每个字符的编码.而编码必须为字符串才可以将它串起来.
否则如果转出来是数字的话就无法得到0235673000240060334852011731354这样的编码.
这样的思路对吗?

问题3.
我希望在所有字符串都转换为编码后在打印0235673000240060334852011731354
所以我使用

if i == tt[5]:
        print('得到的编码是'0235673000240060334852011731354)

这样的思路对吗?

最后先谢谢各位前辈的指导了.
来这就是为学习python的.不怕批评.嘲笑.还请大家多多指教!谢谢!
最佳答案
2016-11-5 19:18:36
1.字符串就可以迭代,无需转成列表
2.可以这样理解
3.可以,但不好,无需if,直接写在for循环之后,即不要缩进。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-5 19:18:36 | 显示全部楼层    本楼为最佳答案   
1.字符串就可以迭代,无需转成列表
2.可以这样理解
3.可以,但不好,无需if,直接写在for循环之后,即不要缩进。

评分

参与人数 1贡献 +3 收起 理由
fdfanmo + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-5 19:34:49 | 显示全部楼层
冬雪雪冬 发表于 2016-11-5 19:18
1.字符串就可以迭代,无需转成列表
2.可以这样理解
3.可以,但不好,无需if,直接写在for循环之后,即不 ...

谢谢冬雪老师的教导..
1.跟2.我都已经懂了
3的部份我照您的指导改了代码,但是打印出来是这样..
那假如我只想得到这一行打印结果的话..'''得到的编码是'0235673000240060334852011731354'''
是不是就一定要加if呢?

  1. for i in tt:
  2.     print('目前I是',i)
  3.     cc = str(ord(i))
  4.     print('cc目前型態',type(cc))
  5.     aa = aa+cc
  6.     print(aa)

  7.    
  8. 目前I是 小
  9. cc目前型態 <class 'str'>
  10. 23567300024006033485201173135423567
  11. 目前I是 甲
  12. cc目前型態 <class 'str'>
  13. 2356730002400603348520117313542356730002
  14. 目前I是 鱼
  15. cc目前型態 <class 'str'>
  16. 235673000240060334852011731354235673000240060
  17. 目前I是 苍
  18. cc目前型態 <class 'str'>
  19. 23567300024006033485201173135423567300024006033485
  20. 目前I是 井
  21. cc目前型態 <class 'str'>
  22. 2356730002400603348520117313542356730002400603348520117
  23. 目前I是 空
  24. cc目前型態 <class 'str'>
  25. 235673000240060334852011731354235673000240060334852011731354
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-5 20:15:33 | 显示全部楼层
fdfanmo 发表于 2016-11-5 19:34
谢谢冬雪老师的教导..
1.跟2.我都已经懂了
3的部份我照您的指导改了代码,但是打印出来是这样..

不用if
  1. tt = '小甲鱼苍井空'
  2. aa = 0
  3. aa =str(aa)
  4. print(type(aa))

  5. for i in tt:
  6.     print('目前I是',i)
  7.     cc = str(ord(i))
  8.     print('cc目前型態',type(cc))
  9.     aa = aa+cc
  10.     print(cc)
  11. print('得到的编码是', aa)
复制代码

评分

参与人数 1荣誉 +5 收起 理由
fdfanmo + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-5 20:48:41 | 显示全部楼层

谢谢冬雪老师
3我也懂了...縮進往前移..
然後讓他跑完for循環後才會執行print..
再次感謝指導..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-5 22:03:18 | 显示全部楼层

冬雪老師:
我现在想在写一个从编码中反译回字符串的代码..
请教个问题
来源编码
tt = '235673000240060334852011731354235673000240060334852011731354'
由于UTF-8编码是以5个数字组成的.
因此如果用for方式可以一次取出5个数字出来吗?(如一次就能取出23567)
还是只能一个数字一个数字的取出来?分别取出(2,3,5,6,7)
这样的话还原一个字符就需要迭代5次吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-6 08:46:57 | 显示全部楼层

冬雪老師:經過一夜的沉思..
想出寫法了..^^

  1. tt = '235673000240060334852011731354235673000240060334852011731354'
  2. x = 0
  3. y = 5
  4. aa = ''
  5. for i in range(5):
  6.         aa= tt[x:y]
  7.         x += 5
  8.         y += 5
  9.         print(aa)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 20:17:21 | 显示全部楼层
fdfanmo 发表于 2016-11-6 08:46
冬雪老師:經過一夜的沉思..
想出寫法了..^^

这样写通用性更好些:
  1. tt = '235673000240060334852011731354235673000240060334852011731354'
  2. for i in range(len(tt) // 5):
  3.         aa= tt[i * 5 : (i + 1) *5]
  4.         print(aa, chr(int(aa)))
复制代码

  1. 23567 小
  2. 30002 甲
  3. 40060 鱼
  4. 33485 苍
  5. 20117 井
  6. 31354 空
  7. 23567 小
  8. 30002 甲
  9. 40060 鱼
  10. 33485 苍
  11. 20117 井
  12. 31354 空
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-7 20:14:11 | 显示全部楼层
冬雪雪冬 发表于 2016-11-6 20:17
这样写通用性更好些:

哈哈~果然是老师级的~
短短4行就解决所有问题了..
强!!!
~配服到五体投地啊..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-23 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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