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