当前位置:嗨网首页>书籍在线阅读

27-小程序_石头、纸、剪刀

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.11 小程序:石头、纸、剪刀

让我们利用前面学到的编程概念,创建一个简单的“石头、纸、剪刀”游戏。输出结果如下所示:

ROCK,  PAPER,  SCISSORS
0 Wins, 0 Losses, 0 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
p
PAPER versus... 
PAPER
It is a tie! 
0 Wins, 1 Losses, 1 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
s
SCISSORS  versus...
PAPER
You win! 
1 Wins, 1 Losses, 1 Ties
Enter your move: (r)ock (p)aper (s)cissors or (q)uit
q

在文件编辑器中输入以下源代码,并将文件另存为rpsGame.py:

import  random,  sys
print('ROCK,  PAPER,  SCISSORS') 
# These variables keep track of the number of wins, losses, and ties.
wins = 0
losses  =  0
ties = 0
while  True:  #  The  main  game  loop. 
    print('%s  Wins,  %s  Losses,  %s  Ties'  %  (wins,  losses,  ties)) 
    while True: # The  player input loop. 
        print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
        playerMove = input()
        if playerMove == 'q': 
             sys.exit()  #  Quit  the  program. 
        if playerMove == 'r' or playerMove == 'p' or playerMove == 's':
             break  #  Break  out  of  the  player  input  loop. 
        print('Type one of r, p, s, or q.') 
    # Display what the player chose: 
    if playerMove == 'r': 
         print('ROCK versus...') 
    elif playerMove == 'p': 
         print('PAPER versus...') 
    elif playerMove == 's': 
         print('SCISSORS versus...') 
    # Display what the computer chose:
    randomNumber = random.randint(1, 3) 
    if randomNumber == 1: 
        computerMove = 'r' 
        print('ROCK') 
    elif randomNumber == 2:
         computerMove = 'p'
         print('PAPER') 
    elif randomNumber == 3:
         computerMove = 's'
         print('SCISSORS') 
    # Display and record the win/loss/tie: 
    if playerMove == computerMove: 
        print('It  is  a  tie!') 
        ties = ties + 1
    elif playerMove == 'r' and computerMove == 's':
        print('You   win!') 
       wins  =  wins  +  1
    elif playerMove == 'p' and computerMove == 'r':
        print('You   win!') 
       wins  =  wins  +  1
    elif playerMove == 's' and computerMove == 'p':
        print('You   win!') 
       wins  =  wins  +  1
    elif playerMove == 'r' and computerMove == 'p':
        print('You  lose!') 
       losses  =  losses  +  1
    elif playerMove == 'p' and computerMove == 's':
        print('You  lose!')
        losses  =  losses  +  1
    elif playerMove == 's' and computerMove == 'r':
        print('You lose!') 
        losses  =  losses  +  1

我们从头开始逐行查看这段代码。

import  random,  sys
print('ROCK,  PAPER,  SCISSORS')
# These variables keep track of the number of wins, losses, and ties.
wins = 0
losses  =  0
ties = 0

首先,导入 randomsys 模块,以便程序可以调用 random.randint()sys.exit() 函数。我们还设置了3个变量来跟踪玩家所获得的胜利、失败和平局。

while  True:  #  The  main  game  loop. 
    print('%s  Wins,  %s  Losses,  %s  Ties'  %  (wins,  losses,  ties)) 
    while True: # The  player input loop. 
        print('Enter your move: (r)ock (p)aper (s)cissors or (q)uit')
        playerMove = input()
        if playerMove == 'q': 
             sys.exit()  #  Quit  the  program. 
        if playerMove == 'r' or playerMove == 'p' or playerMove == 's': 
              break  #  Break  out  of  the  player  input  loop. 
        print('Type one of r, p, s, or q.') 

该程序在一个 while 循环内使用了另一个 while 循环。第一个循环是主程序循环,在这个循环的每次迭代中,玩家玩一局石头、纸和剪刀游戏。第二个循环要求玩家输入,并一直循环,直到玩家输入 rpsq 作为其选择。 rps 分别对应于石头、纸和剪刀;而 q 则表示玩家打算退出,在这种情况下,将调用 sys.exit() 函数并退出程序。如果玩家输入了 rps ,则执行会跳出循环;否则,程序会提醒玩家输入 rpsq ,然后返回循环的起点。

    # Display what the player chose: 
    if playerMove == 'r':
     print('ROCK versus...') 
    elif playerMove == 'p': 
     print('PAPER versus...') 
    elif playerMove == 's': 
     print('SCISSORS versus...') 

玩家的选择会显示在屏幕上。

    # Display what the computer chose: 
    randomNumber = random.randint(1, 3) 
    if randomNumber == 1: 
     computerMove = 'r' 
     print('ROCK') 
    elif randomNumber == 2: 
     computerMove = 'p' 
     print('PAPER') 
    elif randomNumber == 3:
     computerMove = 's' 
     print('SCISSORS') 

接下来,随机选择计算机的选择。由于 random.randint() 函数只能返回随机数,因此它返回的整数值1、2或3存储在名为 randomNumber 的变量中。程序根据 randomNumber 中的整数,在 computerMove 中存储 'r''p''s' 字符串,并显示计算机的选择。

    # Display and record the win/loss/tie: 
    if playerMove == computerMove: 
     print('It  is  a  tie!')
     ties = ties + 1
    elif playerMove == 'r' and computerMove == 's': 
     print('You   win!') 
     wins  =  wins  +  1
    elif playerMove == 'p' and computerMove == 'r': 
     print('You   win!')
     wins  =  wins  +  1
    elif playerMove == 's' and computerMove == 'p':
     print('You   win!')
     wins  =  wins  +  1
    elif playerMove == 'r' and computerMove == 'p': 
     print('You  lose!')
     losses  =  losses  +  1
    elif playerMove == 'p' and computerMove == 's':
     print('You  lose!')
     losses  =  losses  +  1
    elif playerMove == 's' and computerMove == 'r': 
     print('You lose!')
     losses  =  losses  +  1

最后,该程序比较 playerMovecomputerMove 中的字符串,并将结果显示在屏幕上。它还会相应增加 winslossesties 变量的值。一旦执行结束,它将跳回到主程序循环的开始处,开始另一局游戏。