Click here to Skip to main content
15,867,594 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
<p<big>re>Hi so I am a total noob in programming, to strengthen my practice I tried to do a hangman project(not the typical hangman which uses GUI). PREREQUISITE Dictionaries,tuples, loops(including nesting of loops),if-else statement and the random function in python PROBLEM FACED The while loop isn't working. It runs perfect until the end, then it wont exit the while loop and and (print yikes!!you have won). It stays in the while loop(which I have set an infinite loop) and say's "enter a character" and refuses to exit the loop. Please debug my code or suggest changes in it so that I can exit the while loop after the correct word has been guessed. For ease I am only uploading the crux of the code (where I am facing the problem, feel free to run the code in your console

What I have tried:

Python
import random
    store=""
    d=input("ENTER START: ")
    p=d.lower()
    sb={"fruits":("strawberry","banana","apple","orange","guava","grapes"),"colours":("red","blue","orange","brown","yellow"),"cars":("maruti","nano","ferrrari","audi","jaguar")}
    keys=list(sb)
    for i in range(len(keys)):
        f=random.randint(0,len(keys)-1)
        j=keys[f]
        q=sb[j]
        r=random.randint(0,len(q)-1)
        x=q[r]
    print(x)
    if p!="start":
        cc=input("Enter the CORRECT command in pls: ")
        store=cc.lower()
    if p=="start" or cc=="start":
        print("HINT 1:ok so I have chosen",j+"!!!\n and you have",len(x)+2,"chances to guess")
        for i in range(len(x)+2):
                term=x
                query = []
                flag = 0 
                chance=0
                while True:
                    query.append(input("Enter the letter: ").lower())
                    output = " ".join([x if x in query else "_" for x in term.lower()])
                    print(output)
                    flag += 1 if query[-1] in term.lower() else 0
                    chance+=1
                    query = list(set(query))
                    if flag == len(set(term)) or chance==len(term)+2:
                        print("YIKES!!you won!!!")
                        break
Posted
Updated 20-Nov-21 22:04pm

1 solution

Getting your code to run at all does not mean your it is right! :laugh:
Think of the development process as writing an email: compiling successfully means that you wrote the email in the right language - English, rather than German for example - not that the email contained the message you wanted to send.

So now you enter the second stage of development (in reality it's the fourth or fifth, but you'll come to the earlier stages later): Testing and Debugging.

Start by looking at what it does do, and how that differs from what you wanted. This is important, because it give you information as to why it's doing it. For example, if a program is intended to let the user enter a number and it doubles it and prints the answer, then if the input / output was like this:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Then it's fairly obvious that the problem is with the bit which doubles it - it's not adding itself to itself, or multiplying it by 2, it's multiplying it by itself and returning the square of the input.
So with that, you can look at the code and it's obvious that it's somewhere here:
C#
int Double(int value)
   {
   return value * value;
   }

Once you have an idea what might be going wrong, start using the debugger to find out why. Put a breakpoint on the first line of the method, and run your app. When it reaches the breakpoint, the debugger will stop, and hand control over to you. You can now run your code line-by-line (called "single stepping") and look at (or even change) variable contents as necessary (heck, you can even change the code and try again if you need to).
Think about what each line in the code should do before you execute it, and compare that to what it actually did when you use the "Step over" button to execute each line in turn. Did it do what you expect? If so, move on to the next line.
If not, why not? How does it differ?
Hopefully, that should help you locate which part of that code has a problem, and what the problem is.
This is a skill, and it's one which is well worth developing as it helps you in the real world as well as in development. And like all skills, it only improves by use!
 
Share this answer
 
Comments
Dhriti Dey 21-Nov-21 7:04am    
Thanks for looking into my question and answering but.. actually I am a novice and dont know the concepts of breakpoints and single stepping as I fear that at this point, these concepts might go over my head. Is there any other way to go about it?
OriginalGriff 21-Nov-21 7:33am    
No. And it's much, much simpler to learn these things with a tiny little project like this than it would be with a proper-sized "real world" project.

Debuggers aren't difficult - quite the contrary they make it far, far easier for you to work out what a problem is and what you need to do to fix it. Give it a try, it's well worth it.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900