设为首页收藏本站

Crossin的编程教室

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

【Python 第27课】 list切片

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2014-4-24 18:33:17 |显示全部楼层 |倒序浏览
list有两类常用操作:索引(index)和切片(slice)。

昨天我们说的用[]加序号访问的方法就是索引操作。

除了指定位置进行索引外,list还可以处理负数的索引。继续用昨天的例子:

l = [365, 'everyday', 0.618, True]

l[-1]表示l中的最后一个元素。
l[-3]表示倒数第3个元素。

切片操作符是在[]内提供一对可选数字,用:分割。冒号前的数表示切片的开始位置,冒号后的数字表示切片到哪里结束。同样,计数从0开始。
注意,开始位置包含在切片中,而结束位置不包括。

l[1:3]

得到的结果是['everyday', 0.618]。

如果不指定第一个数,切片就从列表第一个元素开始。
如果不指定第二个数,就一直到最后一个元素结束。
都不指定,则返回整个列表的一个拷贝。

l[:3]
l[1:]
l[:]

同索引一样,切片中的数字也可以使用负数。比如:

l[1:-1]

得到['everyday', 0.618]

27-1.jpeg

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

昨天有了一次罚球的过程,今天我就让它循环5次,并且记录下得分。先不判断胜负。

用score_you表示你的得分,score_com表示电脑得分。开始都为0,每进一球就加1。

from random import choice

score_you = 0
score_com = 0
direction = ['left', 'center', 'right']

for i in range(5):
   print '==== Round %d - You Kick! ====' % (i+1)
   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_you += 1
   else:
       print 'Oops...'
   print 'Score: %d(you) - %d(com)\n' % (score_you, score_com)

   print '==== Round %d - You Save! ====' % (i+1)
   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_com += 1
   print 'Score: %d(you) - %d(com)\n' % (score_you, score_com)

注意:手机上代码有可能会被换行。
这段代码里有两段相似度很高,想想是不是可以有办法可以用个函数把它们分离出来。

27-2.jpeg

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

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2015-12-5 20:49:58 |显示全部楼层
周末晒被子 发表于 2015-12-5 12:24
Crossin先生,您在这节课的结尾说,能不能把代码中两端相似度高的部分分离出来,写成函数。

我发现函数只 ...

变量是有作用域的,函数里面的变量,对于外面来说是看不见的,要通过参数和返回值来得到结果
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2015-12-7 21:40:38 |显示全部楼层
周末晒被子 发表于 2015-12-7 13:41
后来我自己写了一个点球小游戏,如何描述射门的部分借鉴了先生的设计,5轮点球、5轮打平之后一球生死战,都 ...

可以上传文件的,点回复框上面那个回形针图标就可以
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2015-12-14 23:43:39 |显示全部楼层
我是一个小菜鸟 发表于 2015-12-14 17:16
代码分离再看看,先贴:
# -*-coding=utf-8 -*-
from random import choice

  print("踢进...") and n
这里不对吧
  print("踢进...") , n
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2016-1-1 22:49:10 |显示全部楼层
catherinemic 发表于 2015-12-31 18:07
哼哧哼哧终于写出来了,自己run了两次,应该没有问题,就是感觉也没有比不加函数更简单,不过还是很有成就 ...

用if判断没什么问题。
或者你也可以分成两个函数
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2016-1-2 23:53:45 |显示全部楼层
catherinemic 发表于 2016-1-2 09:56
Ok,谢谢crossin先生,元旦快乐!

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

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2016-2-7 15:43:45 |显示全部楼层
谢冰 发表于 2016-2-6 18:39
有一个bug,如果在进球的时候同时输入左,中,右方向,电脑无论防守哪个方向都会输…… ...

是。你只要不按规则输入,就能赢。所以可以额外再加上限制
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2016-5-21 22:25:09 |显示全部楼层
FPOS 发表于 2016-5-21 15:42
from random import choice
print 'choose one side to shoot.'
print 'left,center,right'

两个print可以的
或者字符串里加上换行符 \n
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2016-7-9 16:42:10 |显示全部楼层
dashandtony 发表于 2016-7-9 08:04
m=input()
n=input()
def shootgame(m,n):

用个字典来记分:
  1. dict = {
  2.   'human': 0,
  3.   'computer': 0
  4. }
复制代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2016-12-7 09:57:57 |显示全部楼层
l0ve1o24 发表于 2016-12-6 16:43
def guocheng1():
    print '==== Round %d - You %s! ====' %( i+1 , 'kick' )
    print 'Choose one si ...

可以写一起,但你要做对应的判断,是射门还是守门,输出对应的文字。

每太明白你说每次是1的情况是怎样,因为我运行你这个代码是失败的。如果是重新运行,那肯定从1开始。

你现在修改后的这段代码本身是有问题的,里面 score_com 是一个全局变量但没有申明,所以会报错。后面第71课作用域专门说了这方面的内容。

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

使用道具 举报

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

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

GMT+8, 2024-5-3 16:28 , Processed in 0.028788 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部