设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 40996|回复: 29
打印 上一主题 下一主题

【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
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

沙发
发表于 2014-12-21 15:06:17 |只看该作者
太震惊了...
回复

使用道具 举报

0

主题

0

好友

215

积分

中级会员

Rank: 3Rank: 3

板凳
发表于 2015-4-22 16:17:46 |只看该作者
  1. from random import choice

  2. s = [0,0]
  3. direction = ['left','center','right']

  4. def kick():
  5.     print '===You Kick!==='
  6.     print 'choose one side to shoot:'
  7.     print 'left,center,right'
  8.     you = raw_input()
  9.     print 'You kicked' + you
  10.     com = choice(direction)
  11.     print 'computer saved' + com
  12.     if you != com:
  13.         print 'Goal!'
  14.         s[0] += 1
  15.     else:
  16.         print 'Oops...'
  17.     print 'score: %d(you) - %d(com)\n' % (s[0],s[1])

  18.     print '===You Save!==='
  19.     print'choose one side you save:'
  20.     print'left,center,right'
  21.     you = raw_input()
  22.     print 'you saved' + you
  23.     com = choice(direction)
  24.     print 'computer kicked' + com
  25.     if you == com:
  26.         print 'saved'
  27.     else:
  28.         print'Oop...'
  29.         s[1] += 1
  30.     print 'score: %d(you) - %d(com)\n' % (s[0],s[1])

  31. for i in range(1):
  32.     print '===Round %d ===' %(i+1)
  33.     kick()

  34. while (s[0] ==s[1]):
  35.     i +=1
  36.     print '===Round %d ===' % (i+1)
  37.     kick()

  38. if s[0] > s[1]:
  39.     print 'You Win!'
  40. else:
  41.     print 'You Lose.'
复制代码
回复

使用道具 举报

0

主题

0

好友

54

积分

注册会员

Rank: 2

地板
发表于 2015-5-27 23:21:33 |只看该作者
  1. from random import choice

  2. score = [0, 0]
  3. direction = ['left', 'center', 'right']

  4. def kick():
  5.    print '==== You Kick! ===='
  6.    print 'Choose one side to shoot:'
  7.    print 'left, center, right'
  8.    you = raw_input()
  9.    print 'You kicked ' + you
  10.    com = choice(direction)
  11.    print 'Computer saved ' + com
  12.    if you != com:
  13.        print 'Goal!'
  14.        score[0] += 1
  15.    else:
  16.        print 'Oops...'
  17.    print 'Score: %d(you) - %d(com)\n' % (score[0], score[1])

  18.    print '==== You Save! ===='
  19.    print 'Choose one side to save:'
  20.    print 'left, center, right'
  21.    you = raw_input()
  22.    print 'You saved ' + you
  23.    com = choice(direction)
  24.    print 'Computer kicked ' + com
  25.    if you == com:
  26.        print 'Saved!'
  27.    else:
  28.        print 'Oops...'
  29.        score[1] += 1
  30.    print 'Score: %d(you) - %d(com)\n' % (score[0], score[1])

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

  34. while(score[0] == score[1]):
  35.    i += 1
  36.    print '==== Round %d ====' % (i+1)
  37.    kick()

  38. if score[0] > score[1]:
  39.    print 'You Win!'
  40. else:
  41.    print 'You Lose.'
复制代码
回复

使用道具 举报

0

主题

0

好友

46

积分

新手上路

Rank: 1

5#
发表于 2015-12-7 22:58:43 |只看该作者
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2015-12-8 17:52:05 |只看该作者
460883323 发表于 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。 ...

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

使用道具 举报

0

主题

0

好友

22

积分

新手上路

Rank: 1

7#
发表于 2015-12-30 10:40:09 |只看该作者
本帖最后由 weiliu 于 2015-12-30 18:59 编辑
  1. from random import choice

  2. score = [0, 0]
  3. direction = ['left', 'center', 'right']

  4. def kick():
  5.     print '==== You Kick! ===='
  6.     print 'Choose one side to shoot:'
  7.     print 'left, center, right'
  8.     you = raw_input()
  9.     print 'You kicked ' + you
  10.     com = choice(direction)
  11.     print 'Computer saved ' + com
  12.     if you != com:
  13.         print 'Goal!'
  14.         score[0] += 1
  15.     else:
  16.         print 'Oops...'
  17.     print 'Score: %d(you) - %d(com)\n' % (score[0], score[1])

  18.     print '==== You Save! ===='
  19.     print 'Choose one side to save:'
  20.     print 'left, center, right'
  21.     you = raw_input()
  22.     print 'You saved ' + you
  23.     com = choice(direction)
  24.     print 'Computer kicked ' + com
  25.     if you == com:
  26.         print 'Saved!'
  27.     else:
  28.         print 'Oops...'
  29.         score[1] += 1
  30.     print 'Score: %d(you) - %d(com)\n' % (score[0], score[1])

  31. for i in range(5):
  32.     print '==== Round %d ====' % (i+1)
  33.     kick()
  34.     if score[0] - score[1] ==3:
  35.         print 'you win'
  36.         break
  37.     if score[1] - score[0] ==3:
  38.         print 'computer win'
  39.         break
  40.     if score[0] - score[1] ==2 and i==3:
  41.         print 'you win'
  42.         break
  43.     if score[1] - score[0] ==2 and i==3:
  44.         print 'computer win'
  45.         break


  46. while(score[0] == score[1]):
  47.    i += 1
  48.    print '==== Round %d ====' % (i+1)
  49.    kick()

  50. if score[0] > score[1]:
  51.    print 'You Win!'
  52. else:
  53.    print 'You Lose.'
复制代码
回复

使用道具 举报

0

主题

0

好友

50

积分

注册会员

Rank: 2

8#
发表于 2016-1-19 09:37:40 |只看该作者
本帖最后由 那夏日 于 2016-1-19 10:12 编辑


  1. l='i am an englist sentence'
  2. l.split()
  3. print l[3]

复制代码
为什么不是输出 englist,而是m.空格还存在

啊,我看了下一节就明白了..
要这样
  1. li=l.split()
  2. print li[3]
复制代码
回复

使用道具 举报

0

主题

0

好友

121

积分

注册会员

Rank: 2

9#
发表于 2016-5-3 10:35:56 |只看该作者
妙哉
回复

使用道具 举报

0

主题

0

好友

40

积分

新手上路

Rank: 1

10#
发表于 2016-7-5 16:18:38 |只看该作者
460883323 发表于 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。 ...

同感!!!
回复

使用道具 举报

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

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

GMT+8, 2024-11-24 22:43 , Processed in 0.031348 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部