Crossin的编程教室

标题: 【Python 第27课】 list切片 [打印本页]

作者: crossin先生    时间: 2014-4-24 18:33
标题: 【Python 第27课】 list切片
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


作者: zzxomg    时间: 2015-3-13 14:46
  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 fight(name='computer') :
  11.                 if name == 'computer':
  12.                                 dic = choice(direction)
  13.                                 print'守门员%s迅速扑救,他扑向了皮球的%s方向。他能否守住呢?\n' %(name,dic)
  14.                 else :
  15.                                 dic = raw_input('请输入您要扑球的方向(left,middle,right),看你能够抵挡住这世界波。')
  16.                                 print'守门员%s迅速扑救,他扑向了球门的%s方向。他能否守住呢?\n' %(name,dic)
  17.                 return dic
  18. #输入射门
  19. def shoot(name='computer') :
  20.                 if name == 'computer':
  21.                                 dic = choice(direction)
  22.                                 print '\n%s发出了世界波,像球门快速飞来,你要赶快判断他的方向,守住大门!\n'%name
  23.                 else:
  24.                                 dic = raw_input('请输入你要射门的方向(left,middle,right),关键一球哦!\n')
  25.                                 print '\n%s发出了世界波,射向了球门的%s方向,你期待这进球的那一刻\n'%(name,dic)
  26.                 return dic
  27. def judge(shootDic,fightDic) :
  28.                 if shootDic == fightDic :
  29.                                 print 'omg,伟大的守门员拯救了这场比赛。他将球扑出了球门。\n'
  30.                                 return True
  31.                 else:
  32.                                 print '球进了,恭喜你,伟大的射手!\n'
  33.                                 return False
  34. #开始比赛
  35. man_point = 0;
  36. computer_point = 0;
  37. man = raw_input('请输入你的姓名:')
  38. for i in range(1,4):
  39. #人先射门,电脑守门
  40.                 print '下面由%s先主发点球,祈祷吧!'%man
  41.                 shootDic = shoot(man)
  42.                 fightDic = fight()
  43.                 res = judge(shootDic,fightDic)
  44.                 if not res :
  45.                                 man_point+=1
  46.                                 print '好样的%s,球进了,加一分,总分为%d'%(man,man_point)
  47. #电脑射门,人守门
  48.                 print '交换场地,下面由电脑先发球'
  49.                 shootDic2 = shoot()
  50.                 fightDic2 = fight(man)
  51.                 res2 = judge(shootDic2,fightDic2)
  52.                 if not res2 :
  53.                                 computer_point+=1
  54.                                 print '好样的computer,球进了加一份,得分为%d'%computer_point
  55. print '总成绩是:%s--%d-----------computer--%d'%(man,man_point,computer_point)
  56. if man_point > computer_point :
  57.                 print '恭喜你,最终你赢得了胜利,伟大的射手----%s'%man
  58. elif man_point<computer_point :
  59.                 print '很遗憾,电脑赢得了胜利,你输了,再接再厉吧'
  60. else:
  61.                 print '平手啊,你和电脑一样厉害'







复制代码

作者: cross    时间: 2015-4-22 10:40
楼上的代码好棒啊
作者: lovia    时间: 2015-5-27 22:25
优化了一点点,不涉及技术
  1. #coding:gbk #我的电脑用gbk才能显示汉字名字
  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 fight(name='computer') :
  11.                 if name == 'computer':
  12.                                 dic = choice(direction)
  13.                                 print'守门员%s迅速扑救,他扑向了皮球的%s方向。他能否守住呢?\n' %(name,dic)
  14.                 else :
  15.                                 dic = raw_input('请输入您要扑球的方向(left,middle,right),看你能够抵挡住这世界波。\n')
  16.                                 print'守门员%s迅速扑救,他扑向了球门的%s方向。他能否守住呢?\n' %(name,dic)
  17.                 return dic
  18. #输入射门
  19. def shoot(name='computer') :
  20.                 if name == 'computer':
  21.                                 dic = choice(direction)
  22.                                 print '\n%s发出了世界波,像球门快速飞来,你要赶快判断他的方向,守住大门!\n'%name
  23.                 else:
  24.                                 dic = raw_input('请输入你要射门的方向(left,middle,right),关键一球哦!\n')
  25.                                 print '\n%s发出了世界波,射向了球门的%s方向,你期待这进球的那一刻\n'%(name,dic)
  26.                 return dic
  27. def judge(shootDic,fightDic) :
  28.                 if shootDic == fightDic :
  29.                                 print 'omg,伟大的守门员拯救了这场比赛。他将球扑出了球门。\n'
  30.                                 return True
  31.                 else:
  32.                                 print '球进了,恭喜你,伟大的射手!\n'
  33.                                 return False
  34. #开始比赛
  35. man_point = 0  #初始化人分数,此处不需要分号
  36. computer_point = 0 #初始化电脑分数,此处不需要分号
  37. man = raw_input('请输入你的姓名:')
  38. for i in range(1,4):
  39. #人先射门,电脑守门
  40.                 print '下面由%s先主发点球,祈祷吧!'%man
  41.                 shootDic = shoot(man)   #调用shoot函数,并赋值name=你的名字,执行else部分,就是crossin部分简单的,返回你的选择方向
  42.                 fightDic = fight()  #调用fight函数,返回电脑的选择方向
  43.                 res = judge(shootDic,fightDic)
  44.                 if not res :
  45.                                 man_point+=1
  46.                                 print '好样的%s,球进了,加一分,总分为%d'%(man,man_point)
  47. #电脑射门,人守门
  48.                 print '交换场地,下面由电脑先发球'
  49.                 shootDic2 = shoot()
  50.                 fightDic2 = fight(man)
  51.                 res2 = judge(shootDic2,fightDic2)
  52.                 if not res2 :
  53.                                 computer_point+=1
  54.                                 print '好样的computer,球进了加一份,得分为%d'%computer_point
  55. print '总成绩是:%s--%d-----------computer--%d'%(man,man_point,computer_point)
  56. if man_point > computer_point :
  57.                 print '恭喜你,最终你赢得了胜利,伟大的射手----%s'%man
  58. elif man_point<computer_point :
  59.                 print '很遗憾,电脑赢得了胜利,你输了,再接再厉吧'
  60. else:
  61.                 print '平手啊,你和电脑一样厉害'






复制代码

作者: lovia    时间: 2015-5-27 22:25
太懒了,看了一部分
作者: 草办    时间: 2015-12-4 17:29
表示学习阶段,这样没必要的东西搞得太复杂反而不好吧
作者: 周末晒被子    时间: 2015-12-5 12:24
本帖最后由 周末晒被子 于 2015-12-5 12:25 编辑

Crossin先生,您在这节课的结尾说,能不能把代码中两端相似度高的部分分离出来,写成函数。

我发现函数只能写到 you=raw_input 为止,一旦包进去,就会提示下面函数外面的 you 未被定义。

如果是先生的话,会怎么把这两段代码函数化呢?
作者: crossin先生    时间: 2015-12-5 20:49
周末晒被子 发表于 2015-12-5 12:24
Crossin先生,您在这节课的结尾说,能不能把代码中两端相似度高的部分分离出来,写成函数。

我发现函数只 ...

变量是有作用域的,函数里面的变量,对于外面来说是看不见的,要通过参数和返回值来得到结果
作者: 周末晒被子    时间: 2015-12-7 13:35
本帖最后由 周末晒被子 于 2015-12-7 13:43 编辑

谢谢Crossin先生的回复~

那个,我不明白先生这节课结尾的这句话是什么意思:
“这段代码里有两段相似度很高,想想是不是可以有办法可以用个函数把它们分离出来。”

我一开始的理解是:==== Round %d - You Kick! ====和==== Round %d - You Save! ====的相似度高,那么比较出这两段代码的不同之处,用参数代替不同之处,来定义成函数e。可以用两遍函数e,也算有点省力。

但是我发现写不出来函数e,就是因为到了两段代码的if you==(!=)com:之后的部分太不一样了,连加分的位置都不一样,所以我把函数的范围缩小到if you==(!=)com:以上的部分,但是因为you不作用到函数外面,所以程序会在if you==(!=)com:这里报错。

所以我就来问问先生会怎么写这个函数。

但是后来看到先生是把==== Round %d - You Kick! ====和==== Round %d - You Save! ====作为一轮,并在一起写成函数来用,更好。
作者: 周末晒被子    时间: 2015-12-7 13:41
本帖最后由 周末晒被子 于 2015-12-7 13:43 编辑

后来我自己写了一个点球小游戏,如何描述射门的部分借鉴了先生的设计,5轮点球、5轮打平之后一球生死战,都是借鉴了您的设计。
呃,不能上传.py文件,但是代码太长了就不放上来了。
作者: crossin先生    时间: 2015-12-7 21:40
周末晒被子 发表于 2015-12-7 13:41
后来我自己写了一个点球小游戏,如何描述射门的部分借鉴了先生的设计,5轮点球、5轮打平之后一球生死战,都 ...

可以上传文件的,点回复框上面那个回形针图标就可以
作者: 周末晒被子    时间: 2015-12-7 23:06
本帖最后由 周末晒被子 于 2015-12-8 12:44 编辑
crossin先生 发表于 2015-12-7 21:40
可以上传文件的,点回复框上面那个回形针图标就可以

希望Crossin先生能给一点一意见...

5C84.tmp.jpg (6.9 KB, 下载次数: 401)

5C84.tmp.jpg

点球小游戏.zip

1.73 KB, 下载次数: 5

只好压缩了


作者: 我是一个小菜鸟    时间: 2015-12-14 17:16
代码分离再看看,先贴:
# -*-coding=utf-8 -*-
from random import choice
n=0
print('Choice one side to shoot:')
dictionary=['left','right','conter']
for i in range(5):
    print("left,conter,right")
    you=raw_input()
    print 'you kicked' + you
    com=choice(dictionary)
    if you!=com:
        print("臭脚!!")
    else:
        n+=1
        print("踢进...") and n
作者: crossin先生    时间: 2015-12-14 23:43
我是一个小菜鸟 发表于 2015-12-14 17:16
代码分离再看看,先贴:
# -*-coding=utf-8 -*-
from random import choice

  print("踢进...") and n
这里不对吧
  print("踢进...") , n
作者: 我是一个小菜鸟    时间: 2015-12-15 09:53
crossin先生 发表于 2015-12-14 23:43
print("踢进...") and n
这里不对吧
  print("踢进...") , n

额,写出来的时候,用的是python2.7正常,也没再用3.5执行过,马马虎虎了
作者: 我是一个小菜鸟    时间: 2015-12-15 10:18
我是一个小菜鸟 发表于 2015-12-14 17:16
代码分离再看看,先贴:
# -*-coding=utf-8 -*-
from random import choice

版本:python3.5
# -*-coding=utf-8 -*-
from random import choice
n=0
print('Choice one side to shoot:')
dictionary=['left','right','conter']

for i in range(5):
    print("left,conter,right")
    you=input()
    print (' you kicked ' + you)
    com=choice(dictionary)
    if you!=com:
        print("臭脚!!")
    else:
        n=n+1
        print("踢进...")
        print(n)
                  
作者: 我是一个小菜鸟    时间: 2015-12-15 10:46
# -*-coding=utf-8 -*-
from random import choice
n=0
print('Choice one side to shoot:')
dictionary=['left','right','conter']

for i in range(5):
    print("left,conter,right")
    you=input()
    print (' you kicked ' ,you)
    com=choice(dictionary)
    if you!=com:
        print("臭脚!!")
    else:
        n=n+1
        print("踢进,得分:",n)
作者: catherinemic    时间: 2015-12-31 18:07
哼哧哼哧终于写出来了,自己run了两次,应该没有问题,就是感觉也没有比不加函数更简单,不过还是很有成就感的~~
另外,请教crossin老师,在定义函数参数的取值时,我是用if分别设定的,有没有办法比这个再简洁一点呢?
  1. from random import choice
  2. score_you=0
  3. score_com=0
  4. direction=['left','center','right']

  5. def game(action, round_no):
  6.     if action=='Shoot':
  7.         pasttense1='shot'
  8.         pasttense2='saved'
  9.         small_l='shoot'
  10.         result1='Goal!'
  11.         result2='Oops...'
  12.     if action=='Save':
  13.         pasttense1='saved'
  14.         pasttense2='shot'
  15.         small_l='save'
  16.         result1='Oops...'
  17.         result2='Saved!'
  18.     print '==== Round %d - You %s! ===='%(round_no,action)
  19.     print 'Choose one side to %s: left, center, right'%(small_l)
  20.     you=raw_input()
  21.     print 'you %s '%pasttense1 + you
  22.     com=choice(direction)
  23.     print 'computer %s '%pasttense2 + com
  24.     if you != com:
  25.         print result1
  26.         return 1
  27.     else:
  28.         print result2
  29.         return 0
  30.    
  31. for i in range(5):
  32.     score_you += game('Shoot',i+1)
  33.     print 'Score: %d(you) - %d(com)\n'%(score_you, score_com)
  34.     score_com += game('Save',i+1)
  35.     print 'Score: %d(you) - %d(com)\n'%(score_you, score_com)
复制代码

Python13.png (15.39 KB, 下载次数: 402)

Python13.png


作者: crossin先生    时间: 2016-1-1 22:49
catherinemic 发表于 2015-12-31 18:07
哼哧哼哧终于写出来了,自己run了两次,应该没有问题,就是感觉也没有比不加函数更简单,不过还是很有成就 ...

用if判断没什么问题。
或者你也可以分成两个函数
作者: catherinemic    时间: 2016-1-2 09:56
crossin先生 发表于 2016-1-1 22:49
用if判断没什么问题。
或者你也可以分成两个函数

Ok,谢谢crossin先生,元旦快乐!
作者: crossin先生    时间: 2016-1-2 23:53
catherinemic 发表于 2016-1-2 09:56
Ok,谢谢crossin先生,元旦快乐!

新年快乐
作者: 谢冰    时间: 2016-2-6 18:39
有一个bug,如果在进球的时候同时输入左,中,右方向,电脑无论防守哪个方向都会输……
作者: crossin先生    时间: 2016-2-7 15:43
谢冰 发表于 2016-2-6 18:39
有一个bug,如果在进球的时候同时输入左,中,右方向,电脑无论防守哪个方向都会输…… ...

是。你只要不按规则输入,就能赢。所以可以额外再加上限制
作者: FPOS    时间: 2016-5-21 15:42
from random import choice
print 'choose one side to shoot.'
print 'left,center,right'
left='l'
center='c'
right='r'
direction=[left,center,right]
win = 0
lose = 0
for i in range(1,6):
    youC=raw_input()
    c=choice(direction)
    print 'the ' +str(i)+ ' game'
    if youC != c:
        print "you win"
        win += 1
        print 'win:lose'
        print str(win)+'-'+str(lose)
    else:
        print"you lose"
        lose += 1
        print 'win:lose'
        print str(win)+'-'+str(lose)
if win>lose:
    print'you are winer'
else:
    print'you are loser'
睡觉的时候想了好久,到电脑上自信输入,
然后改了很久的小错误。
运行成功后有尴尬了,达不到预想的功能,想了好久才想到是输入没放到循环里,导致只输出一次,改正之后就是增加细节,
又在print上卡了好久怎么在print打印的内容换行。最后找不到解决的办法只好用了两个print.

作者: crossin先生    时间: 2016-5-21 22:25
FPOS 发表于 2016-5-21 15:42
from random import choice
print 'choose one side to shoot.'
print 'left,center,right'

两个print可以的
或者字符串里加上换行符 \n
作者: dashandtony    时间: 2016-7-9 08:04
m=input()
n=input()
def shootgame(m,n):
    from random import choice
    direction=['left','right', 'middle']
    b=choice(direction)
    a=input()
    print('Now',m,'is going to shoot the gate!\nLeft, right, or middle?')
    print(m,'kicked '+a)
    l=0
    i=0
    while i<5:
        i +=1
        if a !=b:
            print('Oops,',n,'saved',a)
            print(l)
            b=choice(direction)
            a=input()
        else:
            print('Goal!')
            l +=1
            print(l)
            b=choice(direction)

            a=input()
    print("%s's score equals"%m,l)

print(shootgame(m,n))
print(shootgame(n,m))
我的想法是直接把human和computer作为两个变量,直接交换位置就可以,但写到后面发现计分的时候无法对二者比分进行比较(都在一个函数里面),不知道有没有办法可以把两个比分分开

作者: crossin先生    时间: 2016-7-9 16:42
dashandtony 发表于 2016-7-9 08:04
m=input()
n=input()
def shootgame(m,n):

用个字典来记分:
  1. dict = {
  2.   'human': 0,
  3.   'computer': 0
  4. }
复制代码

作者: l0ve1o24    时间: 2016-12-6 16:43
def guocheng1():
    print '==== Round %d - You %s! ====' %( i+1 , 'kick' )
    print 'Choose one side to %s:' %'shoot'
    print 'left, center, right'
    you = raw_input()
    print 'You %s '% 'kicked' + you
    com = choice(direction)
    print 'Computer %s '% 'saved' + com
    if you == com:
        print 'Saved!'
    else:
        print 'Oops...'
        score_com += 1
        print 'Score: %d(you) - %d(com)\n' % (score_you, score_com)
def guocheng2():
    print '==== Round %d - You %s! ====' %( i+1 , 'save' )
    print 'Choose one side to %s:' %'save'
    print 'left, center, right'
    you = raw_input()
    print 'You %s '% 'save' + you
    com = choice(direction)
    print 'Computer %s '% 'kicked' + com
    if you == com:
        print 'Saved!'
    else:
        print 'Oops...'
        score_com += 1
        print 'Score: %d(you) - %d(com)\n' % (score_you, score_com)
from random import choice

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

for i in range(5):
    guocheng1()
    guocheng2()


我想把两个def guocheng合在一块,最后导出的时候再用%修改,一直没成功,不知道这样可不可行
而且像这样分开写print '==== Round %d - You Kick! ====' % (i+1)这里运行的时候第二次还是round 1
老师你的也是这样

作者: crossin先生    时间: 2016-12-7 09: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课作用域专门说了这方面的内容。


作者: l0ve1o24    时间: 2016-12-7 12:57
本帖最后由 l0ve1o24 于 2016-12-7 13:02 编辑
crossin先生 发表于 2016-12-7 09:57
可以写一起,但你要做对应的判断,是射门还是守门,输出对应的文字。

每太明白你说每次是1的情况是怎样 ...
老师,我运行你的代码的时候 第二回合还是显示round1
无标1题.jpg
作者: crossin先生    时间: 2016-12-7 17:23
l0ve1o24 发表于 2016-12-7 12:57
老师,我运行你的代码的时候 第二回合还是显示round1

点球大战,每一轮是踢一次再守一次,两个都是第一轮
作者: sunxin2006    时间: 2016-12-8 00:54
虽然不会写但我就想吐个槽啊,点球哪来的平手 没出胜负要一直罚下去吧
作者: crossin先生    时间: 2016-12-8 15:05
sunxin2006 发表于 2016-12-8 00:54
虽然不会写但我就想吐个槽啊,点球哪来的平手 没出胜负要一直罚下去吧

这个程序是可以扩展的啦
作者: sunxin2006    时间: 2016-12-11 21:02
crossin先生 发表于 2016-12-8 15:05
这个程序是可以扩展的啦

老师说的对,自己还在慢慢啃…太痛苦了以前学的C++全交给大学老师了
作者: 努力的小白    时间: 2017-9-23 22:14
from random import choice

score_you=0
score_com=0
direction=['左边','中间','右边']

for i in range(5):
    print('====开始你的回合====')
    print('选择一波射门')
    print('左边','中间','右边')
    you=str(input())
    print('你射向了'+you)
    com=choice(direction)
    print('电脑扑向了'+com)
    if you!=com:
        print('球进了!')
        score_you+=1
    else:
        print('糟糕..')
    print('得分:%s(you),%s(com)'%(score_you,score_com))
    print('====开始你的回合====')
    print('选择一边射门')
    print('左边','中间','右边')
    you=str(input())
    print('你射向了'+you)
    com=choice(direction)
    print('电脑扑向了'+com)
    if you==com:
        print('电脑扑到了球')
    else:
        print('糟糕...')
    score_com+=1
print('得分:%s(you),%s(com)'%(score_you,score_com)

这个会有一个逻辑错误但我不知道该怎么改,而且有时候计分会出现问题,我是3.5版本的
求老师看看怎么改

QQ截图20170923221437.png (14.15 KB, 下载次数: 463)

QQ截图20170923221437.png


作者: crossin先生    时间: 2017-9-23 23:44
努力的小白 发表于 2017-9-23 22:14
from random import choice

score_you=0

什么逻辑错误?从你的截图没看出来
作者: 努力的小白    时间: 2017-9-24 11:22
向左边射门,电脑扑向中间,显示还是被扑到了
作者: crossin先生    时间: 2017-9-24 12:20
努力的小白 发表于 2017-9-24 11:22
向左边射门,电脑扑向中间,显示还是被扑到了

那把文件编码改成 gbk
#coding:gbk
作者: lubvi    时间: 2017-10-25 15:10
  1. from random import choice
  2. direction = ['left', 'center', 'right']
  3. print('欢迎来到点球大赛')
  4. player=0 #分数初始化
  5. computer=0
  6. for i in range(5): #5次循环等价于range(0, 5);
  7.     #你踢

  8.     print("Round%s---你踢,电脑守" % (i + 1))
  9.     you = input('请选择方向:left, center, right\n')
  10.     print('你踢向 ' + you)
  11.     com = choice(direction)
  12.     print('Computer扑向%s'%com)
  13.     if you != com:
  14.         print('Goal!你的得分+1')
  15.         player = player + 1

  16.     else:
  17.         print('Oops..很可惜,电脑得分+1.')
  18.         computer = computer + 1
  19.     print('Score%d(you) - Score%d(cp)' % (player, computer))
  20.     #电脑踢
  21.     #print('欢迎来到点球大赛')
  22.     print("Round%s---你守,电脑踢" % (i + 1))
  23.     you = input('请选择方向:left, center, right\n')
  24.     print('你扑向' + you)
  25.     com = choice(direction)
  26.     print('电脑踢向' + com)
  27.     if you == com:
  28.         print('Goal!你的得分+1')
  29.         player = player + 1
  30.     else:
  31.         print('Oops..可惜,电脑+1.')
  32.         computer = computer + 1
  33.     print('Score:%d(you) - Score:%d(cp)' % (player, computer))
复制代码

作者: 司南    时间: 2018-4-7 11:29
从昨天琢磨到今天,按照各位大神函数的方法,写了下面这个,锻炼了自己函数这部分吧,话说,,你们太狠了,佩服
  1. #football_game.py
  2. #司南 2018.04.07
  3. #方向设定
  4. direction=['left','middle','right']
  5. #扑救方
  6. def keeper(name='computer'):
  7.     import random
  8.     dic=random.choice(direction)
  9.     if name=='computer':
  10.         print('天哪,快看,守门员扑向了%s方向' %dic)
  11.     else:
  12.         print('天哪,快看,守门员%s扑向了%s方向' %(name,dic))
  13.     return dic
  14. #射门方
  15. def shoot(man):
  16.     dic=input('请输入射球方向:left/middle/right')
  17.     print('快看,%s能否射进呢?' %man)
  18.     return dic
  19. #比赛规则
  20. def fight(keeperdic,shootdic):
  21.     if keeperdic==shootdic:
  22.         print('omg,the goalkeeper win!')
  23.         return True
  24.     else:
  25.         print('天哪,球进了!!')
  26.         return False
  27. #开始比赛
  28. score_keeper=0
  29. score_shoot=0
  30. man=input('Hei,man please tell us your name:')
  31. round=eval(input('how many round do you do'))
  32. for i in range(round):
  33.     print('====Everybody the %dth round begin!===='%(i+1))
  34.     shootdic=shoot(man)
  35.     keeperdic=keeper()
  36.     res=fight(keeper,shootdic)
  37.     if res:
  38.         score_keeper=score_keeper+1
  39.     else:
  40.         score_shoot=score_shoot+1
  41. #判断总分胜负:
  42. if score_keeper>score_shoot:
  43.     print('伟大的守门员赢啦!!')
  44. elif score_keeper<score_shoot:
  45.     print('%s 你赢啦!'%man)
  46. else:
  47.     print('平手!')
复制代码

作者: 司南    时间: 2018-4-7 11:35
司南 发表于 2018-4-7 11:29
从昨天琢磨到今天,按照各位大神函数的方法,写了下面这个,锻炼了自己函数这部分吧,话说,,你们太狠了, ...

暂时的疑问是,写函数主要的目的是:用他的返回值,并提高代码的可重用性




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