Python - Fishing Simulator The 2019 Stack Overflow Developer Survey Results Are In Unicorn Meta Zoo #1: Why another podcast? Announcing the arrival of Valued Associate #679: Cesar ManaraTurn-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
One-dimensional Japanese puzzle
Variable with quotation marks "$()"
Working through the single responsibility principle (SRP) in Python when calls are expensive
"... to apply for a visa" or "... and applied for a visa"?
What force causes entropy to increase?
How to make Illustrator type tool selection automatically adapt with text length
Keeping a retro style to sci-fi spaceships?
Is an up-to-date browser secure on an out-of-date OS?
Python - Fishing Simulator
What other Star Trek series did the main TNG cast show up in?
Is it ethical to upload a automatically generated paper to a non peer-reviewed site as part of a larger research?
Why can't devices on different VLANs, but on the same subnet, communicate?
Would an alien lifeform be able to achieve space travel if lacking in vision?
should truth entail possible truth
Button changing its text & action. Good or terrible?
How to handle characters who are more educated than the author?
Is there a way to generate uniformly distributed points on a sphere from a fixed amount of random real numbers per point?
Is it ok to offer lower paid work as a trial period before negotiating for a full-time job?
Presidential Pardon
Homework question about an engine pulling a train
How to support a colleague who finds meetings extremely tiring?
How to politely respond to generic emails requesting a PhD/job in my lab? Without wasting too much time
Can withdrawing asylum be illegal?
Did the UK government pay "millions and millions of dollars" to try to snag Julian Assange?
Python - Fishing Simulator
The 2019 Stack Overflow Developer Survey Results Are In
Unicorn Meta Zoo #1: Why another podcast?
Announcing the arrival of Valued Associate #679: Cesar ManaraTurn-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
2 hours 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
1 hour 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
2 hours 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
1 hour 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
2 hours 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
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
2 hours 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
2 hours 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
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
1 hour 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 1 hour ago
answered 1 hour 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 1 hour 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
2 hours 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
1 hour ago