【问题标题】:Need help on While loop in Python [duplicate]需要有关 Python 中的 While 循环的帮助 [重复]
【发布时间】:2017-04-03 00:21:04
【问题描述】:

我正在尝试使用 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?

【问题讨论】:

    标签: python-2.7 python-3.x


    【解决方案1】:

    在 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!")
    

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

    【讨论】:

    • 您好,非常感谢!我能再问一件事吗?现在游戏运行了,骰子不会每次都掷出随机数。它总是停留在同一个数字上。它有什么问题?
    • 也在掷骰子的函数中定义数字。如果以上答案是正确的,请接受这是正确答案的答案。
    【解决方案2】:

    你可以试试

    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 未定义的错误,而您看到索引略有变化的原因是因为您的代码两次生成了一些数字 而且你看到没有播放器功能,因为只有一个命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 2016-11-30
      • 2023-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多