Loop/Nested Loop problems Python 2.7

点点圈 提交于 2019-12-13 17:23:02

问题


I want the program to ask each of the five players the seven questions, calculate the player score and then display a list of each players score eg Points for week 1 player1 43 player2 26 player3 38 etc etc

Then ask the players the questions again and do the same for week 2.

Currently the program will only display the first players score, then ask the questions to all five players again but only display the second players score, it repeats this five times while only iterating through the players.

Where am I going wrong, any help will be much appreciated

 playerList=[]
def Playeradd():
    playerList.append(item)
def Playercreate():
    global item
    item = raw_input("Enter Player name: ")

    Playeradd()

[Playercreate()for _ in range (5)]
print "You have selected", len(playerList), "players for your squad, Your selected squad is.."

for item in playerList:
    print item

player =Playercreate
scorecheck=[]
x=0
totalscore=0
def pointsaward():
    global scorecheck, totalscore
    y=1
    player=y
    x=0
    while x < 5:
        print "Please enter score for ", playerList[x]
        for player in playerList: 
            print "Did "+player+" play in the game?"
            play = raw_input(" Did he play the match (yes or no?) ")
            if play == "yes":
                play1=2
                goalS= int(raw_input(" Did he score, if so how many?"))
                goalS=goalS*5
                goalA= int(raw_input(" How many assists?"))
                goalA=goalA*3
                motm= raw_input(" Did he win man of the match (yes or no?) ")
                if motm == "yes":
                    motm1=5
                else:
                    motm1=0
                yelC=raw_input(" Did he recieve a yellow card (yes or no?) ")
                if yelC == "yes":
                    yelC1= -1
                else:
                    yelC1=0
                redC=raw_input(" Did he recieve a red card (yes or no?) ")
                if redC == "yes":
                    redC1= -5
                else:
                    redC1=0                              
                PenM=raw_input(" Did he miss a peno(yes or no?) ")
                if PenM == "yes":
                    PenM1= -3
                else:
                    PenM1=0
            else:
                play1=0
                print player+" did not play"
        playerpoint1= play1+goalS+goalA+yelC1+redC1+PenM1
        PlayerandScore= [playerList[x],playerpoint1,]
        scorecheck.append(PlayerandScore)
        totalscore+= playerpoint1
        x+= 1
        y+= 1
        print "This player has scored a total of ", PlayerandScore, " this week "
pointsaward()

回答1:


Ok so I think if you change how your call the information a little by using another function and you use a dictionary instead of a list in this case for getting the information of player/score you will be better able to manage changes to the code and also have an easier time manipulating the data.

Her is what I got so far.

playerList=[]
def Playeradd():
    playerList.append(item)
def Playercreate():
    global item
    item = raw_input("Enter Player name: ")

    Playeradd()

[Playercreate()for _ in range (5)]
print "You have selected", len(playerList), "players for your squad, Your selected squad is.."

for item in playerList:
    print item

player =Playercreate
scorecheck={} # using a dictionary rather than a list. Because you only have to values to look at this to me seams the best option for displaying data.
x=0
totalscore=0
def pointsaward():
    global x, totalscore,scorecheck
    scorecheck={}
    while x < 5:
        print "Please enter score for ", playerList[x]
        for player in playerList:
            print "Did "+player+" play in the game?"
            play = raw_raw_input(" Did he play the match (yes or no?) ")
            if play == "yes":
                play1=2
                goalS= int(raw_input(" Did he score, if so how many?"))
                goalS=goalS*5
                goalA= int(raw_input(" How many assists?"))
                goalA=goalA*3
                motm= raw_input(" Did he win man of the match (yes or no?) ")
                motm1=0
                yelC1=0
                redC1=0
                PenM1=0
                if motm == "yes":
                    motm1=5 #this was missing from the math in total points
                else:
                    motm1=0
                yelC=raw_input(" Did he recieve a yellow card (yes or no?) ")
                if yelC == "yes":
                    yelC1= -1
                else:
                    yelC1=0
                redC=raw_input(" Did he recieve a red card (yes or no?) ")
                if redC == "yes":
                    redC1= -5
                else:
                    redC1=0                              
                PenM=raw_input(" Did he miss a peno(yes or no?) ")
                if PenM == "yes":
                    PenM1= -3
                else:
                    PenM1=0
                playerpoint1= play1+goalS+goalA+yelC1+redC1+PenM1+motm1
                scorecheck[playerList[x]] = playerpoint1
                x+= 1
            else:
                play1=0
                scorecheck[playerList[x]] = (player+" did not play")
                x+= 1

def printResults(): # added a simple function run the point adding function and print the results.
    pointsaward()
    print "This player has scored a total of ", scorecheck, " this week "
printResults()

This should result in something returned like the following. Note: I changed the amount of players being looked at to 2 to make testing go faster. so this information below will only show the results of looking at 2 players.

Enter Player name: ads
Enter Player name: qwe
You have selected 2 players for your squad, Your selected squad is..
ads
qwe
Please enter score for  ads
Did ads play in the game?
 Did he play the match (yes or no?) yes
 Did he score, if so how many?5
 How many assists?5
 Did he win man of the match (yes or no?) yes
 Did he recieve a yellow card (yes or no?) no
 Did he recieve a red card (yes or no?) no
 Did he miss a peno(yes or no?) no
Did qwe play in the game?
 Did he play the match (yes or no?) no
This player has scored a total of  {'ads': 47, 'qwe': 'qwe did not play'}  this week 


来源:https://stackoverflow.com/questions/43583374/loop-nested-loop-problems-python-2-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!