在Python中需要有关While循环的帮助

时间:2016-11-19 04:05:28

标签: python-2.7 python-3.x

我正在尝试使用python制作一个非常简单的游戏。

游戏是蛇梯,玩家从头到尾(0 - 100)

from random import randint
from time import sleep

board = ["1" ,"2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ,"12", "13", "14", "15",
     "16", "17", "18", "19", "20", "21" ,"22", "23", "24", "25", "26", "27", "28", "29",
     "30", "31" ,"32", "33", "34", "35", "36", "37", "38", "39", "40", "41" ,"42", "43",
     "44", "45", "46", "47", "48", "49", "50", "51" ,"52", "53", "54", "55", "56", "57",
     "58", "59", "60", "61" ,"62", "63", "64", "65", "66", "67", "68", "69", "70", "71",
     "72", "73", "74", "75", "76", "77", "78", "79", "80", "81" ,"82", "83", "84", "85",
     "86", "87", "88", "89", "90", "91" ,"92", "93", "94", "95", "96", "97", "98", "99",
     "100"]

def print_board(board):
    print ("   ".join(board[0:10]))    #first row
    print ("   ".join(board[10:20]))    #second row
    print ("   ".join(board[20:30]))    #third row
    print ("   ".join(board[30:40]))    #fourth row
    print ("   ".join(board[40:50]))    #fifth row
    print ("   ".join(board[50:60]))    #six row
    print ("   ".join(board[60:70]))    #seventh row
    print ("   ".join(board[70:80]))    #eight row
    print ("   ".join(board[80:90]))    #ninth row
    print ("   ".join(board[90:100]))    #tenth row


dice = randint(1, 6)   #random number 1 - 6
def roll_dice(dice):       #function to roll the dice
    print ("Rolling the dice...")
    sleep(1.5)
    print ("..."), dice
    return


player_score = 0    #starting point / score

def player(player_score):    #for Information
    print ("You are now at %d") % player_score

def main():                          #game starts
    print ("Let's play a game")
    while player_score < 100:        #This is the problem, the while doesn't recognize player_score
        print_board(board)
        player_choice = input("put R for Rolling or I for Information: ")
        player_choice = player_choice.upper() 
        if player_choice == "R":
            roll_dice(dice)
            if dice == 1:
                player_score = player_score + 1
                print ("Player moves.. ")
                player(player_score)     
            elif dice == 2:
                player_score = player_score + 2
                print ("Player moves.. ")
                player(player_score)
            elif dice == 3:
                player_score = player_score + 3
                print ("Player moves.. ")
                player(player_score)
            elif dice == 4:
                player_score = player_score + 4
                print ("Player moves.. ")
                player(player_score)
            elif dice == 5:
                player_score = player_score + 5
                print ("Player moves.. ")
                player(player_score)
            elif dice == 6:
                player_score = player_score + 6
                print ("Player moves.. ")
                player(player_score)
        elif player_choice == "I":
            player(player_score)
    else:
        print ("Congratulations, you won the game!")

但问题是,循环甚至没有启动。它说:

  

“分配前引用的局部变量'player_score'。”

另外:如果已经添加了player_score,我怎么能再次将游戏继续到player_choice?

2 个答案:

答案 0 :(得分:0)

在main

中定义你的变量player_score = 0
def main(): 
    player_score = 0                         #game starts
    print ("Let's play a game")
    while player_score < 100:        #This is the problem, the while doesn't recognize player_score
        print_board(board)
        player_choice = input("put R for Rolling or I for Information: ")
        player_choice = player_choice.upper() 
        if player_choice == "R":
            roll_dice(dice)
            if dice == 1:
                player_score = player_score + 1
                print ("Player moves.. ")
                player(player_score)     
            elif dice == 2:
                player_score = player_score + 2
                print ("Player moves.. ")
                player(player_score)
            elif dice == 3:
                player_score = player_score + 3
                print ("Player moves.. ")
                player(player_score)
            elif dice == 4:
                player_score = player_score + 4
                print ("Player moves.. ")
                player(player_score)
            elif dice == 5:
                player_score = player_score + 5
                print ("Player moves.. ")
                player(player_score)
            elif dice == 6:
                player_score = player_score + 6
                print ("Player moves.. ")
                player(player_score)
        elif player_choice == "I":
            player(player_score)
    else:
        print ("Congratulations, you won the game!")

游戏结束后,您可以再次请求用户再次运行游戏。如果他接受,那么再从你开始游戏中调用你的方法

答案 1 :(得分:0)

你可以尝试

def print_board(board):
    print ("   ".join(board[0:11]))    #first row
    print ("   ".join(board[11:20]))    #second row
    print ("   ".join(board[21:30]))    #third row
    print ("   ".join(board[31:40]))    #fourth row
    print ("   ".join(board[41:50]))    #fifth row
    print ("   ".join(board[51:60]))    #six row
    print ("   ".join(board[61:70]))    #seventh row
    print ("   ".join(board[71:80]))    #eight row
    print ("   ".join(board[81:90]))    #ninth row
    print ("   ".join(board[91:100])) 

def roll_dice(): #function to roll the dice
    dice = randint(1, 6)
    print ("Rolling the dice...")
    sleep(1.5)
    print ("..."), dice
    return dice
 #game starts
def main():
    player_score = 0

    print ("Let's play a game")
    while player_score < 100:
        print_board(board)
        player_choice = raw_input("put R for Rolling or I for Information: ")
        player_choice = player_choice.upper()
        if player_choice == "R":
            dice = roll_dice()
            if dice == 1:
                player_score = player_score + 1
                print "Player moves.. ", dice
            elif dice == 2:
                player_score = player_score +  2
                print "Player moves.. ", dice
            elif dice == 3:
                player_score = player_score + 3
                print "Player moves.. ", dice
            elif dice == 4:
                player_score = player_score + 4
                print "Player moves.. ", dice
            elif dice == 5:
                player_score = player_score + 5
                print "Player moves..",dice

            elif dice == 6:
                player_score = player_score + 6
                print "Player moves..", dice

            print "You are now at %d" % player_score
    elif player_choice == "I":
        print "You are now at %d" % player_score
else:
    print ("Congratulations, you won the game!")

您看到raw_input()的原因是因为input()给出了未定义R的错误以及您看到索引略有变化的原因是因为您的代码生成了两次数字 而且你看到没有播放器功能,因为只有一个命令