Crossin的编程教室
标题: 【Python 第28课】 字符串的分割 [打印本页]
作者: crossin先生 时间: 2014-4-24 18:34
标题: 【Python 第28课】 字符串的分割
字符串和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。
既然有把字符串分割成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.'
作者: 痴槑尛孩 时间: 2014-12-21 15:06
太震惊了...
作者: cross 时间: 2015-4-22 16:17
- from random import choice
- s = [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!'
- s[0] += 1
- else:
- print 'Oops...'
- print 'score: %d(you) - %d(com)\n' % (s[0],s[1])
- print '===You Save!==='
- print'choose one side you 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'Oop...'
- s[1] += 1
- print 'score: %d(you) - %d(com)\n' % (s[0],s[1])
- for i in range(1):
- print '===Round %d ===' %(i+1)
- kick()
- while (s[0] ==s[1]):
- i +=1
- print '===Round %d ===' % (i+1)
- kick()
- if s[0] > s[1]:
- print 'You Win!'
- else:
- print 'You Lose.'
复制代码
作者: lovia 时间: 2015-5-27 23:21
- 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.'
复制代码
作者: 460883323 时间: 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。
作者: crossin先生 时间: 2015-12-8 17:52
460883323 发表于 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。 ...
先写点短的
作者: weiliu 时间: 2015-12-30 10:40
本帖最后由 weiliu 于 2015-12-30 18:59 编辑
- 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()
- if score[0] - score[1] ==3:
- print 'you win'
- break
- if score[1] - score[0] ==3:
- print 'computer win'
- break
- if score[0] - score[1] ==2 and i==3:
- print 'you win'
- break
- if score[1] - score[0] ==2 and i==3:
- print 'computer win'
- break
- 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.'
复制代码
作者: 那夏日 时间: 2016-1-19 09:37
本帖最后由 那夏日 于 2016-1-19 10:12 编辑
- l='i am an englist sentence'
- l.split()
- print l[3]
复制代码 为什么不是输出 englist,而是m.空格还存在
啊,我看了下一节就明白了..
要这样
作者: 追风 时间: 2016-5-3 10:35
妙哉
作者: Joshtu 时间: 2016-7-5 16:18
460883323 发表于 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。 ...
同感!!!
作者: 呆雷子 时间: 2016-10-25 16:05
460883323 发表于 2015-12-7 22:58
一路看下来虽然大概知道是怎么一回事,但是要自己写的话感觉还是无从下手。。。。。 ...
不知道怎么下手的话先去看看软件工程的前两三章内容。
貌似要做计划,画流程图巴拉巴拉的
作者: l0ve1o24 时间: 2016-12-9 13:28
- from random import choice
- bifen = [0, 0]
- fangxiang = ['left','middle','right']
- def guocheng():
- print ' ==== now you kick ==== '
- print ' please choose one side to shoot '
- print ' left , middle , right '
- you = raw_input()
- print 'you kicked ' + you
- com = choice(fangxiang)
- print ' the other side saved ' + com
- if you != com:
- print ' he missed the ball , you win '
- bifen[0] += 1
- else:
- print ' he got the ball , you lose \n'
- print ' you - com\n %d -%d\n'%(bifen[0],bifen[1])
- print ' ==== now you save ===='
- print ' plese choose one side to save '
- print ' left , middle , right '
- you = raw_input()
- print ' you saved ' + you
- com = choice(fangxiang)
- print ' the other side kicked ' + com
- if you != com:
- print ' you missed the ball , you lose '
- bifen[1] += 1
- else:
- print ' you got the ball , you win '
- print ' you - com\n %d -%d\n'%(bifen[0],bifen[1])
- for i in range(5):
- print ' ==== round %d ==== '%( i +1 )
- guocheng()
- while bifen[0] == bifen[1]:
- i += 1
- print' round %d'%(i + 1 )
- guocheng()
- if bifen[0] >bifen[1]:
- print ' you win '
- else:
- print ' you lose '
-
复制代码
作者: 枫叶落时 时间: 2017-8-10 21:02
crossin先生,请问,我们这些新手完全不知道怎么下手去码,有什么推荐书籍去看,或者方法吗?
作者: crossin先生 时间: 2017-8-10 23:39
枫叶落时 发表于 2017-8-10 21:02
crossin先生,请问,我们这些新手完全不知道怎么下手去码,有什么推荐书籍去看,或者方法吗? ...
你先去码简单的呀,猜数字那些。照着课程一句句读,如果这也不行,那换什么书也没用的。
《父与子的编程之旅》,这边比较浅显,但至少你也得会写个比大小猜数字
作者: 枫叶落时 时间: 2017-8-10 23:49
先生,你编这几套码,我都能读懂,但是要自己编就有很大难度了。。。一开始还跟得上能自己码出来,从小游戏踢球那个部分开始就显的很吃力了。
作者: crossin先生 时间: 2017-8-11 09:41
枫叶落时 发表于 2017-8-10 23:49
先生,你编这几套码,我都能读懂,但是要自己编就有很大难度了。。。一开始还跟得上能自己码出来,从小游戏 ...
还是写的少。前面的简单代码,不看参考自己写,然后尝试加一些功能
作者: lubvi 时间: 2017-10-30 14:54
C老师, 我想问一下, 如果是 '赵钱孙李周吴郑王'这种纯汉字,可以分割嘛 。我用.split()分不了,还是整体输出的
作者: lubvi 时间: 2017-10-30 16:00
crossin先生 发表于 2017-8-11 09:41
还是写的少。前面的简单代码,不看参考自己写,然后尝试加一些功能
C老师, 我想问一下, 如果是 '赵钱孙李周吴郑王' 'abcdefg'这种一串字符,可以分割嘛 。我用.split()分不了,还是整体输出的
作者: crossin先生 时间: 2017-10-31 10:47
lubvi 发表于 2017-10-30 16:00
C老师, 我想问一下, 如果是 '赵钱孙李周吴郑王' 'abcdefg'这种一串字符,可以分割嘛 。我用.split() ...
split只看空白符划分,你这个需求不是用split来做,直接转list就行
作者: lubvi 时间: 2017-10-31 15:06
crossin先生 发表于 2017-10-31 10:47
split只看空白符划分,你这个需求不是用split来做,直接转list就行
C老师,有没有具体教学可以看。比如字符串'abcdefg',把它分割成'a','b','c','d','e','f' ,具体用到哪个函数
作者: woodumpling 时间: 2017-11-1 08:33
lubvi 发表于 2017-10-31 15:06
C老师,有没有具体教学可以看。比如字符串'abcdefg',把它分割成'a','b','c','d','e','f' ,具体用到哪个 ...
list('abcdefg')
作者: lubvi 时间: 2017-11-1 08:50
woodumpling 发表于 2017-11-1 08:33
list('abcdefg')
问题已解决,非常感谢
作者: crossin先生 时间: 2017-11-1 16:37
lubvi 发表于 2017-10-31 15:06
C老师,有没有具体教学可以看。比如字符串'abcdefg',把它分割成'a','b','c','d','e','f' ,具体用到哪个 ...
list('abcdefg')
作者: LeeYoung 时间: 2018-1-25 18:52
这里 循环5 次 为什么用的是 for i in range(1)
作者: crossin先生 时间: 2018-1-26 11:22
LeeYoung 发表于 2018-1-25 18:52
这里 循环5 次 为什么用的是 for i in range(1)
图片中的是笔误
作者: 司南 时间: 2018-4-7 14:02
这次是几乎没有改动,直接加在后面加的几句话。- #football_game.py
- #司南 2018.04.07
- #方向设定
- direction=['left','middle','right']
- #扑救方
- def keeper(name='computer'):
- import random
- dic=random.choice(direction)
- if name=='computer':
- print('天哪,快看,守门员扑向了%s方向' %dic)
- else:
- print('天哪,快看,守门员%s扑向了%s方向' %(name,dic))
- return dic
- #射门方
- def shoot(man):
- dic=input('请输入射球方向:left/middle/right')
- print('快看,%s能否射进呢?' %man)
- return dic
- #比赛规则
- def fight(keeperdic,shootdic):
- if keeperdic==shootdic:
- print('omg,the goalkeeper win!')
- return True
- else:
- print('天哪,球进了!!')
- return False
- #开始比赛
- score_keeper=0
- score_shoot=0
- man=input('Hei,man please tell us your name:')
- round=eval(input('how many round do you do'))
- for i in range(round):
- print('====Everybody the %dth round begin!===='%(i+1))
- shootdic=shoot(man)
- keeperdic=keeper()
- res=fight(keeperdic,shootdic)
- if res:
- score_keeper=score_keeper+1
- else:
- score_shoot=score_shoot+1
- #判断总分胜负:
- if score_keeper>score_shoot:
- print('伟大的守门员赢啦!!')
- elif score_keeper<score_shoot:
- print('%s 你赢啦!'%man)
- else:
- print('平手!决胜局来啦')
- shootdic=shoot(man)
- keeperdic=keeper()
- res=fight(keeperdic,shootdic)
- if res:
- print('Everybody!!Winner is goalkeeper')
- else:
- print('Everybody!!Winner is %s'%man)
-
-
-
-
-
-
复制代码
作者: 司南 时间: 2018-4-7 14:06
但是按照老师给的灵感,看到了一直没注意的操作方式,就是:
可以直接操作序列中的数字。
score=[0,0]
score[0]+=1
这样操作后的结果是
score[1,0]
而,score[0]+1
score[0]的结果就依旧等于0
作者: yuyu1111 时间: 2018-5-20 14:13
在接近最后的kick()显示invalid syntax是怎么回事呢,用的python 3
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 =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 =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 #局數+1
print('=== Round %d ==='%(i+1) #顯示當前局數
kick()
if score[0]>score[1]:
print('You win!')
else:
print('You Lost.')
作者: crossin先生 时间: 2018-5-20 14:20
yuyu1111 发表于 2018-5-20 14:13
在接近最后的kick()显示invalid syntax是怎么回事呢,用的python 3
上一行少半个括号
作者: yuyu1111 时间: 2018-5-20 14:53
crossin先生 发表于 2018-5-20 14:20
上一行少半个括号
是啊,解决了,谢谢老师了。这么快回覆!
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) |
Powered by Discuz! X2.5 |