Python - Fishing Simulator The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Turn-based battle simulatorBattle simulator RPGScoring and grading answers against an answer keyC++ Quiz game w/questions in random orderPython PID simulator controller outputRandom MP3 Selector and PlayerMonty Hall Simulator - Python“The Story of a Tree” solved using depth-first searchPython CS GO Case SimulatorGame of Life simulator, Python 3
Word for: a synonym with a positive connotation?
Do I have Disadvantage attacking with an off-hand weapon?
60's-70's movie: home appliances revolting against the owners
Word to describe a time interval
how can a perfect fourth interval be considered either consonant or dissonant?
Do working physicists consider Newtonian mechanics to be "falsified"?
Why did Peik Lin say, "I'm not an animal"?
Deal with toxic manager when you can't quit
Are spiders unable to hurt humans, especially very small spiders?
US Healthcare consultation for visitors
Why can't wing-mounted spoilers be used to steepen approaches?
Is it ethical to upload a automatically generated paper to a non peer-reviewed site as part of a larger research?
What information about me do stores get via my credit card?
Presidential Pardon
What other Star Trek series did the main TNG cast show up in?
Do warforged have souls?
What was the last x86 CPU that did not have the x87 floating-point unit built in?
Is an up-to-date browser secure on an out-of-date OS?
Example of compact Riemannian manifold with only one geodesic.
How did the audience guess the pentatonic scale in Bobby McFerrin's presentation?
Could an empire control the whole planet with today's comunication methods?
Did the UK government pay "millions and millions of dollars" to try to snag Julian Assange?
Was credit for the black hole image misappropriated?
Intergalactic human space ship encounters another ship, character gets shunted off beyond known universe, reality starts collapsing
Python - Fishing Simulator
The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Turn-based battle simulatorBattle simulator RPGScoring and grading answers against an answer keyC++ Quiz game w/questions in random orderPython PID simulator controller outputRandom MP3 Selector and PlayerMonty Hall Simulator - Python“The Story of a Tree” solved using depth-first searchPython CS GO Case SimulatorGame of Life simulator, Python 3
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I'm new to Python, for a school project I created a "fishing simulator". Basically, use of random. I know that my code is repetitive towards the end but I don't know how to simplify it.
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
t = random.randrange(1, 7)
if t == 1:
a += 1
print("You caught a cod!")
elif t == 2:
b += 1
print("You caught a salmon!")
elif t == 3:
c += 1
print("You caught a shark!")
elif t == 4:
d += 1
print("You caught a wildfish!")
elif t >= 5:
e += 1
print("You caught nothing!")
python beginner python-3.x
New contributor
$endgroup$
add a comment |
$begingroup$
I'm new to Python, for a school project I created a "fishing simulator". Basically, use of random. I know that my code is repetitive towards the end but I don't know how to simplify it.
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
t = random.randrange(1, 7)
if t == 1:
a += 1
print("You caught a cod!")
elif t == 2:
b += 1
print("You caught a salmon!")
elif t == 3:
c += 1
print("You caught a shark!")
elif t == 4:
d += 1
print("You caught a wildfish!")
elif t >= 5:
e += 1
print("You caught nothing!")
python beginner python-3.x
New contributor
$endgroup$
$begingroup$
Why did you tag this question as python-2.x? I'm not convinced that it would work correctly in Python 2.
$endgroup$
– 200_success
1 hour ago
$begingroup$
One other thing not in either of the answers so far, would be to consider using a dictionary for yourfishes
, eg.fishes = 'cod': 0, 'salmon': 0,...
, then it becomes far more readable when adding (fishes['cod'] += 1
) and dumping (for fish, count in fishes.items():nt print("fish -> count".format(**'fish': fish, 'count': count))
) values related fish caught.
$endgroup$
– S0AndS0
36 mins ago
add a comment |
$begingroup$
I'm new to Python, for a school project I created a "fishing simulator". Basically, use of random. I know that my code is repetitive towards the end but I don't know how to simplify it.
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
t = random.randrange(1, 7)
if t == 1:
a += 1
print("You caught a cod!")
elif t == 2:
b += 1
print("You caught a salmon!")
elif t == 3:
c += 1
print("You caught a shark!")
elif t == 4:
d += 1
print("You caught a wildfish!")
elif t >= 5:
e += 1
print("You caught nothing!")
python beginner python-3.x
New contributor
$endgroup$
I'm new to Python, for a school project I created a "fishing simulator". Basically, use of random. I know that my code is repetitive towards the end but I don't know how to simplify it.
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
t = random.randrange(1, 7)
if t == 1:
a += 1
print("You caught a cod!")
elif t == 2:
b += 1
print("You caught a salmon!")
elif t == 3:
c += 1
print("You caught a shark!")
elif t == 4:
d += 1
print("You caught a wildfish!")
elif t >= 5:
e += 1
print("You caught nothing!")
python beginner python-3.x
python beginner python-3.x
New contributor
New contributor
edited 1 hour ago
Austin Hastings
7,7671236
7,7671236
New contributor
asked 2 hours ago
MattthecommieMattthecommie
464
464
New contributor
New contributor
$begingroup$
Why did you tag this question as python-2.x? I'm not convinced that it would work correctly in Python 2.
$endgroup$
– 200_success
1 hour ago
$begingroup$
One other thing not in either of the answers so far, would be to consider using a dictionary for yourfishes
, eg.fishes = 'cod': 0, 'salmon': 0,...
, then it becomes far more readable when adding (fishes['cod'] += 1
) and dumping (for fish, count in fishes.items():nt print("fish -> count".format(**'fish': fish, 'count': count))
) values related fish caught.
$endgroup$
– S0AndS0
36 mins ago
add a comment |
$begingroup$
Why did you tag this question as python-2.x? I'm not convinced that it would work correctly in Python 2.
$endgroup$
– 200_success
1 hour ago
$begingroup$
One other thing not in either of the answers so far, would be to consider using a dictionary for yourfishes
, eg.fishes = 'cod': 0, 'salmon': 0,...
, then it becomes far more readable when adding (fishes['cod'] += 1
) and dumping (for fish, count in fishes.items():nt print("fish -> count".format(**'fish': fish, 'count': count))
) values related fish caught.
$endgroup$
– S0AndS0
36 mins ago
$begingroup$
Why did you tag this question as python-2.x? I'm not convinced that it would work correctly in Python 2.
$endgroup$
– 200_success
1 hour ago
$begingroup$
Why did you tag this question as python-2.x? I'm not convinced that it would work correctly in Python 2.
$endgroup$
– 200_success
1 hour ago
$begingroup$
One other thing not in either of the answers so far, would be to consider using a dictionary for your
fishes
, eg. fishes = 'cod': 0, 'salmon': 0,...
, then it becomes far more readable when adding (fishes['cod'] += 1
) and dumping (for fish, count in fishes.items():nt print("fish -> count".format(**'fish': fish, 'count': count))
) values related fish caught.$endgroup$
– S0AndS0
36 mins ago
$begingroup$
One other thing not in either of the answers so far, would be to consider using a dictionary for your
fishes
, eg. fishes = 'cod': 0, 'salmon': 0,...
, then it becomes far more readable when adding (fishes['cod'] += 1
) and dumping (for fish, count in fishes.items():nt print("fish -> count".format(**'fish': fish, 'count': count))
) values related fish caught.$endgroup$
– S0AndS0
36 mins ago
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
A few simple things.
a = b = c = d = e = 0
This is bad for two reasons:
Those are all non-descriptive, overly simple names. There's no way to tell what they represent just by looking at them.
You're shoving their declarations/definitions all on one line. This is generally regarded as poor practice. Say I'm looking for where
c
is defined. It's much easier to find it when I can be sure that I'm looking for exactlyc = ...
somewhere. It's harder to find though when it's declared half way through a line.
In both cases, you're sacrificing readability for brevity. Avoid doing this unless you're code golfing. Readability take precedence over nearly everything else.
fishing = True
is the third line in your file, yet you don't use it until later. Unless it's a constant, it's better to declare variables near where they're first used in many cases. When someone's reading your code and want to see the definition of fishing
, it's more efficient if they only have to look up a line or two instead of needing to scroll to the top of the file.
while fishing == True:
can simply be written as while fishing:
, which reads nicer anyways.
You actually have a bug. fishing == False
should be fishing = False
.
if answer.lower() == "no":
could be written to be more "tolerant" (but less exact) by only checking the first letter:
if answer.lower()[0] == "n":
Now input like "nope" will work as well. Whether or not you want this behavior is another story. If you had other answers that require "n" as the first letter, obviously this would break things.
$endgroup$
add a comment |
$begingroup$
Welcome to CodeReview. It's never too early to develop good coding habits, and reviewing your code is about the best way to do so.
First, congratulations on writing a clean, straightforward program. While you do have some issues (below), they're not major, and your program seems appropriate for its level.
Now, for the issues ;-)
Use whitespace
Python requires you to use horizontal whitespace. But you should also use vertical whitespace (aka "blank lines") to organize the different parts of your code into paragraphs.
This huge block:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
would read better if it were broken up like so:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
All I did was add a few blank lines, but I was trying to show that "these things go together" and "these things are in sequence but not related".
Use meaningful names:
Which one of these is the shark?
a = b = c = d = e = 0
I have no idea. But if you named them appropriately:
cod = shark = wildfish = salmon = nothing = 0
I would know for sure!
Use named constants
This line appears three times:
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
It's probably hard to get the right number of tilde characters, unless you are copy/pasting it. And if you're doing that, it's probably a pain. Instead, create a name for the tildes. By convention, constants are spelled in uppercase. (It's not really a constant, but since constants are spelled in upper case, if you name it in upper case you'll know not to modify it.)
H_LINE = "~" * 32
print(H_LINE)
print("Welcome to Lake Tocowaga")
print(H_LINE)
Put last things last
There's a place for everything. And everything should be in its place. The place for printing a summary would be at the bottom.
You had a good idea with your while fishing:
loop. But instead of immediately printing the summary when you respond to the user input, just change the variable and let the loop fail, then print the summary at the bottom. It's more "natural" (and it makes your loops easier to read!).
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
...
Becomes:
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
else:
...
er = float(e / (a + b + c + d))
print(H_LINE)
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
Let the built-in functions do their job
You are calling functions that you don't need to call. The result of "true" division between integers is a float. You don't need to call float(e / (a + b + c + d))
. And if you did need to call it, you'd be calling it too late!
Likewise, print
knows how to handle integers and floating point numbers. You don't need to print(..., str(a), ...)
when you can just do: print(..., a, ...)
.
$endgroup$
add a comment |
Your Answer
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
);
);
Mattthecommie is a new contributor. Be nice, and check out our Code of Conduct.
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%2f217357%2fpython-fishing-simulator%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$
A few simple things.
a = b = c = d = e = 0
This is bad for two reasons:
Those are all non-descriptive, overly simple names. There's no way to tell what they represent just by looking at them.
You're shoving their declarations/definitions all on one line. This is generally regarded as poor practice. Say I'm looking for where
c
is defined. It's much easier to find it when I can be sure that I'm looking for exactlyc = ...
somewhere. It's harder to find though when it's declared half way through a line.
In both cases, you're sacrificing readability for brevity. Avoid doing this unless you're code golfing. Readability take precedence over nearly everything else.
fishing = True
is the third line in your file, yet you don't use it until later. Unless it's a constant, it's better to declare variables near where they're first used in many cases. When someone's reading your code and want to see the definition of fishing
, it's more efficient if they only have to look up a line or two instead of needing to scroll to the top of the file.
while fishing == True:
can simply be written as while fishing:
, which reads nicer anyways.
You actually have a bug. fishing == False
should be fishing = False
.
if answer.lower() == "no":
could be written to be more "tolerant" (but less exact) by only checking the first letter:
if answer.lower()[0] == "n":
Now input like "nope" will work as well. Whether or not you want this behavior is another story. If you had other answers that require "n" as the first letter, obviously this would break things.
$endgroup$
add a comment |
$begingroup$
A few simple things.
a = b = c = d = e = 0
This is bad for two reasons:
Those are all non-descriptive, overly simple names. There's no way to tell what they represent just by looking at them.
You're shoving their declarations/definitions all on one line. This is generally regarded as poor practice. Say I'm looking for where
c
is defined. It's much easier to find it when I can be sure that I'm looking for exactlyc = ...
somewhere. It's harder to find though when it's declared half way through a line.
In both cases, you're sacrificing readability for brevity. Avoid doing this unless you're code golfing. Readability take precedence over nearly everything else.
fishing = True
is the third line in your file, yet you don't use it until later. Unless it's a constant, it's better to declare variables near where they're first used in many cases. When someone's reading your code and want to see the definition of fishing
, it's more efficient if they only have to look up a line or two instead of needing to scroll to the top of the file.
while fishing == True:
can simply be written as while fishing:
, which reads nicer anyways.
You actually have a bug. fishing == False
should be fishing = False
.
if answer.lower() == "no":
could be written to be more "tolerant" (but less exact) by only checking the first letter:
if answer.lower()[0] == "n":
Now input like "nope" will work as well. Whether or not you want this behavior is another story. If you had other answers that require "n" as the first letter, obviously this would break things.
$endgroup$
add a comment |
$begingroup$
A few simple things.
a = b = c = d = e = 0
This is bad for two reasons:
Those are all non-descriptive, overly simple names. There's no way to tell what they represent just by looking at them.
You're shoving their declarations/definitions all on one line. This is generally regarded as poor practice. Say I'm looking for where
c
is defined. It's much easier to find it when I can be sure that I'm looking for exactlyc = ...
somewhere. It's harder to find though when it's declared half way through a line.
In both cases, you're sacrificing readability for brevity. Avoid doing this unless you're code golfing. Readability take precedence over nearly everything else.
fishing = True
is the third line in your file, yet you don't use it until later. Unless it's a constant, it's better to declare variables near where they're first used in many cases. When someone's reading your code and want to see the definition of fishing
, it's more efficient if they only have to look up a line or two instead of needing to scroll to the top of the file.
while fishing == True:
can simply be written as while fishing:
, which reads nicer anyways.
You actually have a bug. fishing == False
should be fishing = False
.
if answer.lower() == "no":
could be written to be more "tolerant" (but less exact) by only checking the first letter:
if answer.lower()[0] == "n":
Now input like "nope" will work as well. Whether or not you want this behavior is another story. If you had other answers that require "n" as the first letter, obviously this would break things.
$endgroup$
A few simple things.
a = b = c = d = e = 0
This is bad for two reasons:
Those are all non-descriptive, overly simple names. There's no way to tell what they represent just by looking at them.
You're shoving their declarations/definitions all on one line. This is generally regarded as poor practice. Say I'm looking for where
c
is defined. It's much easier to find it when I can be sure that I'm looking for exactlyc = ...
somewhere. It's harder to find though when it's declared half way through a line.
In both cases, you're sacrificing readability for brevity. Avoid doing this unless you're code golfing. Readability take precedence over nearly everything else.
fishing = True
is the third line in your file, yet you don't use it until later. Unless it's a constant, it's better to declare variables near where they're first used in many cases. When someone's reading your code and want to see the definition of fishing
, it's more efficient if they only have to look up a line or two instead of needing to scroll to the top of the file.
while fishing == True:
can simply be written as while fishing:
, which reads nicer anyways.
You actually have a bug. fishing == False
should be fishing = False
.
if answer.lower() == "no":
could be written to be more "tolerant" (but less exact) by only checking the first letter:
if answer.lower()[0] == "n":
Now input like "nope" will work as well. Whether or not you want this behavior is another story. If you had other answers that require "n" as the first letter, obviously this would break things.
edited 50 mins ago
answered 57 mins ago
CarcigenicateCarcigenicate
4,10411633
4,10411633
add a comment |
add a comment |
$begingroup$
Welcome to CodeReview. It's never too early to develop good coding habits, and reviewing your code is about the best way to do so.
First, congratulations on writing a clean, straightforward program. While you do have some issues (below), they're not major, and your program seems appropriate for its level.
Now, for the issues ;-)
Use whitespace
Python requires you to use horizontal whitespace. But you should also use vertical whitespace (aka "blank lines") to organize the different parts of your code into paragraphs.
This huge block:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
would read better if it were broken up like so:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
All I did was add a few blank lines, but I was trying to show that "these things go together" and "these things are in sequence but not related".
Use meaningful names:
Which one of these is the shark?
a = b = c = d = e = 0
I have no idea. But if you named them appropriately:
cod = shark = wildfish = salmon = nothing = 0
I would know for sure!
Use named constants
This line appears three times:
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
It's probably hard to get the right number of tilde characters, unless you are copy/pasting it. And if you're doing that, it's probably a pain. Instead, create a name for the tildes. By convention, constants are spelled in uppercase. (It's not really a constant, but since constants are spelled in upper case, if you name it in upper case you'll know not to modify it.)
H_LINE = "~" * 32
print(H_LINE)
print("Welcome to Lake Tocowaga")
print(H_LINE)
Put last things last
There's a place for everything. And everything should be in its place. The place for printing a summary would be at the bottom.
You had a good idea with your while fishing:
loop. But instead of immediately printing the summary when you respond to the user input, just change the variable and let the loop fail, then print the summary at the bottom. It's more "natural" (and it makes your loops easier to read!).
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
...
Becomes:
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
else:
...
er = float(e / (a + b + c + d))
print(H_LINE)
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
Let the built-in functions do their job
You are calling functions that you don't need to call. The result of "true" division between integers is a float. You don't need to call float(e / (a + b + c + d))
. And if you did need to call it, you'd be calling it too late!
Likewise, print
knows how to handle integers and floating point numbers. You don't need to print(..., str(a), ...)
when you can just do: print(..., a, ...)
.
$endgroup$
add a comment |
$begingroup$
Welcome to CodeReview. It's never too early to develop good coding habits, and reviewing your code is about the best way to do so.
First, congratulations on writing a clean, straightforward program. While you do have some issues (below), they're not major, and your program seems appropriate for its level.
Now, for the issues ;-)
Use whitespace
Python requires you to use horizontal whitespace. But you should also use vertical whitespace (aka "blank lines") to organize the different parts of your code into paragraphs.
This huge block:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
would read better if it were broken up like so:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
All I did was add a few blank lines, but I was trying to show that "these things go together" and "these things are in sequence but not related".
Use meaningful names:
Which one of these is the shark?
a = b = c = d = e = 0
I have no idea. But if you named them appropriately:
cod = shark = wildfish = salmon = nothing = 0
I would know for sure!
Use named constants
This line appears three times:
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
It's probably hard to get the right number of tilde characters, unless you are copy/pasting it. And if you're doing that, it's probably a pain. Instead, create a name for the tildes. By convention, constants are spelled in uppercase. (It's not really a constant, but since constants are spelled in upper case, if you name it in upper case you'll know not to modify it.)
H_LINE = "~" * 32
print(H_LINE)
print("Welcome to Lake Tocowaga")
print(H_LINE)
Put last things last
There's a place for everything. And everything should be in its place. The place for printing a summary would be at the bottom.
You had a good idea with your while fishing:
loop. But instead of immediately printing the summary when you respond to the user input, just change the variable and let the loop fail, then print the summary at the bottom. It's more "natural" (and it makes your loops easier to read!).
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
...
Becomes:
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
else:
...
er = float(e / (a + b + c + d))
print(H_LINE)
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
Let the built-in functions do their job
You are calling functions that you don't need to call. The result of "true" division between integers is a float. You don't need to call float(e / (a + b + c + d))
. And if you did need to call it, you'd be calling it too late!
Likewise, print
knows how to handle integers and floating point numbers. You don't need to print(..., str(a), ...)
when you can just do: print(..., a, ...)
.
$endgroup$
add a comment |
$begingroup$
Welcome to CodeReview. It's never too early to develop good coding habits, and reviewing your code is about the best way to do so.
First, congratulations on writing a clean, straightforward program. While you do have some issues (below), they're not major, and your program seems appropriate for its level.
Now, for the issues ;-)
Use whitespace
Python requires you to use horizontal whitespace. But you should also use vertical whitespace (aka "blank lines") to organize the different parts of your code into paragraphs.
This huge block:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
would read better if it were broken up like so:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
All I did was add a few blank lines, but I was trying to show that "these things go together" and "these things are in sequence but not related".
Use meaningful names:
Which one of these is the shark?
a = b = c = d = e = 0
I have no idea. But if you named them appropriately:
cod = shark = wildfish = salmon = nothing = 0
I would know for sure!
Use named constants
This line appears three times:
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
It's probably hard to get the right number of tilde characters, unless you are copy/pasting it. And if you're doing that, it's probably a pain. Instead, create a name for the tildes. By convention, constants are spelled in uppercase. (It's not really a constant, but since constants are spelled in upper case, if you name it in upper case you'll know not to modify it.)
H_LINE = "~" * 32
print(H_LINE)
print("Welcome to Lake Tocowaga")
print(H_LINE)
Put last things last
There's a place for everything. And everything should be in its place. The place for printing a summary would be at the bottom.
You had a good idea with your while fishing:
loop. But instead of immediately printing the summary when you respond to the user input, just change the variable and let the loop fail, then print the summary at the bottom. It's more "natural" (and it makes your loops easier to read!).
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
...
Becomes:
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
else:
...
er = float(e / (a + b + c + d))
print(H_LINE)
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
Let the built-in functions do their job
You are calling functions that you don't need to call. The result of "true" division between integers is a float. You don't need to call float(e / (a + b + c + d))
. And if you did need to call it, you'd be calling it too late!
Likewise, print
knows how to handle integers and floating point numbers. You don't need to print(..., str(a), ...)
when you can just do: print(..., a, ...)
.
$endgroup$
Welcome to CodeReview. It's never too early to develop good coding habits, and reviewing your code is about the best way to do so.
First, congratulations on writing a clean, straightforward program. While you do have some issues (below), they're not major, and your program seems appropriate for its level.
Now, for the issues ;-)
Use whitespace
Python requires you to use horizontal whitespace. But you should also use vertical whitespace (aka "blank lines") to organize the different parts of your code into paragraphs.
This huge block:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
would read better if it were broken up like so:
import time
import random
fishing = True
a = b = c = d = e = 0 #define multiple variables as same thing
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print ("Welcome to Lake Tocowaga")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
time.sleep(1)
name = input("What is your name fisherman?")
answer = input("Would you like to go fishing, " + name + "?")
if answer.lower() == "no":
fishing == False
while fishing == True:
All I did was add a few blank lines, but I was trying to show that "these things go together" and "these things are in sequence but not related".
Use meaningful names:
Which one of these is the shark?
a = b = c = d = e = 0
I have no idea. But if you named them appropriately:
cod = shark = wildfish = salmon = nothing = 0
I would know for sure!
Use named constants
This line appears three times:
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
It's probably hard to get the right number of tilde characters, unless you are copy/pasting it. And if you're doing that, it's probably a pain. Instead, create a name for the tildes. By convention, constants are spelled in uppercase. (It's not really a constant, but since constants are spelled in upper case, if you name it in upper case you'll know not to modify it.)
H_LINE = "~" * 32
print(H_LINE)
print("Welcome to Lake Tocowaga")
print(H_LINE)
Put last things last
There's a place for everything. And everything should be in its place. The place for printing a summary would be at the bottom.
You had a good idea with your while fishing:
loop. But instead of immediately printing the summary when you respond to the user input, just change the variable and let the loop fail, then print the summary at the bottom. It's more "natural" (and it makes your loops easier to read!).
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
er = float(e / (a + b + c + d))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
else:
...
Becomes:
while fishing == True:
time.sleep(1)
answer = input("Throw out your line, or go home?")
if answer == "go home":
fishing = False
else:
...
er = float(e / (a + b + c + d))
print(H_LINE)
print("Thanks for playing " + name + "!")
print("You caught:", str(a), "cod, ", str(b), "salmon, ", str(c), "shark, ", str(d), "wildfish. nEfficiency Rate: ", str(er), ".")
Let the built-in functions do their job
You are calling functions that you don't need to call. The result of "true" division between integers is a float. You don't need to call float(e / (a + b + c + d))
. And if you did need to call it, you'd be calling it too late!
Likewise, print
knows how to handle integers and floating point numbers. You don't need to print(..., str(a), ...)
when you can just do: print(..., a, ...)
.
answered 43 mins ago
Austin HastingsAustin Hastings
7,7671236
7,7671236
add a comment |
add a comment |
Mattthecommie is a new contributor. Be nice, and check out our Code of Conduct.
Mattthecommie is a new contributor. Be nice, and check out our Code of Conduct.
Mattthecommie is a new contributor. Be nice, and check out our Code of Conduct.
Mattthecommie is a new contributor. Be nice, and check out our Code of Conduct.
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%2f217357%2fpython-fishing-simulator%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
$begingroup$
Why did you tag this question as python-2.x? I'm not convinced that it would work correctly in Python 2.
$endgroup$
– 200_success
1 hour ago
$begingroup$
One other thing not in either of the answers so far, would be to consider using a dictionary for your
fishes
, eg.fishes = 'cod': 0, 'salmon': 0,...
, then it becomes far more readable when adding (fishes['cod'] += 1
) and dumping (for fish, count in fishes.items():nt print("fish -> count".format(**'fish': fish, 'count': count))
) values related fish caught.$endgroup$
– S0AndS0
36 mins ago