Contents
- card2.py
- card_byid.py
- card.py
- deck.py
- war.py
card2.py 1/5
[top][prev][next]
# Card class and demonstration of use.
# This version of the code includes the getRummyValue method
# by CSCI111
import test
class Card:
"""
A class to represent a standard playing card. The ranks are ints:
2-10 for numbered cards, 11=Jack, 12=Queen, 13=King, 14=Ace.
The suits are strings: 'clubs', 'spades', 'hearts', 'diamonds'.
"""
def __init__(self, rank, suit):
"Constructs a new Card object with the given rank (an int) and suit (a string)."
self._rank = rank
self._suit = suit
def __str__(self):
"Returns a string describing the card as 'rank of suit'."
result = ""
if self._rank == 11:
result += "Jack"
elif self._rank == 12:
result += "Queen"
elif self._rank == 13:
result += "King"
elif self._rank == 14:
result += "Ace"
else:
result += str(self._rank)
result += " of " + self._suit
return result
def getRank(self):
"Returns rank."
return self._rank
def getSuit(self):
"Returns suit."
return self._suit
def getRummyValue(self):
"Return the rummy value for the card."
if self._rank < 10:
return 5
elif self._rank < 14:
return 10
else:
return 15
def getCardColor(self):
"Return the color of the card, either the string 'red' or 'black'"
if self._suit == "diamonds" or self._suit == "hearts":
return "red"
else:
return "black"
# These are functions, not part of the class, because they are
# not indented under the class.
def testRummyValue():
"Function to verify that Card's getRummyValue() method works correctly."
# create the expected results for cards with ranks 2-14, inclusive
expectedResults = [5]*9 + [10] * 4 + [15]
for suit in ["hearts", "diamonds", "clubs", "spades"]:
for x in range(2, 15):
c = Card(x, suit)
expected = expectedResults[x-1] # the indices are a bit off
actual = c.getRummyValue()
if expected != actual:
print("ERROR! Expected", c, "'s Rummy value to be", expected)
print("\t but was", actual)
def main():
c1 = Card(14, "spades")
print(c1)
c2 = Card(13, "hearts")
print(c2)
c3 = Card(2, "diamonds")
print(c3)
print(c1, "'s rummy value is", c1.getRummyValue())
print(c2, "'s rummy value is", c2.getRummyValue())
print(c3, "'s rummy value is", c3.getRummyValue())
test.testEqual( c1.getSuit(), "spades")
test.testEqual( c2.getSuit(), "hearts")
test.testEqual( c1.getRank(), 14)
test.testEqual( c3.getRank(), 2)
test.testEqual( str(c1), "Ace of spades")
test.testEqual( str(c2), "King of hearts")
test.testEqual( str(c3), "2 of diamonds")
# test get rummy value
test.testEqual( c1.getRummyValue(), 15 )
test.testEqual( c2.getRummyValue(), 10 )
test.testEqual( c3.getRummyValue(), 5 )
# test the card color
test.testEqual( c1.getCardColor(), "black" )
test.testEqual( c2.getCardColor(), "red" )
test.testEqual( c3.getCardColor(), "red" )
# created code to automatically check the rummy code
testRummyValue()
#myString = c3.__str__()
#myString2 = str(c3)
#print(myString)
#print(myString2)
# Since I am probably going to import this script into another script,
# I only want to call main() when it's *not* imported
if __name__ == '__main__':
main()
card_byid.py 2/5
[top][prev][next]
# Demonstrates abstraction: has same interface as card.py
# but different implementation, e.g., defining state using an id.
class Card:
"""
A class to represent a standard playing card. The ranks are ints:
2-10 for numbered cards, 11=Jack, 12=Queen, 13=King, 14=Ace.
The suits are strings: 'clubs', 'spades', 'hearts', 'diamonds'.
"""
def __init__(self, rank, suit):
"Constructor for class Card takes int rank and string suit."
# card ids go from 2 to 55
self._cardid = rank
if suit == "clubs":
self._cardid += 13
elif suit == "hearts":
self._cardid += 26
elif suit == "diamonds":
self._cardid += 39
def __str__(self):
"Returns a string describing the card as 'rank of suit'."
result = ""
rank = self.getRank()
if rank == 11:
result += "Jack"
elif rank == 12:
result += "Queen"
elif rank == 13:
result += "King"
elif rank == 14:
result += "Ace"
else:
result += str(rank)
result += " of " + self.getSuit()
return result
def getRank(self):
"Returns rank."
return (self._cardid-2) % 13 + 2
def getSuit(self):
"Returns suit."
suits = ["spades", "clubs", "hearts", "diamonds"]
whichsuit = (self._cardid-2)//13
return suits[whichsuit]
def blackJackValue(self):
"Returns the value of the card in Black Jack"
if self.getRank() == 14:
# alternatively, this could be 11
return 1
elif self.getRank() > 10:
return 10
else:
return self.getRank()
def getRummyValue(self):
"Returns the value of the card in Rummy"
def main():
c1 = Card(14, "spades")
print( c1 )
print( c1.getRank() )
#print( "Black Jack Value", c1.blackJackValue())
print( "Rummy Value", c1.getRummyValue())
c2 = Card(13, "hearts")
print(c2)
print(c2.getRank())
print("Black Jack Value", c2.blackJackValue())
#print("Rummy Value", c2.getRummyValue())
if __name__ == '__main__':
main()
card.py 3/5
[top][prev][next]
# Card class and demonstration of use
# by CSCI111
import test
class Card:
"""
A class to represent a standard playing card. The ranks are ints:
2-10 for numbered cards, 11=Jack, 12=Queen, 13=King, 14=Ace.
The suits are strings: 'clubs', 'spades', 'hearts', 'diamonds'.
"""
def __init__(self, rank, suit):
"Constructs a new Card object with the given rank (an int) and suit (a string)."
self._rank = rank
self._suit = suit
def __str__(self):
"Returns a string describing the card as 'rank of suit'."
result = ""
if self._rank == 11:
result += "Jack"
elif self._rank == 12:
result += "Queen"
elif self._rank == 13:
result += "King"
elif self._rank == 14:
result += "Ace"
else:
result += str(self._rank)
result += " of " + self._suit
return result
def getRank(self):
"Returns rank."
return self._rank
def getSuit(self):
"Returns suit."
return self._suit
def main():
c1 = Card(14, "spades")
print(c1)
c2 = Card(13, "hearts")
print(c2)
c3 = Card(2, "diamonds")
print(c3)
test.testEqual( c1.getSuit(), "spades")
test.testEqual( c2.getSuit(), "hearts")
test.testEqual( c1.getRank(), 14)
test.testEqual( c3.getRank(), 2)
test.testEqual( str(c1), "Ace of spades")
test.testEqual( str(c2), "King of hearts")
test.testEqual( str(c3), "2 of diamonds")
# showing other ways to call the str method
#myString = c3.__str__()
#myString2 = str(c3)
#print(myString)
#print(myString2)
# Since I am probably going to import this script into another script,
# I only want to call main() when it's *not* imported
if __name__ == '__main__':
main()
deck.py 4/5
[top][prev][next]
# Implementation of a deck of cards.
# by CSCI 111
from card import *
class Deck:
""" A class to represent a deck of playing cards."""
def __init__(self):
"""Creates a new Deck object, filled with one of each
unique card."""
self.listOfCards = []
for suit in ["clubs","hearts","diamonds","spades"]:
for rank in range(2,15):
self.listOfCards.append(Card(rank, suit))
def main():
d = Deck()
print(d)
print("The number of cards remaining in the deck is", d.numRemaining())
# Since I am probably going to import this script into another script,
# I only want to call main() when it's *not* imported
if __name__ == "__main__":
main()
war.py 5/5
[top][prev][next]
# Simple implementation of the game of War
# There are some issues in simulation's accuracy.
# Sara Sprenkle
from card import *
from random import *
def main():
player1Card = genRandomCard()
player2Card = genRandomCard()
print("Player 1 draws a", player1Card)
print("Player 2 draws a", player2Card)
print()
print(" --> ", end="")
def genRandomCard():
""" Returns a randomly generated Card object.
Assumes an infinite number of decks of cards available."""
suits = ["hearts", "diamonds", "clubs", "spades"]
randRank = randint(2, 14) # generate a random rank
randSuit = suits[randint(0, 3)] # generate a random suit
# create a new Card object from randomly generated rank and suit
randomCard = Card( randRank, randSuit )
return randomCard
main()
Generated by GNU Enscript 1.6.6.