0
該程序是一個高爾夫回合的用戶界面。球員和聯賽的課程不應該改變。用戶界面允許用戶在文本文件中爲每個玩家輸入9個洞分數,併爲每個玩家返回一個總分數,分數和小鳥。在輸入最後一組分數後,我得到了這個錯誤(我不知道該如何解決),因此它似乎在輸入分數時驗證分數,但最後也驗證了分數,它們是不再存在。我需要使它們在輸入後進行檢查,就是這樣。我不知道如何做到這一點python'NoneType'對象不可迭代
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
main()
File "/Users/tinydancer9454/Documents/python/golfRound.py", line 102, in main
isValidScore(holeScores)
File "/Users/tinydancer9454/Documents/python/golfRound.py", line 120, in isValidScore
for score in holeScores:
TypeError: 'NoneType' object is not iterable
下面的代碼:
class Player:
""" Represents a player in the golf league """
PAR = [4, 3, 4, 3, 4, 5, 4, 3, 5]
""" par for each of the 9 holes """
def __init__(self, name):
""" creates a Player and keeps track of stats """
self.__name = name
self.__pars = 0
self.__birdies = 0
self.__gross = 0
def getName(self):
""" returns a player's name """
return self.__name
def getGross(self):
""" returns a player's gross score """
return self.__gross
def getPars(self):
""" returns number of pars made """
return self.__pars
def getBirdies(self):
""" returns number of birdies made """
return self.__birdies
def recordScores(self, holeScores):
""" mutator method that uses the results of one round of play
(9 holes) to update a player's stats """
self.__gross = sum(holeScores)
self.__findparsandbirdies(holeScores)
def __findparsandbirdies(self, scores):
""" helper method that finds the number of pars and birdies """
pars = 0
birdies = 0
hole = 0
for score in scores:
if score == Player.PAR[hole]:
pars += 1
if score == Player.PAR[hole] - 1:
birdies += 1
hole += 1
self.__pars = pars
self.__birdies = birdies
def __str__(self):
""" returns a string representation of a player """
return 'a Player named ' + self.__name
class League:
""" represents the players of a golf league """
def __init__(self, fileName = 'players.txt'):
""" creates a list of Player objects from the
names stored in the file specified """
self.__playerList = []
datafile = open(fileName, 'r')
for line in datafile:
playerName = line.rstrip()
player = Player(playerName)
self.__playerList.append(player)
def getNumPlayers(self):
""" returns the number of players is the league """
return len(self.__playerList)
def getPlayerbyPosition(self, position):
""" returns the player at the specified position """
return self.__playerList[position]
def getPlayerbyName(self, name):
""" returns the player with the specified name """
for player in self.__playerList:
if player.getName() == name:
return player
return None
def __str__(self):
return 'a golf league with ' + str(self.getNumPlayers()) + ' players'
def main():
"""The input and output for the program"""
l= League()
players= []
holeScores= enterScores(l, players)
isValidScore(holeScores)
output(players)
def enterScores(l, players):
"""enter the scores"""
for position in range(l.getNumPlayers()):
inputScore= input("Please enter a list of the player's scores: ")
holeScores= (int(score) for score in inputScore.split(','))
for score in holeScores:
while not isValidScore(holeScores):
holeScores= input("Please enter a valid list of scores: ")
p= l.getPlayerbyPosition(position)
players.append(p.recordScores(holeScores))
p.recordScores(holeScores)
def isValidScore(holeScores):
"""checks if the scores entered for a single hole are 1 to 10, inclusive"""
for score in holeScores:
if not int:
return False
elif score < 1:
return False
elif score > 10:
return False
return True
def output(grossScore, pars, birdies):
"""prints output"""
for player in players:
print(player.getName())
print('Gross score:', player.getGross())
print('Pars: ', player.getPars())
print('Birdies: ', player.getBirdies())
那麼返回語句應該是什麼?迴歸洞分數?它應該與「洞穴分數」還是其他地方一致? – tinydancer9454 2013-04-04 03:03:37
那時'holescores'丟失了,因爲你沒有在任何地方跟蹤它們。順便說一句,你已經在輸入後驗證它們,那麼爲什麼在過程結束時再次驗證它們呢? – benselme 2013-04-04 03:09:30
我試圖讓它們在每次輸入後才被驗證,我沒有意識到它在最後再次驗證它們。我明白你在說什麼,我將如何跟蹤每組分數? – tinydancer9454 2013-04-04 03:13:22