Python Forum
Correct number wrong position func.
Thread Rating:
  • 4 Vote(s) - 2.25 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Correct number wrong position func.
#1
import random
question = random.randint(1,1001)

def get_user_input():
    try:
        guess = int(input("Please enter a guess: "))
        return guess 
    except ValueError:
        print("Invalid guess! Please enter 3 digits between 0 - 9")
            
def get_hint(guess, question):
    if guess[i] != question[i]:
        print("W")
        ## print a 'w' for each number that doesn't match
    if guess[i] == guess[1]:
        #add to a dict? 
        # print a 'r' for each that does match
    if guess[1] == question[i-1]:
        #i want to check if the number is equal to another number in the guess, but not in the same matching position 
        # print 'x' for the right number in the wrong spot 
            
def play_game():
    print("Welcome to the RWX Game!")
    print("Your aim is to guess the target, consisting of 3 digits between 0 - 9")

    counts = 0
    remaining_score = 10000
    while remaining_score > 9000:
        x = get_user_input()
        if x != question:
            print("Your guess, %s, is incorrect!" %(x))
            get_hint(x, question)
            remaining_score = float(remaining_score - (remaining_score * 0.1))
            counts +=1
        else: 
            if x == question: 
                print("Congratulations!")
                print("%s was the correct answer" %(x))
                print("You guessed the correct answer in %d tries! Your score is %g!" %(counts, remaining_score))
    else:
        print("You Loose!")
        print("The correct answer was %s ! But you didn't guess it in 23 attempts!" %(question))
        again = str(input("Would you like to pay again? Y / N ?"))
        if again == 'y' or 'Y':
            play_game()
        else:
            print("Thank you for playing! Goodbye!")
            
play_game()
Hello! I have made a 'Guess the number game'. I am trying to write a get-hint(x,y): function that takes the users guess and the correct answers and compares them to each other, printing a specific letter if the numbers match, are wrong or match but are in the wrong position.

First issue: I'm not sure how to run through and match the numbers that are correct but in the wrong spot. Would it just be something like ? :

for i in guess:
    if i = question[i] 
Second issue:
I'm not sure how to get them to come together as one 3 digit hint.
I want them to print them like 'WXR' horizontally, not vertically. Should I using the results of the get_hint function by setting a variable or something ? and formatting them into a string with %?

If anyone could point me to the way I need to do this! I'm just stumped on how to make it work from here!

Thank you in advance !
Reply
#2
This can be greatly simplified, example:
>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 
>>> list2 = [4, 8, 2, 0, 5]
>>> # same number, wrong postiion
... [b for a, b in zip(list1, list2) if b != a]
[4, 8, 2, 0]
>>> # same number same position
... [b for a, b in zip(list1, list2) if b == a]
[5]
>>>
Reply
#3
Observations:

- random.randint(1, 1001) can return values like 1, 10, 100 or 1000. If you ask user to enter 3 digits then it's quite hard to win if random returns 1, 10 or 1000.

- you should be aware that function get_user_input() returns any value what can be converted to int. It will note enforce three digits rule. It can be a problem if you want give hints (user enters 123456 and correct number is 7, what hints there should be?)

Regarding your question - keep in mind that int object is not subscriptable.
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#4
(Jan-10-2019, 12:25 PM)Larz60+ Wrote: This can be greatly simplified, example:
 >>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] >>> list2 = [4, 8, 2, 0, 5] >>> # same number, wrong postiion ... [b for a, b in zip(list1, list2) if b != a] [4, 8, 2, 0] >>> # same number same position ... [b for a, b in zip(list1, list2) if b == a] [5] >>> 

Im Sorry, this is a little advanced for me. I understand that what you have included is running through and matching what I needed but I'm still not sure on how to make it work. Would I be setting list1 as my 'guess' variable and list2 as 'question' ?

I've put it in like this:
def get_hint(guess, question):
    list1 = str(guess)
    list2 = str(question)
    for a, b in zip(list1, list2):
        if b != a :
            print("X")
    else:
        for a, b in zip(list1, list2):
            if b == a:
                print("R")
But all it is doing is printing off :
X
X
X

no what I enter, whether I put in a matching number, an incorrect number or a wrong position number.
Is it not working because I've done with the 'for' and 'if' statement.

Thank you for you help. I am still a baby at this and want to make sure I understand what I am doing, not just coping stuff!
Reply
#5
Before adding new features to your code you should check whether existing code delivers expected results.

It's unclear what are the rules of the game.

I reiterate my observations:

- 'question' value can be 1...1001 but you ask user to enter 3 digits. If random value is 1..99 or 1000-1001 it is not possible to win (FYI: random.randint: Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).)

- your wording of message to user: "Your aim is to guess the target, consisting of 3 digits between 0 - 9" is misleading. You generate int with value in range 1...1001 as value of 'question' but then ask enter three digits in peculiar way. Why don't just say: please enter number in range 1...1001 (or maybe 100...999). In current wording 010 seems legit input.

- you create 'question' value outside the game function. This means that if player chooses to continue playing the question value remains the same.
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#6
Quote:Albry wrote:

Im Sorry, this is a little advanced for me. I understand that what you have included is running through and matching what I needed but I'm still not sure on how to make it work. Would I be setting list1 as my 'guess' variable and list2 as 'question' ?

I misunderstood the original question.

I thought you were trying to show number of correct items in (guess history) list, as well as those in correct positions.
the example I showed (although not relevant now that I understand the question) was if you had a random list and a guess history list
as in a mastermind type of game, so example was:

Output:
random_list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] guesses: [4, 8, 2, 0, 5, ...] |____________ Correct Number, exact position

so all guesses are correct, but only one (5) is in the correct position, so

def show_correct_guess(random_list, guesses, exact=True):
    if exact:
        return [b for a, b in zip(random_list, guesses) if b == a]
    else:
        return [b for a, b in zip(random_list, guesses) if b != a]
would return [4, 8, 2, 0] if exact is False
and [5] if exact is True
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to output one value per request of the CSV and print it in another func? Student44 3 1,279 Nov-11-2022, 10:45 PM
Last Post: snippsat
  Am I wrong or is Udemy wrong? String Slicing! Mavoz 3 2,387 Nov-05-2022, 11:33 AM
Last Post: Mavoz
  The code I have written removes the desired number of rows, but wrong rows Jdesi1983 0 1,602 Dec-08-2021, 04:42 AM
Last Post: Jdesi1983
  wrong forum, please delete. reposted in correct forum. woodmister 0 1,571 Jan-04-2021, 11:17 PM
Last Post: woodmister
  Func Animation not displaying my live graph jotalo 0 1,524 Nov-13-2020, 10:56 PM
Last Post: jotalo
  Trying to write func("abcd") -> "abbcccdddd" omm 8 3,984 Oct-24-2020, 03:41 AM
Last Post: bowlofred
  How can i judge 1st string position is correct number christing 3 2,369 Oct-30-2019, 03:32 AM
Last Post: newbieAuggie2019
  python gives wrong string length and wrong character thienson30 2 2,943 Oct-15-2019, 08:54 PM
Last Post: Gribouillis
  Number bug, calculation is wrong d3fi 2 2,429 Aug-27-2019, 05:29 AM
Last Post: perfringo
  call func from dict mcmxl22 3 2,822 Jun-21-2019, 05:20 AM
Last Post: snippsat

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020