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