Yu-Gi-Oh cards in Python 3 The Next CEO of Stack OverflowGenerating playing cardsASCII-fication of playing cardsFunction for shuffling cardsDynamic class instancing (with conditional parameters and methods) based on a dictionaryMy first finished Python program: a deck of cardsDeck of cards designMaking a deck of cards in PythonPoker Hand classifer part 3: Deck Object and 7 Card HandSimple Deck of Cards Python ProgramDeal three Poker hands of five cards each in Python
A small doubt about the dominated convergence theorem
The exact meaning of 'Mom made me a sandwich'
Calculator final project in Python
Make solar eclipses exceedingly rare, but still have new moons
How to write a definition with variants?
Chain wire methods together in Lightning Web Components
How to count occurrences of text in a file?
Why doesn't UK go for the same deal Japan has with EU to resolve Brexit?
Does Germany produce more waste than the US?
Is it professional to write unrelated content in an almost-empty email?
How do I align (1) and (2)?
How to prove a simple equation?
Is wanting to ask what to write an indication that you need to change your story?
How is this set of matrices closed under multiplication?
Why do airplanes bank sharply to the right after air-to-air refueling?
TikZ: How to reverse arrow direction without switching start/end point?
Would this house-rule that treats advantage as a +1 to the roll instead (and disadvantage as -1) and allows them to stack be balanced?
Why isn't the Mueller report being released completely and unredacted?
How to delete every two lines after 3rd lines in a file contains very large number of lines?
What did we know about the Kessel run before the prequels?
If Nick Fury and Coulson already knew about aliens (Kree and Skrull) why did they wait until Thor's appearance to start making weapons?
Why did CATV standarize in 75 ohms and everyone else in 50?
Why the difference in type-inference over the as-pattern in two similar function definitions?
Would a grinding machine be a simple and workable propulsion system for an interplanetary spacecraft?
Yu-Gi-Oh cards in Python 3
The Next CEO of Stack OverflowGenerating playing cardsASCII-fication of playing cardsFunction for shuffling cardsDynamic class instancing (with conditional parameters and methods) based on a dictionaryMy first finished Python program: a deck of cardsDeck of cards designMaking a deck of cards in PythonPoker Hand classifer part 3: Deck Object and 7 Card HandSimple Deck of Cards Python ProgramDeal three Poker hands of five cards each in Python
$begingroup$
I made a project in Python 3.7.1 that includes classes to create Yu-Gi-Oh cards. This isn't the entire game; it is just the cards itself. I will create the entire game later. I want feedback on how to improve my code.
class Deck(object):
def __init__(self, main_deck):
self.main_deck = main_deck
def add_normal_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
def add_extra_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 15:
return "You have to many cards in your extra deck (15)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
class Monster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
def effect(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class Spell(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class Trap(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class LinkMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, link_rating, description, recipe, links):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self.link_rating = link_rating
self.description = description
self.recipe = recipe
self.links = links
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class SynchroMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class XyzMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class FusionMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class PendulumMonster(object):
def __init__(self, name, effects, pendulum_effects, pendulum_scale, attributes, monster_type, atk, _def,
description, recipe):
self.name = name
self.effects = effects
self.pendulum_effects = pendulum_effects
self.pendulum_scale = pendulum_scale
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
def pendulum_activate(self):
"""
Activate the effect of this monster while in Spell/Trap Zone.
"""
for effect in self.pendulum_effects:
eval(effect)
python python-3.x playing-cards
$endgroup$
add a comment |
$begingroup$
I made a project in Python 3.7.1 that includes classes to create Yu-Gi-Oh cards. This isn't the entire game; it is just the cards itself. I will create the entire game later. I want feedback on how to improve my code.
class Deck(object):
def __init__(self, main_deck):
self.main_deck = main_deck
def add_normal_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
def add_extra_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 15:
return "You have to many cards in your extra deck (15)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
class Monster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
def effect(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class Spell(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class Trap(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class LinkMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, link_rating, description, recipe, links):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self.link_rating = link_rating
self.description = description
self.recipe = recipe
self.links = links
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class SynchroMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class XyzMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class FusionMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class PendulumMonster(object):
def __init__(self, name, effects, pendulum_effects, pendulum_scale, attributes, monster_type, atk, _def,
description, recipe):
self.name = name
self.effects = effects
self.pendulum_effects = pendulum_effects
self.pendulum_scale = pendulum_scale
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
def pendulum_activate(self):
"""
Activate the effect of this monster while in Spell/Trap Zone.
"""
for effect in self.pendulum_effects:
eval(effect)
python python-3.x playing-cards
$endgroup$
add a comment |
$begingroup$
I made a project in Python 3.7.1 that includes classes to create Yu-Gi-Oh cards. This isn't the entire game; it is just the cards itself. I will create the entire game later. I want feedback on how to improve my code.
class Deck(object):
def __init__(self, main_deck):
self.main_deck = main_deck
def add_normal_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
def add_extra_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 15:
return "You have to many cards in your extra deck (15)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
class Monster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
def effect(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class Spell(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class Trap(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class LinkMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, link_rating, description, recipe, links):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self.link_rating = link_rating
self.description = description
self.recipe = recipe
self.links = links
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class SynchroMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class XyzMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class FusionMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class PendulumMonster(object):
def __init__(self, name, effects, pendulum_effects, pendulum_scale, attributes, monster_type, atk, _def,
description, recipe):
self.name = name
self.effects = effects
self.pendulum_effects = pendulum_effects
self.pendulum_scale = pendulum_scale
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
def pendulum_activate(self):
"""
Activate the effect of this monster while in Spell/Trap Zone.
"""
for effect in self.pendulum_effects:
eval(effect)
python python-3.x playing-cards
$endgroup$
I made a project in Python 3.7.1 that includes classes to create Yu-Gi-Oh cards. This isn't the entire game; it is just the cards itself. I will create the entire game later. I want feedback on how to improve my code.
class Deck(object):
def __init__(self, main_deck):
self.main_deck = main_deck
def add_normal_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
def add_extra_cards(self, card_to_add, all_cards):
"""
Add monsters, spells and traps to the deck.
"""
if len(self.main_deck) > 15:
return "You have to many cards in your extra deck (15)."
else:
card_counter = 0
# Check to see how many copies of a card there are in your deck. Maximum 3 of the same card. Limited cards
# will be added eventually.
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
if card_counter == 3:
return "You have to many copies of that card in your deck (3)."
else:
if card_to_add not in all_cards:
return "That card hasn't been added to the game yet (" + card_to_add + ")."
else:
self.main_deck.append(card_to_add)
class Monster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
def effect(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class Spell(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class Trap(object):
def __init__(self, name, effects):
self.name = name
self.effects = effects
def activate(self):
"""
Activate the effect of this spell.
"""
for effect in self.effects:
eval(effect)
class LinkMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, link_rating, description, recipe, links):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self.link_rating = link_rating
self.description = description
self.recipe = recipe
self.links = links
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class SynchroMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class XyzMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class FusionMonster(object):
def __init__(self, name, effects, attributes, monster_type, atk, _def, description, recipe):
self.name = name
self.effects = effects
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
class PendulumMonster(object):
def __init__(self, name, effects, pendulum_effects, pendulum_scale, attributes, monster_type, atk, _def,
description, recipe):
self.name = name
self.effects = effects
self.pendulum_effects = pendulum_effects
self.pendulum_scale = pendulum_scale
self.attributes = attributes
self.type = monster_type
self.atk = atk
self._def = _def
self.description = description
self.recipe = recipe
self.materials = recipe
def activate(self):
"""
Activate the effect of this monster.
"""
for effect in self.effects:
eval(effect)
def pendulum_activate(self):
"""
Activate the effect of this monster while in Spell/Trap Zone.
"""
for effect in self.pendulum_effects:
eval(effect)
python python-3.x playing-cards
python python-3.x playing-cards
edited 2 hours ago
Jamal♦
30.5k11121227
30.5k11121227
asked 2 hours ago
Jerry CuiJerry Cui
739
739
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
- I know you're trying to abbreviate "defense," but you could consider writing the whole thing out instead of making inconsistent naming with the preceding underscore. As such, you could write out "attack" as well to keep it more consistent.
- Perhaps all those monster classes should be consolidates somehow. There are a lot of repeated
self
statements and similar functions, making the code harder to follow and likely maintain. The
60
,15
, and3
are "magic numbers" (numbers without some kind of given context), and from where they are, they could be harder to maintain.Although Python doesn't actual constants like other languages, you can still do something similar above the functions:
MAX_DECK_CARDS = 60
MAX_EXTRA_CARDS = 15
MAX_EXTRA_CARDS = 3
There's a grammatical error here:
"You have to many copies of that card in your deck (3)."
It should be "too" instead of "to."
When incrementing by 1:
card_counter += 1
You can just use the
++
operator:card_counter++
$endgroup$
1
$begingroup$
Yes to everything except++
. That isn't a thing in Python. Please remove it.
$endgroup$
– Reinderien
27 mins ago
add a comment |
$begingroup$
Trim redundant else
...here:
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
The else
isn't needed because you've already returned. This pattern happens in a few places.
Lose some loops
This:
card_counter = 0
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
can be
card_counter = sum(1 for card in self.main_deck if card == card_to_add)
However, that exposes a larger issue - you shouldn't be keeping copies of the same card value in your deck data structure. Instead, consider something like a dictionary, whose keys are the card names, and the values are card counts. That would really simplify much of your code.
Don't eval
Just don't. There's never a good reason. Make effects
an iterable of functions, and simply call them.
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216560%2fyu-gi-oh-cards-in-python-3%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
- I know you're trying to abbreviate "defense," but you could consider writing the whole thing out instead of making inconsistent naming with the preceding underscore. As such, you could write out "attack" as well to keep it more consistent.
- Perhaps all those monster classes should be consolidates somehow. There are a lot of repeated
self
statements and similar functions, making the code harder to follow and likely maintain. The
60
,15
, and3
are "magic numbers" (numbers without some kind of given context), and from where they are, they could be harder to maintain.Although Python doesn't actual constants like other languages, you can still do something similar above the functions:
MAX_DECK_CARDS = 60
MAX_EXTRA_CARDS = 15
MAX_EXTRA_CARDS = 3
There's a grammatical error here:
"You have to many copies of that card in your deck (3)."
It should be "too" instead of "to."
When incrementing by 1:
card_counter += 1
You can just use the
++
operator:card_counter++
$endgroup$
1
$begingroup$
Yes to everything except++
. That isn't a thing in Python. Please remove it.
$endgroup$
– Reinderien
27 mins ago
add a comment |
$begingroup$
- I know you're trying to abbreviate "defense," but you could consider writing the whole thing out instead of making inconsistent naming with the preceding underscore. As such, you could write out "attack" as well to keep it more consistent.
- Perhaps all those monster classes should be consolidates somehow. There are a lot of repeated
self
statements and similar functions, making the code harder to follow and likely maintain. The
60
,15
, and3
are "magic numbers" (numbers without some kind of given context), and from where they are, they could be harder to maintain.Although Python doesn't actual constants like other languages, you can still do something similar above the functions:
MAX_DECK_CARDS = 60
MAX_EXTRA_CARDS = 15
MAX_EXTRA_CARDS = 3
There's a grammatical error here:
"You have to many copies of that card in your deck (3)."
It should be "too" instead of "to."
When incrementing by 1:
card_counter += 1
You can just use the
++
operator:card_counter++
$endgroup$
1
$begingroup$
Yes to everything except++
. That isn't a thing in Python. Please remove it.
$endgroup$
– Reinderien
27 mins ago
add a comment |
$begingroup$
- I know you're trying to abbreviate "defense," but you could consider writing the whole thing out instead of making inconsistent naming with the preceding underscore. As such, you could write out "attack" as well to keep it more consistent.
- Perhaps all those monster classes should be consolidates somehow. There are a lot of repeated
self
statements and similar functions, making the code harder to follow and likely maintain. The
60
,15
, and3
are "magic numbers" (numbers without some kind of given context), and from where they are, they could be harder to maintain.Although Python doesn't actual constants like other languages, you can still do something similar above the functions:
MAX_DECK_CARDS = 60
MAX_EXTRA_CARDS = 15
MAX_EXTRA_CARDS = 3
There's a grammatical error here:
"You have to many copies of that card in your deck (3)."
It should be "too" instead of "to."
When incrementing by 1:
card_counter += 1
You can just use the
++
operator:card_counter++
$endgroup$
- I know you're trying to abbreviate "defense," but you could consider writing the whole thing out instead of making inconsistent naming with the preceding underscore. As such, you could write out "attack" as well to keep it more consistent.
- Perhaps all those monster classes should be consolidates somehow. There are a lot of repeated
self
statements and similar functions, making the code harder to follow and likely maintain. The
60
,15
, and3
are "magic numbers" (numbers without some kind of given context), and from where they are, they could be harder to maintain.Although Python doesn't actual constants like other languages, you can still do something similar above the functions:
MAX_DECK_CARDS = 60
MAX_EXTRA_CARDS = 15
MAX_EXTRA_CARDS = 3
There's a grammatical error here:
"You have to many copies of that card in your deck (3)."
It should be "too" instead of "to."
When incrementing by 1:
card_counter += 1
You can just use the
++
operator:card_counter++
answered 1 hour ago
Jamal♦Jamal
30.5k11121227
30.5k11121227
1
$begingroup$
Yes to everything except++
. That isn't a thing in Python. Please remove it.
$endgroup$
– Reinderien
27 mins ago
add a comment |
1
$begingroup$
Yes to everything except++
. That isn't a thing in Python. Please remove it.
$endgroup$
– Reinderien
27 mins ago
1
1
$begingroup$
Yes to everything except
++
. That isn't a thing in Python. Please remove it.$endgroup$
– Reinderien
27 mins ago
$begingroup$
Yes to everything except
++
. That isn't a thing in Python. Please remove it.$endgroup$
– Reinderien
27 mins ago
add a comment |
$begingroup$
Trim redundant else
...here:
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
The else
isn't needed because you've already returned. This pattern happens in a few places.
Lose some loops
This:
card_counter = 0
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
can be
card_counter = sum(1 for card in self.main_deck if card == card_to_add)
However, that exposes a larger issue - you shouldn't be keeping copies of the same card value in your deck data structure. Instead, consider something like a dictionary, whose keys are the card names, and the values are card counts. That would really simplify much of your code.
Don't eval
Just don't. There's never a good reason. Make effects
an iterable of functions, and simply call them.
$endgroup$
add a comment |
$begingroup$
Trim redundant else
...here:
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
The else
isn't needed because you've already returned. This pattern happens in a few places.
Lose some loops
This:
card_counter = 0
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
can be
card_counter = sum(1 for card in self.main_deck if card == card_to_add)
However, that exposes a larger issue - you shouldn't be keeping copies of the same card value in your deck data structure. Instead, consider something like a dictionary, whose keys are the card names, and the values are card counts. That would really simplify much of your code.
Don't eval
Just don't. There's never a good reason. Make effects
an iterable of functions, and simply call them.
$endgroup$
add a comment |
$begingroup$
Trim redundant else
...here:
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
The else
isn't needed because you've already returned. This pattern happens in a few places.
Lose some loops
This:
card_counter = 0
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
can be
card_counter = sum(1 for card in self.main_deck if card == card_to_add)
However, that exposes a larger issue - you shouldn't be keeping copies of the same card value in your deck data structure. Instead, consider something like a dictionary, whose keys are the card names, and the values are card counts. That would really simplify much of your code.
Don't eval
Just don't. There's never a good reason. Make effects
an iterable of functions, and simply call them.
$endgroup$
Trim redundant else
...here:
if len(self.main_deck) > 60:
return "You have to many cards in your deck (60)."
else:
The else
isn't needed because you've already returned. This pattern happens in a few places.
Lose some loops
This:
card_counter = 0
for card in self.main_deck:
if card == card_to_add:
card_counter += 1
can be
card_counter = sum(1 for card in self.main_deck if card == card_to_add)
However, that exposes a larger issue - you shouldn't be keeping copies of the same card value in your deck data structure. Instead, consider something like a dictionary, whose keys are the card names, and the values are card counts. That would really simplify much of your code.
Don't eval
Just don't. There's never a good reason. Make effects
an iterable of functions, and simply call them.
answered 21 mins ago
ReinderienReinderien
5,035925
5,035925
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216560%2fyu-gi-oh-cards-in-python-3%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown