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

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

            Israel Cuprins Etimologie | Istorie | Geografie | Politică | Demografie | Educație | Economie | Cultură | Note explicative | Note bibliografice | Bibliografie | Legături externe | Meniu de navigaresite web oficialfacebooktweeterGoogle+Instagramcanal YouTubeInstagramtextmodificaremodificarewww.technion.ac.ilnew.huji.ac.ilwww.weizmann.ac.ilwww1.biu.ac.ilenglish.tau.ac.ilwww.haifa.ac.ilin.bgu.ac.ilwww.openu.ac.ilwww.ariel.ac.ilCIA FactbookHarta Israelului"Negotiating Jerusalem," Palestine–Israel JournalThe Schizoid Nature of Modern Hebrew: A Slavic Language in Search of a Semitic Past„Arabic in Israel: an official language and a cultural bridge”„Latest Population Statistics for Israel”„Israel Population”„Tables”„Report for Selected Countries and Subjects”Human Development Report 2016: Human Development for Everyone„Distribution of family income - Gini index”The World FactbookJerusalem Law„Israel”„Israel”„Zionist Leaders: David Ben-Gurion 1886–1973”„The status of Jerusalem”„Analysis: Kadima's big plans”„Israel's Hard-Learned Lessons”„The Legacy of Undefined Borders, Tel Aviv Notes No. 40, 5 iunie 2002”„Israel Journal: A Land Without Borders”„Population”„Israel closes decade with population of 7.5 million”Time Series-DataBank„Selected Statistics on Jerusalem Day 2007 (Hebrew)”Golan belongs to Syria, Druze protestGlobal Survey 2006: Middle East Progress Amid Global Gains in FreedomWHO: Life expectancy in Israel among highest in the worldInternational Monetary Fund, World Economic Outlook Database, April 2011: Nominal GDP list of countries. Data for the year 2010.„Israel's accession to the OECD”Popular Opinion„On the Move”Hosea 12:5„Walking the Bible Timeline”„Palestine: History”„Return to Zion”An invention called 'the Jewish people' – Haaretz – Israel NewsoriginalJewish and Non-Jewish Population of Palestine-Israel (1517–2004)ImmigrationJewishvirtuallibrary.orgChapter One: The Heralders of Zionism„The birth of modern Israel: A scrap of paper that changed history”„League of Nations: The Mandate for Palestine, 24 iulie 1922”The Population of Palestine Prior to 1948originalBackground Paper No. 47 (ST/DPI/SER.A/47)History: Foreign DominationTwo Hundred and Seventh Plenary Meeting„Israel (Labor Zionism)”Population, by Religion and Population GroupThe Suez CrisisAdolf EichmannJustice Ministry Reply to Amnesty International Report„The Interregnum”Israel Ministry of Foreign Affairs – The Palestinian National Covenant- July 1968Research on terrorism: trends, achievements & failuresThe Routledge Atlas of the Arab–Israeli conflict: The Complete History of the Struggle and the Efforts to Resolve It"George Habash, Palestinian Terrorism Tactician, Dies at 82."„1973: Arab states attack Israeli forces”Agranat Commission„Has Israel Annexed East Jerusalem?”original„After 4 Years, Intifada Still Smolders”From the End of the Cold War to 2001originalThe Oslo Accords, 1993Israel-PLO Recognition – Exchange of Letters between PM Rabin and Chairman Arafat – Sept 9- 1993Foundation for Middle East PeaceSources of Population Growth: Total Israeli Population and Settler Population, 1991–2003original„Israel marks Rabin assassination”The Wye River Memorandumoriginal„West Bank barrier route disputed, Israeli missile kills 2”"Permanent Ceasefire to Be Based on Creation Of Buffer Zone Free of Armed Personnel Other than UN, Lebanese Forces"„Hezbollah kills 8 soldiers, kidnaps two in offensive on northern border”„Olmert confirms peace talks with Syria”„Battleground Gaza: Israeli ground forces invade the strip”„IDF begins Gaza troop withdrawal, hours after ending 3-week offensive”„THE LAND: Geography and Climate”„Area of districts, sub-districts, natural regions and lakes”„Israel - Geography”„Makhteshim Country”Israel and the Palestinian Territories„Makhtesh Ramon”„The Living Dead Sea”„Temperatures reach record high in Pakistan”„Climate Extremes In Israel”Israel in figures„Deuteronom”„JNF: 240 million trees planted since 1901”„Vegetation of Israel and Neighboring Countries”Environmental Law in Israel„Executive branch”„Israel's election process explained”„The Electoral System in Israel”„Constitution for Israel”„All 120 incoming Knesset members”„Statul ISRAEL”„The Judiciary: The Court System”„Israel's high court unique in region”„Israel and the International Criminal Court: A Legal Battlefield”„Localities and population, by population group, district, sub-district and natural region”„Israel: Districts, Major Cities, Urban Localities & Metropolitan Areas”„Israel-Egypt Relations: Background & Overview of Peace Treaty”„Solana to Haaretz: New Rules of War Needed for Age of Terror”„Israel's Announcement Regarding Settlements”„United Nations Security Council Resolution 497”„Security Council resolution 478 (1980) on the status of Jerusalem”„Arabs will ask U.N. to seek razing of Israeli wall”„Olmert: Willing to trade land for peace”„Mapping Peace between Syria and Israel”„Egypt: Israel must accept the land-for-peace formula”„Israel: Age structure from 2005 to 2015”„Global, regional, and national disability-adjusted life years (DALYs) for 306 diseases and injuries and healthy life expectancy (HALE) for 188 countries, 1990–2013: quantifying the epidemiological transition”10.1016/S0140-6736(15)61340-X„World Health Statistics 2014”„Life expectancy for Israeli men world's 4th highest”„Family Structure and Well-Being Across Israel's Diverse Population”„Fertility among Jewish and Muslim Women in Israel, by Level of Religiosity, 1979-2009”„Israel leaders in birth rate, but poverty major challenge”„Ethnic Groups”„Israel's population: Over 8.5 million”„Israel - Ethnic groups”„Jews, by country of origin and age”„Minority Communities in Israel: Background & Overview”„Israel”„Language in Israel”„Selected Data from the 2011 Social Survey on Mastery of the Hebrew Language and Usage of Languages”„Religions”„5 facts about Israeli Druze, a unique religious and ethnic group”„Israël”Israel Country Study Guide„Haredi city in Negev – blessing or curse?”„New town Harish harbors hopes of being more than another Pleasantville”„List of localities, in alphabetical order”„Muncitorii români, doriți în Israel”„Prietenia româno-israeliană la nevoie se cunoaște”„The Higher Education System in Israel”„Middle East”„Academic Ranking of World Universities 2016”„Israel”„Israel”„Jewish Nobel Prize Winners”„All Nobel Prizes in Literature”„All Nobel Peace Prizes”„All Prizes in Economic Sciences”„All Nobel Prizes in Chemistry”„List of Fields Medallists”„Sakharov Prize”„Țara care și-a sfidat "destinul" și se bate umăr la umăr cu Silicon Valley”„Apple's R&D center in Israel grew to about 800 employees”„Tim Cook: Apple's Herzliya R&D center second-largest in world”„Lecții de economie de la Israel”„Land use”Israel Investment and Business GuideA Country Study: IsraelCentral Bureau of StatisticsFlorin Diaconu, „Kadima: Flexibilitate și pragmatism, dar nici un compromis în chestiuni vitale", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 71-72Florin Diaconu, „Likud: Dreapta israeliană constant opusă retrocedării teritoriilor cureite prin luptă în 1967", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 73-74MassadaIsraelul a crescut in 50 de ani cât alte state intr-un mileniuIsrael Government PortalIsraelIsraelIsraelmmmmmXX451232cb118646298(data)4027808-634110000 0004 0372 0767n7900328503691455-bb46-37e3-91d2-cb064a35ffcc1003570400564274ge1294033523775214929302638955X146498911146498911

            Кастелфранко ди Сопра Становништво Референце Спољашње везе Мени за навигацију43°37′18″ СГШ; 11°33′32″ ИГД / 43.62156° СГШ; 11.55885° ИГД / 43.62156; 11.5588543°37′18″ СГШ; 11°33′32″ ИГД / 43.62156° СГШ; 11.55885° ИГД / 43.62156; 11.558853179688„The GeoNames geographical database”„Istituto Nazionale di Statistica”проширитиууWorldCat156923403n850174324558639-1cb14643287r(подаци)