我的程序在循环中生成print语句无穷大。不知道如何修复它

时间:2017-10-19 20:45:24

标签: python loops boolean

所以我试图学习Python,我编写了一个程序,主要是为了与用户和计算机一起玩游戏。

这个游戏的机制是:

有两个玩家:用户和计算机,他们交替轮换,直到其中一个达到100分或更高。

•用户永远是第一个玩家。

•如果任何一名玩家在回合结束时达到100分或以上,则游戏立即结束,而另一名玩家则不会再转弯。

•一转包括以下内容:玩家掷出6面模具       o如果他们掷1,他们得1分并且轮到他们。即使玩家有 从之前的掷骰积累的积分,如果他们掷1,那么他们在该回合的得分将是1分并且轮到他们。

o如果他们掷出任何其他数字,则将掷骰得分添加到回合总数中。

o然后,他们可以选择继续滚动或保持。玩家在转弯时可以滚动的次数没有限制。

•持有:如果玩家持有,他们将获得当前的回合总数和回合结束。如果, 例如,一名玩家掷出3,4和2,然后决定持有,他们得到9分。

•如果玩家是用户,他们可以选择是否愿意 每次滚动模具后继续滚动或保持并且不会得到1。

•如果玩家是计算机,他们将始终继续滚动,直到他们的回合总数为止 达到10或更高的值。

代码的问题是它在代码运行时产生无限的print语句。我将其设置为main函数中的Boolean语句,我在其中设置了is_user_turn = True。我已经对代码进行了整理,但有些内容我没有看到,需要帮助修复它。

以下是代码:

import random

def welcome():
    print("Welcome to Jeopordy")

def print_current_player(is_user_turn):

    if (is_user_turn == True):
        print("It is now human's turn")
    if (is_user_turn == False):
        print("It is now computer's turn")

def roll_die():

    roll = random(1,6)
    return roll

 def take_turn(is_user_turn,Computer_Hold):

    turn_total = 0

    if(is_user_turn == True):
        while(is_user_turn == True):
            roll = roll_die()

        if(roll == 1):
            return 1
        turn_total = turn_total + roll
        print("Your turn total is 1")
        is_user_turn = False

    else:
        print("You rolled a ",roll)
        turn_total = turn_total + roll
        print("Your turn total is ",turn_total)
        play = input("Do you want to roll gain (Y/N)?")

    if(play == 'N' or play == 'n'):
        is_user_turn = False
        return turn_total

    else:
        is_user_turn == True

    if(is_user_turn == False):

            while(is_user_turn == False):
                roll = roll_die()

            while(turn_total <= Computer_Hold):
                if(roll + turn_total <= Computer_Hold):
                    print("You rolled a ", roll)
                    turn_total = turn_total + roll
                    print("Your turn total is ",turn_total)

    return turn_total

def report_points(userscore,computerscore):
    print("computer: ",computerscore)
    print("user: ",userscore)

def get_next_player(is_user_turn):
    if(is_user_turn == True):
        is_user_turn = False
        return is_user_turn
    else:
        is_user_turn = True
        return is_user_turn

def main():

    Game_End_Points = 100
    Computer_Hold = 10
    is_user_turn = True
    userscore = 0
    computerscore = 0

    welcome()
    while(userscore <= Game_End_Points and computerscore <= Game_End_Points):
        print_current_player(is_user_turn)

        if(get_next_player(is_user_turn) == True):
            userscore = userscore + take_turn(is_user_turn,Computer_Hold)
            report_points(userscore,computerscore)
            get_next_player(is_user_turn)
        elif(get_next_player(is_user_turn) == False):
            computerscore = computerscore + take_turn(is_user_turn,Computer_Hold)
            report_points(userscore,computerscore)
            get_next_player(is_user_turn)

main()

3 个答案:

答案 0 :(得分:1)

我无法确定,但看起来这可能会导致循环,或者至少会对您造成一些问题:

Sub ntp2()
    Dim values As Variant
    Dim x As Long
    With ActiveWorkbook.Worksheets("originalNeg")
        values = .Range("A1" , .Range("I" & .Rows.Count).End(xlUp)).value
    End With

    For x = 2 To UBound(values)
        If values(x, 9) < 0 Then values(x, 9) = Abs(values(x, 9))
    Next

    With ActiveWorkbook.Worksheets("NewSheet")
        .Range("A1").Resize(UBound(values), UBound(values, 2)).value = values
    End With
End Sub

在else语句中,您正在检查is_user_turn是否为True而不是为其分配True值。看起来应该是{% section 'product-template' %}

答案 1 :(得分:1)

变量userscore将始终小于Game_End_Points,因此将是计算机得分,因此将无限循环,在循环中使用一些计数器。

while(userscore <= Game_End_Points and computerscore <= Game_End_Points):
    print_current_player(is_user_turn)
    userscore=userscore+10 #something like this
    computerscore+=10

答案 2 :(得分:1)

这部分是错误:

while(userscore <= Game_End_Points and computerscore <= Game_End_Points):
        print_current_player(is_user_turn)

这无限地执行这个功能:

def print_current_player(is_user_turn):

    if (is_user_turn == True):
        print("It is now human's turn")
    if (is_user_turn == False):
        print("It is now computer's turn")

因为你的功能不会改变用户核心或计算机核心,所以它会卡在那里。那是我现在的暗示。如果您需要进一步的帮助,请发表评论。 添加提示:“缩进” 另外,只检查了你的整个代码 - 似乎还有其他错误:)