Crossin的编程教室

标题: 【Python 第26课】 操作list [打印本页]

作者: crossin先生    时间: 2014-4-24 18:32
标题: 【Python 第26课】 操作list
上周给list开了个头,知道了什么是list。假设我们现在有一个list:

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

除了用for...in遍历l中的元素,我们还能做点啥?

1. 访问list中的元素
list中的每个元素都对应一个递增的序号。与现实中习惯的序号不同在于,计算机中的计数通常都是从0开始,python也不例外。如果你记不清这个而导致了错误,请去听一下孙燕姿的《爱从零开始》。

要访问l中的第1个元素365,只要用l[0]就可以了。依次类推,
print l[1]
就会输出'everyday'

注意,你不能访问一个不存在的元素,比如l[10],程序就会报错,提示你index越界了。

2. 修改list中的元素
修改list中的某一个元素,只需要直接给那个元素赋值就可以了:

l[0] = 123

输出l,得到[123, 'everyday', 0.618, True],第1个元素已经从365被改成了123。

3. 向list中添加元素
list有一个append方法,可以增加元素。以l这个列表为例,调用的方法是:

l.append(1024)

输出l,你会看到[123, 'everyday', 0.618, True, 1024],1024被添加到了l,成为最后一个元素。(第一个元素在上一步被改成了123)

然后同样可以用l[4]得到1024。

4. 删除list中的元素
删除list中的某一个元素,要用到del:

del l[0]

输出l,得到['everyday', 0.618, True, 1024]。这时候再调用l[0],会得到'everyday',其他元素的序号也相应提前。

以上这些命令,你可以直接在python shell中尝试。
0.jpeg

#==== 点球小游戏 ====#
我打算从今天开始,每天说一点这个小游戏的做法。方法有很多种,我只是提供一种参考。你可以按照自己喜欢的方式去做,那样她才是属于你的游戏。

先说一下方向的设定。我的想法比较简单,就是左中右三个方向,用字符串来表示。射门或者扑救的时候,直接输入方向。所以这里我准备用raw_input。有同学是用1-8的数字来表示八个方向,每次输入一个数字,这也是可以的。不过这样守门员要扑住的概率可就小多了。

至于电脑随机挑选方向,如果你是用数字表示,就用我们之前讲过的randint来随机就行。不过我这次打算用random的另一个方法:choice。它的作用是从一个list中随机挑选一个元素。

于是,罚球的过程可以这样写:

from random import choice
print 'Choose one side to shoot:'
print 'left, center, right'
you = raw_input()
print 'You kicked ' + you
direction = ['left', 'center', 'right']
com = choice(direction)
print 'Computer saved ' + com
if you != com:
   print 'Goal!'
else:
   print 'Oops...'

反之亦然,不赘述。


作者: Go_for_Math    时间: 2014-5-30 11:34
点球小游戏外面套个循环,再加个计数的,最后还能显示“you scored %d”你得了多少分…

作者: crossin先生    时间: 2014-5-31 16:03
Go_for_Math 发表于 2014-5-30 11:34
点球小游戏外面套个循环,再加个计数的,最后还能显示“you scored %d”你得了多少分…
...

有很多改进空间待各位完善
作者: zzxomg    时间: 2015-3-13 07:09
  1. #coding:utf-8
  2. #football游戏,电脑随机进行扑救(左中右),你进行射门,三个方向,看能不能射进
  3. #football1.0
  4. #zzx 2015.03.12
  5. from random import choice
  6. print'-----------------------------------------------欢迎来到欧冠点球的决胜时刻,请屏住呼吸,拭目以待吧---------------------------'
  7. #方向
  8. direction = ['left','middle','right']
  9. #电脑扑救方法
  10. def computerFight() :
  11.                 dic = choice(direction)
  12.                 print'守门员迅速扑救,他扑向了球门的%s方向。他能否守住呢?\n' %dic
  13.                 return dic
  14. #输入射门
  15. def manShoot() :
  16.                 dic = raw_input('请输入你要射门的方向(left,middle,right),关键一球哦!\n')
  17.                 print '\n你发出了世界波,射向了球门的%s方向,你期待这进球的那一刻\n'%dic
  18.                 return dic
  19. def judge() :
  20.                 shootDic = manShoot()
  21.                 fightDic = computerFight()
  22.                 if shootDic == fightDic :
  23.                                 print 'omg,伟大的守门员拯救了这场比赛。他将球扑出了球门。\n'
  24.                 else:
  25.                                 print '球进了,这场比赛终于赢了,恭喜你,伟大的射手!\n'
  26. #开始比赛
  27. judge()

复制代码

作者: lovia    时间: 2015-5-27 21:33
  1. from random import choice
  2. print "Choice one direction to shoot:"
  3. print "left,ceter,right"
  4. you=raw_input()
  5. print "You kicked "+ you
  6. direction=['left','center','right']
  7. com=choice(direction)
  8. print "Computer saved "+ com
  9. if you !=com:
  10.     print "Goal!"
  11. else:
  12.     print "Oops..."
复制代码

作者: catherinemic    时间: 2015-12-31 14:50
动了一点脑筋加了循环和计数,感觉自己棒棒哒~
a=0
print 'Welcome to the Happy Time, you have 5 times to play!'
print 'Choose one side to shoot:'
print 'left, center, right'
for i in range(1,6):
    from random import choice
    you=raw_input()
    direction=['left','center','right']
    com=choice(direction)
    print 'Computer saved '+ com
    if you != com:
        print 'Goal, you get 1 score!'
        a=a+1
    else:
        print 'Oops...'
        a=a
if a>=3:
    print 'Congratulations, you scored %d!'%a
else:
    print 'Oh-no, you only scored %d, better luck next time!'%a

Python12.png (7.5 KB, 下载次数: 366)

Python12.png


作者: 弹星者    时间: 2016-2-20 13:10
加了一个胜负的判断,略有成就感
  1. from random import choice

  2. def function():
  3.         player=0
  4.         computer=0
  5.         print 'Choose one side to shoot:'
  6.         print 'left, center, right'
  7.         you = raw_input()
  8.         print 'You kicked ' + you
  9.         direction = ['left', 'center', 'right']
  10.         com = choice(direction)
  11.         print 'Computer saved ' + com
  12.         if you != com:
  13.                 print 'Goal!'
  14.                 player=player+1
  15.         else:
  16.                 print 'Oops...'
  17.                 computer=computer+1
  18.         return computer,player


  19. n=0
  20. while n<5:
  21.         n=n+1
  22.         list=function()

  23. if list[0]==list[1]:
  24.         print ('hhhhhh')
  25. elif list[1]<list[0]:
  26.         print ('computer win!!')
  27. else:
  28.         print ('player win!!')
复制代码

作者: crossin先生    时间: 2016-2-20 15:39
弹星者 发表于 2016-2-20 13:10
加了一个胜负的判断,略有成就感


作者: 追风    时间: 2016-5-2 16:26
Crossin老师,列表的名称命名有什么规范吗?和变量的命名一样吗?

作者: crossin先生    时间: 2016-5-3 11:21
追风 发表于 2016-5-2 16:26
Crossin老师,列表的名称命名有什么规范吗?和变量的命名一样吗?

和变量一样,它就是一个变量
作者: 追风    时间: 2016-5-3 16:14
知道啦,谢谢Crossin老师!
作者: 十三才    时间: 2016-9-8 11:59
弹星者 发表于 2016-2-20 13:10
加了一个胜负的判断,略有成就感

最后比较list[0]和list[1]是什么意思?他们代表的是什么意思?
作者: l0ve1o24    时间: 2016-12-6 14:31
本帖最后由 l0ve1o24 于 2016-12-6 14:57 编辑

#coding:UTF-8   
a = 1
while a == 1:
   
    from random import choice
    print '现在开始点球,请选择方向'
    print 'left,middle,right'
    you = raw_input()
   
    print ' 你射向 ' + you
    lista = ['left','middle','right']
    com = choice(lista)
    if you != com:
        
        print '对方傻啦吧唧地扑向' + com + ' ,你赢了!'
    else:
        print '对方扑向' + com + '并稳稳抱住了球,你输了!'

   

作者: brahmagupta    时间: 2017-2-24 16:20
crossin老师 ,有 对list插入元素、对list拆分 等操作的相关方法么?

作者: brahmagupta    时间: 2017-2-24 16:26
另外说一句:
感觉可以 通过 加长 电脑的direction列表长度为

['left', 'center','right','right','right']

这种方式来增加 “守门员”右边扑救的成功率。
作者: brahmagupta    时间: 2017-2-24 16:26
brahmagupta 发表于 2017-2-24 16:26
另外说一句:
感觉可以 通过 加长 电脑的direction列表长度为

不过 精确控制和分配各个方向的扑救 成功率 的方法我还没有想出来
作者: crossin先生    时间: 2017-2-24 16:51
brahmagupta 发表于 2017-2-24 16:20
crossin老师 ,有 对list插入元素、对list拆分 等操作的相关方法么?

有啊,你再往后看几课。
也可以网上搜一搜python list的操作
作者: crossin先生    时间: 2017-2-24 16:52
brahmagupta 发表于 2017-2-24 16:26
不过 精确控制和分配各个方向的扑救 成功率 的方法我还没有想出来

可以。精确控制的话,就要自己写个函数来处理了。通常方法是产生一个随机数,根据随机数落在的范围决定产生什么结果。
作者: brahmagupta    时间: 2017-2-24 18:25
crossin先生 发表于 2017-2-24 16:52
可以。精确控制的话,就要自己写个函数来处理了。通常方法是产生一个随机数,根据随机数落在的范围决定产 ...

这个好,就像 Roll 点一样!
作者: crossin先生    时间: 2017-2-25 22:09
brahmagupta 发表于 2017-2-24 18:25
这个好,就像 Roll 点一样!

对,就这个意思
作者: Imagination    时间: 2017-11-28 15:41
you = raw_input()  在python3 中怎么打  我打出来 显示错误 说是raw_input没有被定义   最后 我改成you = str(input())
作者: woodumpling    时间: 2017-11-28 18:41
Imagination 发表于 2017-11-28 15:41
you = raw_input()  在python3 中怎么打  我打出来 显示错误 说是raw_input没有被定义   最后 我改成you =  ...

Python3只有input(),没有raw_input()
作者: q915417507    时间: 2018-3-1 16:57
老师 我用Python3 无法用print range(1,10)来输出列表  用 Print (range(1,10))  它也不会输出
)那么在python3中 如何来输出range(1,10)呢
作者: crossin先生    时间: 2018-3-2 13:54
q915417507 发表于 2018-3-1 16:57
老师 我用Python3 无法用print range(1,10)来输出列表  用 Print (range(1,10))  它也不会输出
)那么在pyth ...

list(range(1,10))

如果只是要循环遍历,直接用就range可以
作者: 司南    时间: 2018-4-6 12:28
暂时做成这样啦,后续完善吧~
  1. direc=['left','middle','right']
  2. import random
  3. goalkeeper=random.choice(direc)
  4. shoot=input('please choose the direction:left,middle or right:')
  5. score=0
  6. while goalkeeper!=shoot:
  7.     print('Goal')
  8.     shoot=input('try,again?')
  9.     score=score+1
  10. print('Oh,no,the goalkeeper is in the %s,and your score is %d' %(goalkeeper,score))
复制代码





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5