关于python:我的程序在循环中生成print语句无穷大。

My program produces print statement infinity in a loop. Don't know how to fix it

所以我正在尝试学习python,我已经编写了一个程序,基本上是为与用户和计算机玩游戏而设计的。

这个游戏的机制是:

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

?用户总是第一个玩家。

?如果任何一个玩家在回合结束时达到100点或更多,游戏将立即结束,另一个玩家不会再获得回合。

?一个回合包括以下内容:玩家滚动一个6面骰子。o如果他们投1分,他们得1分,然后他们的回合就结束了。即使玩家前一轮的累积积分,如果他们投1分,那么他们在该轮的得分为1分,并且他们的回合结束。

o如果他们滚动任何其他数字,滚动分数将被添加到回合总数中。

o然后,他们可以选择继续滚动或保持。对一个玩家在一个回合中可以滚动多少次没有限制。

?持球:如果一个球员持球,他们将获得当前回合的总得分,并且回合结束。如果,例如,一个玩家掷3、4和2,然后决定保持,他们得9分。

?如果玩家是用户,他们可以选择是否每次滚动模具后继续滚动或保持不动,不获得1。

?如果玩家是电脑,他们将一直滚动到他们的回合总数达到值10或更高。

代码的问题在于它在代码运行时生成一个无限的print语句。我把它归结为主函数中的布尔语句,在这里我设置为"user"turn=true。我已经对代码进行了分类,但有一些东西我看不到,需要帮助修复它。

代码如下:

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
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()


这部分是错误:

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

这将无限地执行此函数:

1
2
3
4
5
6
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")

因为你的函数不会改变用户分数或计算机分数,所以它会被卡住。这是我现在的暗示。如果您需要进一步的帮助,只需征求意见。添加提示:"缩进"另外,刚刚检查了整个代码——似乎还有其他错误:)


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

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


我不能确定,但看起来这可能导致了循环,或者至少会给您带来一些问题:

1
2
3
4
5
6
if(play == 'N' or play == 'n'):
    is_user_turn = False
    return turn_total

else:
    is_user_turn == True

在else语句中,您检查的是"user"turn是否为true,而不是为其赋值为true。看起来应该是EDOCX1[0]