设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第28课】 字符串的分割

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2014-4-24 18:34:05 |显示全部楼层 |倒序浏览
字符串和list之间有很多不得不说的事。比如有同学想要用python去自动抓取某个网页上的下载链接,那就需要对网页的代码进行处理。处理的过程中,免不了要在字符串和list之间进行很多操作。

我们先从最基本的开始。假设你现在拿到了一个英语句子,需要把这个句子中的每一个单词拿出来单独处理。

sentence = 'I am an Englist sentence'

这时就需要对字符串进行分割。

sentence.split()

split()会把字符串按照其中的空格进行分割,分割后的每一段都是一个新的字符串,最终返回这些字符串组成一个list。于是得到

['I', 'am', 'an', 'Englist', 'sentence']

原来字符串中的空格不再存在。

除了空格外,split()同时也会按照换行符\n,制表符\t进行分割。所以应该说,split默认是按照空白字符进行分割。

之所以说默认,是因为split还可以指定分割的符号。比如你有一个很长的字符串

section = 'Hi. I am the one. Bye.'

通过指定分割符号为'.',可以把每句话分开

section.split('.')

得到

['Hi', ' I am the one', ' Bye', '']

这时候,'.'作为分割符被去掉了,而空格仍然保留在它的位置上。

注意最后那个空字符串。每个'.'都会被作为分割符,即使它的后面没有其他字符,也会有一个空串被分割出来。例如

'aaa'.split('a')

将会得到['', '', '', ''],由四个空串组成的list。

28-1.jpeg

既然有把字符串分割成list,那也相应就有把list连接成字符串,这个明天说。

#==== 点球小游戏 ====#

在昨天代码的基础上,我们加上胜负判断,如果5轮结束之后是平分,就继续踢。

所以我们把一轮的过程单独拿出来作为一个函数kick,在5次循环之后再加上一个while循环。

另外,这里把之前的score_you和score_com合并成了一个score数组。这里的原因是,要让kick函数里用到外部定义的变量,需要使用全局变量的概念。暂时想避免说这个,而用list不存在这个问题。

from random import choice

score = [0, 0]
direction = ['left', 'center', 'right']

def kick():
   print '==== You Kick! ===='
   print 'Choose one side to shoot:'
   print 'left, center, right'
   you = raw_input()
   print 'You kicked ' + you
   com = choice(direction)
   print 'Computer saved ' + com
   if you != com:
       print 'Goal!'
       score[0] += 1
   else:
       print 'Oops...'
   print 'Score: %d(you) - %d(com)\n' % (score[0], score[1])

   print '==== You Save! ===='
   print 'Choose one side to save:'
   print 'left, center, right'
   you = raw_input()
   print 'You saved ' + you
   com = choice(direction)
   print 'Computer kicked ' + com
   if you == com:
       print 'Saved!'
   else:
       print 'Oops...'
       score[1] += 1
   print 'Score: %d(you) - %d(com)\n' % (score[0], score[1])

for i in range(5):
   print '==== Round %d ====' % (i+1)
   kick()

while(score[0] == score[1]):
   i += 1
   print '==== Round %d ====' % (i+1)
   kick()

if score[0] > score[1]:
   print 'You Win!'
else:
   print 'You Lose.'

28-2.jpeg

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2015-12-8 17:52:05 |显示全部楼层
460883323 发表于 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。 ...

先写点短的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2017-8-10 23:39:43 |显示全部楼层
枫叶落时 发表于 2017-8-10 21:02
crossin先生,请问,我们这些新手完全不知道怎么下手去码,有什么推荐书籍去看,或者方法吗? ...

你先去码简单的呀,猜数字那些。照着课程一句句读,如果这也不行,那换什么书也没用的。

《父与子的编程之旅》,这边比较浅显,但至少你也得会写个比大小猜数字
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2017-8-11 09:41:19 |显示全部楼层
枫叶落时 发表于 2017-8-10 23:49
先生,你编这几套码,我都能读懂,但是要自己编就有很大难度了。。。一开始还跟得上能自己码出来,从小游戏 ...

还是写的少。前面的简单代码,不看参考自己写,然后尝试加一些功能
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2017-10-31 10:47:48 |显示全部楼层
lubvi 发表于 2017-10-30 16:00
C老师, 我想问一下, 如果是 '赵钱孙李周吴郑王'   'abcdefg'这种一串字符,可以分割嘛 。我用.split() ...

split只看空白符划分,你这个需求不是用split来做,直接转list就行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2017-11-1 16:37:15 |显示全部楼层
lubvi 发表于 2017-10-31 15:06
C老师,有没有具体教学可以看。比如字符串'abcdefg',把它分割成'a','b','c','d','e','f' ,具体用到哪个 ...

list('abcdefg')
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2018-1-26 11:22:57 |显示全部楼层
LeeYoung 发表于 2018-1-25 18:52
这里 循环5 次  为什么用的是  for i in range(1)

图片中的是笔误
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2018-5-20 14:20:36 |显示全部楼层
yuyu1111 发表于 2018-5-20 14:13
在接近最后的kick()显示invalid syntax是怎么回事呢,用的python 3

上一行少半个括号
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-4 14:17 , Processed in 0.032838 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部