#!/usr/bin/python3
# Constants - These constants will help improve the readability of your code
SHELDON = "Sheldon"
LEONARD = "Leonard"
LEONARD_WINS = 0
SHELDON_WINS = 1
TIE = 2
ROCK = 0
PAPER = 1
SCISSORS = 2
LIZARD = 3
SPOCK = 4
# Variables - Use these variables in your code to track the program's progress
leonardsShape = 0
sheldonsShape = 0
roundsToPlay = 0
leonardsWinCount = 0
sheldonsWinCount = 0
tieCount = 0
def convertShapeToText(shape):
choices = {ROCK : "Rock", PAPER : "Paper", SCISSORS : "Scissors", LIZARD : "Lizard", SPOCK : "Spock"}
return choices.get(shape, "default")
# =======================================================================================================
# DO NOT MODIFY any of the code above this point
# ========================================================================================================
# It's OK to change these constants (use the shape names above - ROCK, SCISSORS, PAPER, LIZARD, SPOCK)
# See the Initial Values in the provided examples
SHELDONS_FIRST_SHAPE = ROCK
LEONARDS_FIRST_SHAPE = ROCK
NUMBER_OF_ROUNDS = 4
print ("Jason Bolling")
print ("project 4: Rock Paper Scissors Lizard Spock")
def determineLeonardsNextShape(roundOutcome) :
global leonardsShape
global sheldonsShape
if leonardsShape == 0 :
if roundOutcome == 0 :
return determineLeonardsNextShape == 0
elif roundOutcome == 1 :
if sheldonsShape == 4 :
return determineLeonardsNextShape == 3
elif sheldonsShape == 3 :
return determineLeonardsNextShape == 0
elif sheldonsShape == 0 :
return determineLeonardsNextShape == 1
elif sheldonsShape == 1 :
return determineLeonardsNextShape == 2
elif sheldonsShape == 2 :
return determineLeonardsNextShape == 4
elif roundOutcome == 2 :
if leonardsShape == 0 :
return determineLeonardsNextShape == 1
elif leonardsShape == 2 :
return determineLeonardsNextShape == 2
elif leonardsShape == 2 :
return determineLeonardsNextShape == 4
elif leonardsShape == 3 :
return determineLeonardsNextShape == 0
elif leonardsShape == 4 :
return determineLeonardsNextShape == 3
elif leonardsShape == 1 :
if roundOutcome == 0 :
return determineLeonardsNextShape == 1
elif roundOutcome == 1 :
if sheldonsShape == 4 :
return determineLeonardsNextShape == 3
elif sheldonsShape == 3 :
return determineLeonardsNextShape == 0
elif sheldonsShape == 0 :
return determineLeonardsNextShape == 1
elif sheldonsShape == 1 :
return determineLeonardsNextShape == 2
elif sheldonsShape == 2 :
return determineLeonardsNextShape == 4
elif roundOutcome == TIE :
if leonardsShape == 0 :
return determineLeonardsNextShape == 1
elif leonardsShape == 1 :
return determineLeonardsNextShape == 2
elif leonardsShape == 2 :
return determineLeonardsNextShape == 4
elif leonardsShape == 3 :
return determineLeonardsNextShape == 0
elif leonardsShape == 4 :
return determineLeonardsNextShape == 3
elif leonardsShape == 2 :
if roundOutcome == 0 :
return determineLeonardsNextShape == 2
elif roundOutcome == 1 :
if sheldonsShape == 4 :
return determineLeonardsNextShape == 3
elif sheldonsShape == 3 :
return determineLeonardsNextShape == 0
elif sheldonsShape == 0 :
return determineLeonardsNextShape == 1
elif sheldonsShape == 1 :
return determineLeonardsNextShape == 2
elif sheldonsShape == 2 :
return determineLeonardsNextShape == 4
elif roundOutcome == 2 :
if leonardsShape == 0 :
return determineLeonardsNextShape == 1
elif leonardsShape == 1 :
return determineLeonardsNextShape == 2
elif leonardsShape == 2 :
return determineLeonardsNextShape == 4
elif leonardsShape == 3 :
return determineLeonardsNextShape == 0
elif leonardsShape == 4 :
return determineLeonardsNextShape == 3
elif leonardsShape == 3 :
if roundOutcome == 0 :
return determineLeonardsNextShape == 3
elif roundOutcome == 1 :
if sheldonsShape == 4 :
return determineLeonardsNextShape == 3
elif sheldonsShape == 3 :
return determineLeonardsNextShape == 0
elif sheldonsShape == 0 :
return determineLeonardsNextShape == 1
elif sheldonsShape == 1 :
return determineLeonardsNextShape == 2
elif sheldonsShape == 2 :
return determineLeonardsNextShape == 4
elif roundOutcome == 2 :
if leonardsShape == 0 :
return determineLeonardsNextShape == 1
elif leonardsShape == 1 :
return determineLeonardsNextShape == 2
elif leonardsShape == 2 :
return determineLeonardsNextShape == 4
elif leonardsShape == 3 :
return determineLeonardsNextShape == 0
elif leonardsShape == 4 :
return determineLeonardsNextShape == 3
elif leonardsShape == 4 :
if roundOutcome == 0 :
return determineLeonardsNextShape == 4
elif roundOutcome == 1 :
if sheldonsShape == 4 :
return determineLeonardsNextShape == 3
elif sheldonsShape == 3 :
return determineLeonardsNextShape == 0
elif sheldonsShape == 0 :
return determineLeonardsNextShape == 1
elif sheldonsShape == 1 :
return determineLeonardsNextShape == 2
elif sheldonsShape == 2 :
return determineLeonardsNextShape == 4
elif roundOutcome == 2 :
if leonardsShape == 0 :
return determineLeonardsNextShape == 1
elif leonardsShape == 1 :
return determineLeonardsNextShape == 2
elif leonardsShape == 2 :
return determineLeonardsNextShape == 4
elif leonardsShape == 3 :
return determineLeonardsNextShape == 0
elif leonardsShape == 4 :
return determineLeonardsNextShape == 3
return
def determineSheldonsNextShape(roundOutcome):
global leonardsShape
global sheldonsShape
if roundsToPlay == {2, 4} :
return sheldonsShape == 4
elif sheldonsShape == 0 :
if roundOutcome == 1 :
return determineSheldonsNextShape == 0
elif roundOutcome == 0 :
return determineSheldonsNextShape == 1
elif roundOutcome == 2 :
return determineSheldonsNextShape == 3
elif sheldonsShape == 1 :
if roundOutcome == 1 :
return determineSheldonsNextShape == 0
elif roundOutcome == 0 :
return determineSheldonsNextShape == 1
elif roundOutcome == 2 :
return determineSheldonsNextShape == 3
elif sheldonsShape == 3 :
if roundOutcome == 1 :
return determineSheldonsNextShape == 0
elif roundOutcome == 0 :
return determineSheldonsNextShape == 1
elif roundOutcome == 2 :
return determineSheldonsNextShape == 3
elif sheldonsShape == 4 :
if roundOutcome == 1 :
return determineSheldonsNextShape == 0
elif roundOutcome == 0 :
return determineSheldonsNextShape == 1
elif roundOutcome == 2 :
return determineSheldonsNextShape == 3
elif sheldonsShape == 2 :
if roundOutcome == 1 :
return determineSheldonsNextShape == 0
elif roundOutcome == 0 :
return determineSheldonsNextShape == 1
elif roundOutcome == 2 :
return determineSheldonsNextShape == 3
return
def determineWinner():
global leonardsShape
global sheldonsShape
if sheldonsShape == 0 and leonardsShape == 0 :
return determineWinner == TIE
elif sheldonsShape == 0 and leonardsShape == 1 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 0 and leonardsShape == 2 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 0 and leonardsShape == 3 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 0 and leonardsShape == 4 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 1 and leonardsShape == 0 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 1 and leonardsShape == 1 :
return determineWinner == TIE
elif sheldonsShape == 1 and leonardsShape == 2 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 1 and leonardsShape == 3 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 1 and leonardsShape == 4 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 2 and leonardsShape == 0 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 2 and leonardsShape == 1 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 2 and leonardsShape == 2 :
return determineWinner == TIE
elif sheldonsShape == 2 and leonardsShape == 3 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 2 and leonardsShape == 4 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 3 and leonardsShape == 0 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 3 and leonardsShape == 1 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 3 and leonardsShape == 2 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 3 and leonardsShape == 3 :
return determineWinner == TIE
elif sheldonsShape == 3 and leonardsShape == 4 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 4 and leonardsShape == 0 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 4 and leonardsShape == 1 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 4 and leonardsShape == 2 :
return determineWinner == SHELDON_WINS
elif sheldonsShape == 4 and leonardsShape == 3 :
return determineWinner == LEONARD_WINS
elif sheldonsShape == 4 and leonardsShape == 4 :
return determineWinner == TIE
return
def getBetterShape(shape):
if shape == 0 :
return getBetterShape == 1
elif shape == 1 :
return getBetterShape == 2
elif shape == 2 :
return getBetterShape == 4
elif shape == 3 :
return getBetterShape == 0
elif shape == 4 :
return getBetterShape == 3
return
# =======================================================================================================
# DO NOT MODIFY any of the code below this point
# =======================================================================================================
def displayResults():
print("{0}'s initial move: {1}\n{2}'s initial move: {3}\n\n".format(SHELDON, convertShapeToText(SHELDONS_FIRST_SHAPE), LEONARD, convertShapeToText(LEONARDS_FIRST_SHAPE)))
if sheldonsWinCount > leonardsWinCount:
print("{0} wins! ".format(SHELDON))
elif leonardsWinCount > sheldonsWinCount:
print("{0} wins! ".format(LEONARD))
else:
print("Tie Game!")
if not sheldonsWinCount == leonardsWinCount:
print("{0} won {1} game(s), {2} won {3} game(s), and they tied {4} game(s)\n".format(SHELDON, sheldonsWinCount, LEONARD, leonardsWinCount, tieCount))
else:
print("{0} and {1} each won {2} game(s) and tied {3} game(s)\n".format(SHELDON, LEONARD, sheldonsWinCount, tieCount))
def playGame():
global leonardsShape, sheldonsShape
for x in range(0, roundsToPlay):
outcome = determineWinner()
updateScores(outcome)
leonardsShape = determineLeonardsNextShape(outcome)
sheldonsShape = determineSheldonsNextShape(outcome)
def updateScores(roundOutcome):
global leonardsWinCount, sheldonsWinCount, tieCount
if roundOutcome == SHELDON_WINS:
sheldonsWinCount = sheldonsWinCount + 1
elif roundOutcome == LEONARD_WINS:
leonardsWinCount = leonardsWinCount + 1
else:
tieCount = tieCount + 1
def main():
print("Ima Python Programmer\nRock-Paper-Scissors-Lizard-Spock\n")
playGame()
displayResults()
leonardsShape = LEONARDS_FIRST_SHAPE
sheldonsShape = SHELDONS_FIRST_SHAPE
roundsToPlay = NUMBER_OF_ROUNDS
main() # This must be the LAST statement of the program (DO NOT INDENT)
所以输出总是leonard赢了每场比赛,不管到目前为止的变化,这个输出没有变化,sheldon从来没有赢过任何比赛。我想知道我在代码中哪里出错了。 我试着将代码修改为“石头”、“剪刀”等,以及数字表示,但代码仍然读取结果,因为伦纳德总是赢
您的问题在于代码的以下部分:
返回函数和
int
之间的比较?我想你想做的只是返回一个特定的值。你知道吗
您可以在
playGame
和updateScores
中跟踪问题:determineWinner
是一个函数,而LEONARD_WINS
/SHELDON_WINS
/TIE
都是ints
(您可以使用^{determineWinner
中进行的所有比较都将始终返回False
updateScores
将始终用False
调用roundOutcome
将永远是False
roundOutcome == LEONARD_WINS
总是True
(False == 0
)因此,伦纳德总是赢。
同样的逻辑适用于
determineLeonardsNextShape
和determineSheldonsNextShape
,它们也总是返回False
,并通过== 0
比较。你知道吗将所有
return determine<something> == <value>
替换为return <value>
:我想在那之后你会得到想要的行为:
相关问题 更多 >
编程相关推荐