A simple game that keeps track of the number of questions askedConsole user main menuRock-Paper-Scissors-Lizard-Spock ChallengeSprite animation handlerSimple console snake game in PythonCard-fighting gameA simple Mastermind game in CPython: Pawn raceNAQ 2018 Problem D FroggieGuess-the-number game by a Python beginnerRobot game in C++

What is the meaning of word 'crack' in chapter 33 of A Game of Thrones?

Performance for simple code that converts a RGB tuple to hex string

How to manage expenditure when billing cycles and paycheck cycles are not aligned?

Why did UK NHS pay for homeopathic treatments?

Does "as soon as" imply simultaneity?

How can an attacker use robots.txt?

Why are there two fundamental laws of logic?

Why is (inf + 0j)*1 == inf + nanj?

What do you do if you have developments on your paper during the long peer review process?

How can this Stack Exchange site have an animated favicon?

How to deal with a Homophobic PC

Is there any iPhone SE out there with 3D Touch?

Can I take NEW (still in their boxes) PC PARTS in my checked in luggage?

How to discover (standard) function names?

Does wetting a beer glass change the foam characteristics?

What is the difference between an astronaut in the ISS and a freediver in perfect neutral buoyancy?

How do you use the interjection for snorting?

My Project Manager does not accept carry-over in Scrum, Is that normal?

1, 2, 4, 8, 16, ... 33?

Should the average user with no special access rights be worried about SMS-based 2FA being theoretically interceptable?

Is it really necessary to have a four hour meeting in Sprint planning?

Two trains move towards each other, a bird moves between them. How many trips can the bird make?

How to deal with my team leader who keeps calling me about project updates even though I am on leave for personal reasons?

Which place in our solar system is the most fit for terraforming?



A simple game that keeps track of the number of questions asked


Console user main menuRock-Paper-Scissors-Lizard-Spock ChallengeSprite animation handlerSimple console snake game in PythonCard-fighting gameA simple Mastermind game in CPython: Pawn raceNAQ 2018 Problem D FroggieGuess-the-number game by a Python beginnerRobot game in C++






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








4












$begingroup$


This is just a simple counter, i was able to code it in two different ways but i want to know which way is more efficient and which way is more readable.
and which set of code is more "correct" in broad-manner of speaking.
and if there is another entirely different set of code that does the same function ?



Game Rules




This is a simple game , at first it asks the user if they want to go
right or left . if the user picks left ; the program ends and it
displays the "You Win!" message. however if the user picks anything
else other than left ( for example : right ) the program will start a
counter 'z' and it will display a different message for each time the
user chooses the wrong direction or input. i have set it to 4
different messages and then one last message that keeps playing on
repeat until the user picks the correct direction.




however i feel like that there must be better code to do this.
can you please help?



the first set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 different levels of
#'you lose' messages and then a last one keeps repeating in a loop.

z = 0
n = input ( "Go left or right? n" )
while n not in ["left", "Left"]:
if z == 0 :
print ("You lose * 0 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 1 :
print ("You lose * 1 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 2 :
print ("You lose * 2 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 3 :
print ("You lose * 3 ")
z = " "
n = input ( "Go left or right? n" )
else :
while n not in ["left", "Left" ] :
print ( "You Lose * Infinite" )
n = input ( "Go left or right? n" )
print ( "nYou Win!" )


Second set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 diffrent levels of
#'you lose' messegses and then a last one keeps repeating on a loop.



v = 0
z = 0
u = 0
x = 0
n = 0

while x == 0 :
n = input ("Go Left or Right?")
while n not in ["left", "Left"] and u == 0 :
if z == 0:
print ( " You lose * 0 ")
elif z == 1:
print ( " You lose * 1 ")
elif z == 2:
print ( " You lose * 2 ")
elif z == 3:
print ( " You lose * 3 ")
else :
print ( " You lose * Infinite " )
u = " "
while z < 4 and v == 0 :
z = z + 1
v = " "
u = 0
v = 0
if n == "left" or n == "Left":
x=" "


print ( " You Win! ")
```









share|improve this question









New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$endgroup$









  • 2




    $begingroup$
    Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
    $endgroup$
    – Toby Speight
    10 hours ago










  • $begingroup$
    @200_success I believe rules have been described now.
    $endgroup$
    – dfhwze
    8 hours ago










  • $begingroup$
    @TobySpeight The title has been fixed.
    $endgroup$
    – dfhwze
    8 hours ago

















4












$begingroup$


This is just a simple counter, i was able to code it in two different ways but i want to know which way is more efficient and which way is more readable.
and which set of code is more "correct" in broad-manner of speaking.
and if there is another entirely different set of code that does the same function ?



Game Rules




This is a simple game , at first it asks the user if they want to go
right or left . if the user picks left ; the program ends and it
displays the "You Win!" message. however if the user picks anything
else other than left ( for example : right ) the program will start a
counter 'z' and it will display a different message for each time the
user chooses the wrong direction or input. i have set it to 4
different messages and then one last message that keeps playing on
repeat until the user picks the correct direction.




however i feel like that there must be better code to do this.
can you please help?



the first set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 different levels of
#'you lose' messages and then a last one keeps repeating in a loop.

z = 0
n = input ( "Go left or right? n" )
while n not in ["left", "Left"]:
if z == 0 :
print ("You lose * 0 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 1 :
print ("You lose * 1 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 2 :
print ("You lose * 2 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 3 :
print ("You lose * 3 ")
z = " "
n = input ( "Go left or right? n" )
else :
while n not in ["left", "Left" ] :
print ( "You Lose * Infinite" )
n = input ( "Go left or right? n" )
print ( "nYou Win!" )


Second set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 diffrent levels of
#'you lose' messegses and then a last one keeps repeating on a loop.



v = 0
z = 0
u = 0
x = 0
n = 0

while x == 0 :
n = input ("Go Left or Right?")
while n not in ["left", "Left"] and u == 0 :
if z == 0:
print ( " You lose * 0 ")
elif z == 1:
print ( " You lose * 1 ")
elif z == 2:
print ( " You lose * 2 ")
elif z == 3:
print ( " You lose * 3 ")
else :
print ( " You lose * Infinite " )
u = " "
while z < 4 and v == 0 :
z = z + 1
v = " "
u = 0
v = 0
if n == "left" or n == "Left":
x=" "


print ( " You Win! ")
```









share|improve this question









New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$endgroup$









  • 2




    $begingroup$
    Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
    $endgroup$
    – Toby Speight
    10 hours ago










  • $begingroup$
    @200_success I believe rules have been described now.
    $endgroup$
    – dfhwze
    8 hours ago










  • $begingroup$
    @TobySpeight The title has been fixed.
    $endgroup$
    – dfhwze
    8 hours ago













4












4








4


1



$begingroup$


This is just a simple counter, i was able to code it in two different ways but i want to know which way is more efficient and which way is more readable.
and which set of code is more "correct" in broad-manner of speaking.
and if there is another entirely different set of code that does the same function ?



Game Rules




This is a simple game , at first it asks the user if they want to go
right or left . if the user picks left ; the program ends and it
displays the "You Win!" message. however if the user picks anything
else other than left ( for example : right ) the program will start a
counter 'z' and it will display a different message for each time the
user chooses the wrong direction or input. i have set it to 4
different messages and then one last message that keeps playing on
repeat until the user picks the correct direction.




however i feel like that there must be better code to do this.
can you please help?



the first set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 different levels of
#'you lose' messages and then a last one keeps repeating in a loop.

z = 0
n = input ( "Go left or right? n" )
while n not in ["left", "Left"]:
if z == 0 :
print ("You lose * 0 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 1 :
print ("You lose * 1 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 2 :
print ("You lose * 2 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 3 :
print ("You lose * 3 ")
z = " "
n = input ( "Go left or right? n" )
else :
while n not in ["left", "Left" ] :
print ( "You Lose * Infinite" )
n = input ( "Go left or right? n" )
print ( "nYou Win!" )


Second set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 diffrent levels of
#'you lose' messegses and then a last one keeps repeating on a loop.



v = 0
z = 0
u = 0
x = 0
n = 0

while x == 0 :
n = input ("Go Left or Right?")
while n not in ["left", "Left"] and u == 0 :
if z == 0:
print ( " You lose * 0 ")
elif z == 1:
print ( " You lose * 1 ")
elif z == 2:
print ( " You lose * 2 ")
elif z == 3:
print ( " You lose * 3 ")
else :
print ( " You lose * Infinite " )
u = " "
while z < 4 and v == 0 :
z = z + 1
v = " "
u = 0
v = 0
if n == "left" or n == "Left":
x=" "


print ( " You Win! ")
```









share|improve this question









New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$endgroup$




This is just a simple counter, i was able to code it in two different ways but i want to know which way is more efficient and which way is more readable.
and which set of code is more "correct" in broad-manner of speaking.
and if there is another entirely different set of code that does the same function ?



Game Rules




This is a simple game , at first it asks the user if they want to go
right or left . if the user picks left ; the program ends and it
displays the "You Win!" message. however if the user picks anything
else other than left ( for example : right ) the program will start a
counter 'z' and it will display a different message for each time the
user chooses the wrong direction or input. i have set it to 4
different messages and then one last message that keeps playing on
repeat until the user picks the correct direction.




however i feel like that there must be better code to do this.
can you please help?



the first set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 different levels of
#'you lose' messages and then a last one keeps repeating in a loop.

z = 0
n = input ( "Go left or right? n" )
while n not in ["left", "Left"]:
if z == 0 :
print ("You lose * 0 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 1 :
print ("You lose * 1 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 2 :
print ("You lose * 2 ")
z = z+1
n = input ( "Go left or right? n" )
elif z == 3 :
print ("You lose * 3 ")
z = " "
n = input ( "Go left or right? n" )
else :
while n not in ["left", "Left" ] :
print ( "You Lose * Infinite" )
n = input ( "Go left or right? n" )
print ( "nYou Win!" )


Second set of code :



#This is a simple game where if you pick left you win,
#but if you pick right you keep going through 4 diffrent levels of
#'you lose' messegses and then a last one keeps repeating on a loop.



v = 0
z = 0
u = 0
x = 0
n = 0

while x == 0 :
n = input ("Go Left or Right?")
while n not in ["left", "Left"] and u == 0 :
if z == 0:
print ( " You lose * 0 ")
elif z == 1:
print ( " You lose * 1 ")
elif z == 2:
print ( " You lose * 2 ")
elif z == 3:
print ( " You lose * 3 ")
else :
print ( " You lose * Infinite " )
u = " "
while z < 4 and v == 0 :
z = z + 1
v = " "
u = 0
v = 0
if n == "left" or n == "Left":
x=" "


print ( " You Win! ")
```






python game comparative-review






share|improve this question









New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.










share|improve this question









New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








share|improve this question




share|improve this question








edited 8 hours ago









dfhwze

12.3k2 gold badges22 silver badges84 bronze badges




12.3k2 gold badges22 silver badges84 bronze badges






New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








asked 10 hours ago









ElbaselElbasel

263 bronze badges




263 bronze badges




New contributor



Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




New contributor




Elbasel is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • 2




    $begingroup$
    Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
    $endgroup$
    – Toby Speight
    10 hours ago










  • $begingroup$
    @200_success I believe rules have been described now.
    $endgroup$
    – dfhwze
    8 hours ago










  • $begingroup$
    @TobySpeight The title has been fixed.
    $endgroup$
    – dfhwze
    8 hours ago












  • 2




    $begingroup$
    Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
    $endgroup$
    – Toby Speight
    10 hours ago










  • $begingroup$
    @200_success I believe rules have been described now.
    $endgroup$
    – dfhwze
    8 hours ago










  • $begingroup$
    @TobySpeight The title has been fixed.
    $endgroup$
    – dfhwze
    8 hours ago







2




2




$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
10 hours ago




$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
10 hours ago












$begingroup$
@200_success I believe rules have been described now.
$endgroup$
– dfhwze
8 hours ago




$begingroup$
@200_success I believe rules have been described now.
$endgroup$
– dfhwze
8 hours ago












$begingroup$
@TobySpeight The title has been fixed.
$endgroup$
– dfhwze
8 hours ago




$begingroup$
@TobySpeight The title has been fixed.
$endgroup$
– dfhwze
8 hours ago










1 Answer
1






active

oldest

votes


















7














$begingroup$

You're doing some weird things with the scripts. I consider the first to be better, since especially in the second one, you're doing a lot of things with variables which we have better ways to do. I'll point those out separately - lets first have a look at your first script.



Your first script



Code Duplication



If you find yourself typing the same thing a lot, you're probably doing something wrong. Examples of this are incrementing z and printing the message.



Variable Names



Variables should have short but meaningful names. That means that if you find yourself using variables like z or n, you're probably doing something wrong somewhere.



Loops and termination



We have a really nice command named break in python. It will terminate the inner-most loop. Using this will obsolete all nested loops your currently have.



I'll keep using while loops here, but you might also want to try the following instead:



from itertools import count

for iteration in count(1):
# do stuff...
if we_are_done():
break


this function is basically an infinity list - it's doing exactly the same as:



iteration = 0
while True:
iteration += 1
# do stuff....
if we_are_done():
break


Which we'll be doing all the time here.



Keeping that all in mind....



iteration = 0
while True:
command = input("Go Left or Right?")
if "left" in command.lower(): # Transforms the input to all lowercase. This makes it case-insensitive.
# We also use "in" as membership test, so that whitespace is ignored, and even an command like
# "go left" will be considered valid.
break # Terminates the loop.
iteration += 1
print(f"You lose * iteration if iteration < 4 else 'infinity'")
print("nYou Win!")


This will do the same as your first script. In the loop, we get the input. We decide if we have won yet, and if we do, we break out. Then we increment the iteration variable. Then we print how often we've moved wrong before, or if it's more than 3 times, we instead print we lost * infinity.



If you're confused by the way we put our variable in that string, you should read up on f-strings. If you're confused by how we print that number, read up on ternary expressions. A good python programmer will know both. If the python version allows it, (s)he'll probably also use both.



Now lets dissect your second function...



I'll ignore everything I've already said something about regarding the first script.



Variable instantiation - don't do it unless you have to



v = 0
z = 0
u = 0
x = 0
n = 0


If you find yourself writing something like this, you should ask yourself if you really need all those. Generally, you'll only instantiate variables in python when you need them, and leave them undefined as long as you don't. IF, and this is a big if, you really need them, you'd write it like this:



v = z = u = x = n = 0


How not to loop



Your outer loop should of course be either with count() or while True:. But the first inner loop is just obsolete alltogether. It cannot run more than once, since there's an u == 0 requirement for it to run, and at the end of the loop you unconditionally set it to " ", which is a totally different something. Your second inner loop does the exact same thing, but with v. In both cases, you can just delete your loops and unindent your code. And at the end, of course, you should break.



Do it just once if you can.



You check for n not in ["left", "Left"] twice. Of course, the first time is to guard against the printing, and the second is to break out of your loop. If you just break at the top, you'll have avoided having to do it twice.






share|improve this answer









$endgroup$

















    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/4.0/"u003ecc by-sa 4.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
    );



    );







    Elbasel is a new contributor. Be nice, and check out our Code of Conduct.









    draft saved

    draft discarded
















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f229381%2fa-simple-game-that-keeps-track-of-the-number-of-questions-asked%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    7














    $begingroup$

    You're doing some weird things with the scripts. I consider the first to be better, since especially in the second one, you're doing a lot of things with variables which we have better ways to do. I'll point those out separately - lets first have a look at your first script.



    Your first script



    Code Duplication



    If you find yourself typing the same thing a lot, you're probably doing something wrong. Examples of this are incrementing z and printing the message.



    Variable Names



    Variables should have short but meaningful names. That means that if you find yourself using variables like z or n, you're probably doing something wrong somewhere.



    Loops and termination



    We have a really nice command named break in python. It will terminate the inner-most loop. Using this will obsolete all nested loops your currently have.



    I'll keep using while loops here, but you might also want to try the following instead:



    from itertools import count

    for iteration in count(1):
    # do stuff...
    if we_are_done():
    break


    this function is basically an infinity list - it's doing exactly the same as:



    iteration = 0
    while True:
    iteration += 1
    # do stuff....
    if we_are_done():
    break


    Which we'll be doing all the time here.



    Keeping that all in mind....



    iteration = 0
    while True:
    command = input("Go Left or Right?")
    if "left" in command.lower(): # Transforms the input to all lowercase. This makes it case-insensitive.
    # We also use "in" as membership test, so that whitespace is ignored, and even an command like
    # "go left" will be considered valid.
    break # Terminates the loop.
    iteration += 1
    print(f"You lose * iteration if iteration < 4 else 'infinity'")
    print("nYou Win!")


    This will do the same as your first script. In the loop, we get the input. We decide if we have won yet, and if we do, we break out. Then we increment the iteration variable. Then we print how often we've moved wrong before, or if it's more than 3 times, we instead print we lost * infinity.



    If you're confused by the way we put our variable in that string, you should read up on f-strings. If you're confused by how we print that number, read up on ternary expressions. A good python programmer will know both. If the python version allows it, (s)he'll probably also use both.



    Now lets dissect your second function...



    I'll ignore everything I've already said something about regarding the first script.



    Variable instantiation - don't do it unless you have to



    v = 0
    z = 0
    u = 0
    x = 0
    n = 0


    If you find yourself writing something like this, you should ask yourself if you really need all those. Generally, you'll only instantiate variables in python when you need them, and leave them undefined as long as you don't. IF, and this is a big if, you really need them, you'd write it like this:



    v = z = u = x = n = 0


    How not to loop



    Your outer loop should of course be either with count() or while True:. But the first inner loop is just obsolete alltogether. It cannot run more than once, since there's an u == 0 requirement for it to run, and at the end of the loop you unconditionally set it to " ", which is a totally different something. Your second inner loop does the exact same thing, but with v. In both cases, you can just delete your loops and unindent your code. And at the end, of course, you should break.



    Do it just once if you can.



    You check for n not in ["left", "Left"] twice. Of course, the first time is to guard against the printing, and the second is to break out of your loop. If you just break at the top, you'll have avoided having to do it twice.






    share|improve this answer









    $endgroup$



















      7














      $begingroup$

      You're doing some weird things with the scripts. I consider the first to be better, since especially in the second one, you're doing a lot of things with variables which we have better ways to do. I'll point those out separately - lets first have a look at your first script.



      Your first script



      Code Duplication



      If you find yourself typing the same thing a lot, you're probably doing something wrong. Examples of this are incrementing z and printing the message.



      Variable Names



      Variables should have short but meaningful names. That means that if you find yourself using variables like z or n, you're probably doing something wrong somewhere.



      Loops and termination



      We have a really nice command named break in python. It will terminate the inner-most loop. Using this will obsolete all nested loops your currently have.



      I'll keep using while loops here, but you might also want to try the following instead:



      from itertools import count

      for iteration in count(1):
      # do stuff...
      if we_are_done():
      break


      this function is basically an infinity list - it's doing exactly the same as:



      iteration = 0
      while True:
      iteration += 1
      # do stuff....
      if we_are_done():
      break


      Which we'll be doing all the time here.



      Keeping that all in mind....



      iteration = 0
      while True:
      command = input("Go Left or Right?")
      if "left" in command.lower(): # Transforms the input to all lowercase. This makes it case-insensitive.
      # We also use "in" as membership test, so that whitespace is ignored, and even an command like
      # "go left" will be considered valid.
      break # Terminates the loop.
      iteration += 1
      print(f"You lose * iteration if iteration < 4 else 'infinity'")
      print("nYou Win!")


      This will do the same as your first script. In the loop, we get the input. We decide if we have won yet, and if we do, we break out. Then we increment the iteration variable. Then we print how often we've moved wrong before, or if it's more than 3 times, we instead print we lost * infinity.



      If you're confused by the way we put our variable in that string, you should read up on f-strings. If you're confused by how we print that number, read up on ternary expressions. A good python programmer will know both. If the python version allows it, (s)he'll probably also use both.



      Now lets dissect your second function...



      I'll ignore everything I've already said something about regarding the first script.



      Variable instantiation - don't do it unless you have to



      v = 0
      z = 0
      u = 0
      x = 0
      n = 0


      If you find yourself writing something like this, you should ask yourself if you really need all those. Generally, you'll only instantiate variables in python when you need them, and leave them undefined as long as you don't. IF, and this is a big if, you really need them, you'd write it like this:



      v = z = u = x = n = 0


      How not to loop



      Your outer loop should of course be either with count() or while True:. But the first inner loop is just obsolete alltogether. It cannot run more than once, since there's an u == 0 requirement for it to run, and at the end of the loop you unconditionally set it to " ", which is a totally different something. Your second inner loop does the exact same thing, but with v. In both cases, you can just delete your loops and unindent your code. And at the end, of course, you should break.



      Do it just once if you can.



      You check for n not in ["left", "Left"] twice. Of course, the first time is to guard against the printing, and the second is to break out of your loop. If you just break at the top, you'll have avoided having to do it twice.






      share|improve this answer









      $endgroup$

















        7














        7










        7







        $begingroup$

        You're doing some weird things with the scripts. I consider the first to be better, since especially in the second one, you're doing a lot of things with variables which we have better ways to do. I'll point those out separately - lets first have a look at your first script.



        Your first script



        Code Duplication



        If you find yourself typing the same thing a lot, you're probably doing something wrong. Examples of this are incrementing z and printing the message.



        Variable Names



        Variables should have short but meaningful names. That means that if you find yourself using variables like z or n, you're probably doing something wrong somewhere.



        Loops and termination



        We have a really nice command named break in python. It will terminate the inner-most loop. Using this will obsolete all nested loops your currently have.



        I'll keep using while loops here, but you might also want to try the following instead:



        from itertools import count

        for iteration in count(1):
        # do stuff...
        if we_are_done():
        break


        this function is basically an infinity list - it's doing exactly the same as:



        iteration = 0
        while True:
        iteration += 1
        # do stuff....
        if we_are_done():
        break


        Which we'll be doing all the time here.



        Keeping that all in mind....



        iteration = 0
        while True:
        command = input("Go Left or Right?")
        if "left" in command.lower(): # Transforms the input to all lowercase. This makes it case-insensitive.
        # We also use "in" as membership test, so that whitespace is ignored, and even an command like
        # "go left" will be considered valid.
        break # Terminates the loop.
        iteration += 1
        print(f"You lose * iteration if iteration < 4 else 'infinity'")
        print("nYou Win!")


        This will do the same as your first script. In the loop, we get the input. We decide if we have won yet, and if we do, we break out. Then we increment the iteration variable. Then we print how often we've moved wrong before, or if it's more than 3 times, we instead print we lost * infinity.



        If you're confused by the way we put our variable in that string, you should read up on f-strings. If you're confused by how we print that number, read up on ternary expressions. A good python programmer will know both. If the python version allows it, (s)he'll probably also use both.



        Now lets dissect your second function...



        I'll ignore everything I've already said something about regarding the first script.



        Variable instantiation - don't do it unless you have to



        v = 0
        z = 0
        u = 0
        x = 0
        n = 0


        If you find yourself writing something like this, you should ask yourself if you really need all those. Generally, you'll only instantiate variables in python when you need them, and leave them undefined as long as you don't. IF, and this is a big if, you really need them, you'd write it like this:



        v = z = u = x = n = 0


        How not to loop



        Your outer loop should of course be either with count() or while True:. But the first inner loop is just obsolete alltogether. It cannot run more than once, since there's an u == 0 requirement for it to run, and at the end of the loop you unconditionally set it to " ", which is a totally different something. Your second inner loop does the exact same thing, but with v. In both cases, you can just delete your loops and unindent your code. And at the end, of course, you should break.



        Do it just once if you can.



        You check for n not in ["left", "Left"] twice. Of course, the first time is to guard against the printing, and the second is to break out of your loop. If you just break at the top, you'll have avoided having to do it twice.






        share|improve this answer









        $endgroup$



        You're doing some weird things with the scripts. I consider the first to be better, since especially in the second one, you're doing a lot of things with variables which we have better ways to do. I'll point those out separately - lets first have a look at your first script.



        Your first script



        Code Duplication



        If you find yourself typing the same thing a lot, you're probably doing something wrong. Examples of this are incrementing z and printing the message.



        Variable Names



        Variables should have short but meaningful names. That means that if you find yourself using variables like z or n, you're probably doing something wrong somewhere.



        Loops and termination



        We have a really nice command named break in python. It will terminate the inner-most loop. Using this will obsolete all nested loops your currently have.



        I'll keep using while loops here, but you might also want to try the following instead:



        from itertools import count

        for iteration in count(1):
        # do stuff...
        if we_are_done():
        break


        this function is basically an infinity list - it's doing exactly the same as:



        iteration = 0
        while True:
        iteration += 1
        # do stuff....
        if we_are_done():
        break


        Which we'll be doing all the time here.



        Keeping that all in mind....



        iteration = 0
        while True:
        command = input("Go Left or Right?")
        if "left" in command.lower(): # Transforms the input to all lowercase. This makes it case-insensitive.
        # We also use "in" as membership test, so that whitespace is ignored, and even an command like
        # "go left" will be considered valid.
        break # Terminates the loop.
        iteration += 1
        print(f"You lose * iteration if iteration < 4 else 'infinity'")
        print("nYou Win!")


        This will do the same as your first script. In the loop, we get the input. We decide if we have won yet, and if we do, we break out. Then we increment the iteration variable. Then we print how often we've moved wrong before, or if it's more than 3 times, we instead print we lost * infinity.



        If you're confused by the way we put our variable in that string, you should read up on f-strings. If you're confused by how we print that number, read up on ternary expressions. A good python programmer will know both. If the python version allows it, (s)he'll probably also use both.



        Now lets dissect your second function...



        I'll ignore everything I've already said something about regarding the first script.



        Variable instantiation - don't do it unless you have to



        v = 0
        z = 0
        u = 0
        x = 0
        n = 0


        If you find yourself writing something like this, you should ask yourself if you really need all those. Generally, you'll only instantiate variables in python when you need them, and leave them undefined as long as you don't. IF, and this is a big if, you really need them, you'd write it like this:



        v = z = u = x = n = 0


        How not to loop



        Your outer loop should of course be either with count() or while True:. But the first inner loop is just obsolete alltogether. It cannot run more than once, since there's an u == 0 requirement for it to run, and at the end of the loop you unconditionally set it to " ", which is a totally different something. Your second inner loop does the exact same thing, but with v. In both cases, you can just delete your loops and unindent your code. And at the end, of course, you should break.



        Do it just once if you can.



        You check for n not in ["left", "Left"] twice. Of course, the first time is to guard against the printing, and the second is to break out of your loop. If you just break at the top, you'll have avoided having to do it twice.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 8 hours ago









        GloweyeGloweye

        4115 bronze badges




        4115 bronze badges
























            Elbasel is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded

















            Elbasel is a new contributor. Be nice, and check out our Code of Conduct.












            Elbasel is a new contributor. Be nice, and check out our Code of Conduct.











            Elbasel 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.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f229381%2fa-simple-game-that-keeps-track-of-the-number-of-questions-asked%23new-answer', 'question_page');

            );

            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







            Popular posts from this blog

            ParseJSON using SSJSUsing AMPscript with SSJS ActivitiesHow to resubscribe a user in Marketing cloud using SSJS?Pulling Subscriber Status from Lists using SSJSRetrieving Emails using SSJSProblem in updating DE using SSJSUsing SSJS to send single email in Marketing CloudError adding EmailSendDefinition using SSJS

            Кампала Садржај Географија Географија Историја Становништво Привреда Партнерски градови Референце Спољашње везе Мени за навигацију0°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.340°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.34МедијиПодациЗванични веб-сајту

            19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу