Python: Code is ignoring the if and else

MRAB python at mrabarnett.plus.com
Fri Aug 2 21:38:02 EDT 2013


On 03/08/2013 01:40, kevin4fong at gmail.com wrote:
> I'm trying to create a game of Go Fish in Python. But I've stumbled onto a little problem that I can't seem to figure out how to deal with.
>
> There is a human player (player 0) and three computer players (from 1-3). The human player goes first and chooses a target player. And then a card rank (for example, the player could target player two and choose jacks, then the computer would have to give the player all its jacks).
>
> What I have so far is below but the problem I'm having is right at the bottom of the code. So far, the code generates a deck, creates hands for every player, and then shows the player his/her cards. Then the player is asked which computer player he/she wants to target as well as the rank of cards.
>
> The problem I'm having is with the last set of lines (the def player_0_hitman) at the bottom of the code. Any help would be much appreciated. There are basically three issues I'm having problems with.
>
>      Basically, my code is ignoring the if's and else's. I don't get why. Everything appears to be positioned correctly, but for some odd reason, even after an if, the program also runs the else as well.
>
>      the "hit" is not being returned. Even though in the definition, I have the hit set to hit = hit - 1 for the last else, it still reruns the whole definition again as if it the hit was 1
>
>      I'm trying to use the count line to count how many cards are being transferred so the program will tell the player how many cards he gains when he gets a successful guess but I only get a statement saying I got 1 card each time no matter what (whether I get no cards or I get more than one).
>
> I understand the basics of what I need to do but I can't seem to get a working code for this. I've tried changing the "for" to "if" but I get all sorts of errors so I don't think that will work. Then I tried converting "hit" into another code before entering the definition, changing it while inside, then converting it back before returning it but that also seems to do nothing, and I still get the same issues.
>
[snip]

> def player_0_hitman(hit):
>      for card in pHands[target_player]:
>          if target_card[0] == card[0]:
>              count = pHands[target_player].count(card)
>              pHands[0].append(card)
>              pHands[target_player].remove(card)
>              ShowMessage("HIT: " + str(count) + " card(s) transferred")
>      else:
>          if target_card[0] != card[0]:
>              top_card = GetTopCard(sDeck)
>              pHands[0].append(top_card)
>              if top_card[0] == target_card[0]:
>                  ShowMessage("HIT: LUCKILY Player 0 has fished up a rank <" + str(top_card[0]) + ">!!!")
>              else:
>                  ShowMessage("MISS: You fished up the rank <" + str(top_card[0]) + ">")
>                  hit = hit - 1
>              return hit
>
You have "else" lined up with "for".

In Python a "for" loop can have an "else" clause, which is run if it 
didn't "break" out of the loop but finished.



More information about the Python-list mailing list