0

这个程序是一个高尔夫球场的用户界面。Player 和 League 类不应更改。用户界面允许用户在文本文件中输入每个球员的 9 洞得分,并返回每个球员的总分、标准杆和小鸟球。在输入最后一组分数后,我收到了这个错误(我不知道如何修复),所以它似乎在输入分数时验证分数,但最后也在验证它们,它们是不再存在。我需要这样做,以便在输入后对其进行检查,仅此而已。我不知道该怎么做

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())
4

1 回答 1

1

在您分配tomain的返回值时,这是因为没有声明。所以被传递给试图在循环中对其进行迭代的对象,但它失败了,因为它不是你可以循环的东西。enterScoreholeScoresNoneenterScorereturnNoneisValidScoreforNone

于 2013-04-04T03:01:54.643 回答