Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的程序在循环中无限次地生成打印语句。Don';我不知道如何修理它_Python_Loops_Boolean - Fatal编程技术网

Python 我的程序在循环中无限次地生成打印语句。Don';我不知道如何修理它

Python 我的程序在循环中无限次地生成打印语句。Don';我不知道如何修理它,python,loops,boolean,Python,Loops,Boolean,因此,我正在尝试学习Python,并且我已经编写了一个程序,该程序基本上是为与用户和计算机一起玩游戏而设计的 这个游戏的机制是: 有两个玩家:用户和计算机,他们轮流轮换,直到其中一个达到100分或更高 •用户始终是第一个玩家 •如果任何玩家在回合结束时达到100分或以上,游戏将立即结束,而另一名玩家不会获得另一回合 •一个回合包括以下内容:玩家掷一个6面骰子。 o如果他们掷1,他们得1分,他们的回合结束。即使一个球员 前几次掷骰的累积分数,如果掷1,则该回合的分数为1分,回合结束 o如果他们掷任

因此,我正在尝试学习Python,并且我已经编写了一个程序,该程序基本上是为与用户和计算机一起玩游戏而设计的

这个游戏的机制是:

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

•用户始终是第一个玩家

•如果任何玩家在回合结束时达到100分或以上,游戏将立即结束,而另一名玩家不会获得另一回合

•一个回合包括以下内容:玩家掷一个6面骰子。
o如果他们掷1,他们得1分,他们的回合结束。即使一个球员 前几次掷骰的累积分数,如果掷1,则该回合的分数为1分,回合结束

o如果他们掷任何其他号码,掷骰分数将添加到总回合数中

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

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

•如果玩家是用户,他们可以选择是否想要
每次滚动模具后,继续滚动或保持,且未获得1

•如果玩家是计算机,他们将始终继续滚动,直到轮到总次数
达到值10或更高

代码的问题在于,当代码运行时,它会生成一个无限打印语句。我在主函数中设置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()
随机导入
def welcome():
打印(“欢迎来到Jeopordy”)
def打印当前播放器(是否轮到用户):
如果(is_user_turn==True):
打印(“现在轮到人类了”)
如果(is_user_turn==False):
打印(“现在轮到计算机了”)
def roll_die():
滚动=随机(1,6)
回程辊
def轮到(是用户轮到,计算机保持):
总匝数=0
如果(is_user_turn==True):
while(is_user_turn==True):
滚转=滚转模具()
如果(滚动==1):
返回1
回合总数=回合总数+掷骰
打印(“您的总回合数为1”)
是用户吗
其他:
打印(“您滚动了一个”,滚动)
回合总数=回合总数+掷骰
打印(“您的总轮次为”,总轮次为)
play=输入(“您是否希望滚动增益(Y/N)?”)
如果(播放='N'或播放='N'):
是用户吗
返回回合总数
其他:
_user_turn==真吗
如果(is_user_turn==False):
while(is_user_turn==False):
滚转=滚转模具()

虽然(turn_total我不能确定,但这可能会导致循环,或者至少会给您带来一些问题:

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

else:
    is_user_turn == True

在else语句中,您正在检查is_user_turn是否为True,而不是为其分配一个True值。看起来它应该是
is_user_turn=True

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

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

else:
    is_user_turn == True

在else语句中,您正在检查is_user_turn是否为True,而不是为其赋值。看起来它应该是
is_user_turn=True

变量
userscore
将始终小于
游戏结束点
,因此将是计算机分数,因此将无限循环,在循环

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

while(userscore变量
userscore
将始终小于
游戏结束点
以及计算机分数,因此将无限循环,在循环中使用一些计数器

while(userscore <= Game_End_Points and computerscore <= Game_End_Points):
    print_current_player(is_user_turn)
    userscore=userscore+10 #something like this
    computerscore+=10
while(userscore这部分是错误:

while(userscore <= Game_End_Points and computerscore <= Game_End_Points):
        print_current_player(is_user_turn)
因为你的函数不会改变userscore或computerscore,所以它会被卡在那里。这是我现在的提示。如果你需要进一步的帮助,请询问评论。 增加提示:“缩进” 另外,刚刚检查了整个代码——似乎还有其他错误:)

这部分就是错误:

while(userscore <= Game_End_Points and computerscore <= Game_End_Points):
        print_current_player(is_user_turn)
因为你的函数不会改变userscore或computerscore,所以它会被卡在那里。这是我现在的提示。如果你需要进一步的帮助,请询问评论。 增加提示:“缩进”
另外,刚刚检查了整个代码——似乎还有其他错误:)

欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于此处。在您发布MCVE代码并准确描述问题之前,我们无法有效帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。我们不需要所有的备份ound和您的整个程序。请精简您的问题。您已经缩小了问题的范围-太好了!只需发布该部分!您只是在while循环后的8行缩进中有一个错误。它们应该是while循环的一部分。您是否期望
main()中的
is\u user\u turn
改变,比如通过调用
get_next_player
?因为它不会改变。(顺便说一句,考虑到该函数的功能,该函数的名称非常容易误导,而且该函数是一个不必要的复杂实现,基本上是
返回而不是用户
)欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于此处。只有在您发布MCVE代码并准确发布之前,我们才能有效地帮助您