user4409899
user4409899

Reputation:

Trying to create bagel game in python

I am getting this error. Please help me explain the cause and the meaning of the error

Traceback (most recent call last):
  File "E:\Python\bagels.py", line 61, in <module>
    while len(guess) != NUMDIGITS or not isOnlyDigits(guess):
TypeError: object of type 'builtin_function_or_method' has no len()

I am doing lessons from invent with python and stuck on this lesson https://inventwithpython.com/chapter11.html

here is my code

import random

def getSecretNum(numDigits):

    numbers = list(range(10))
    random.shuffle(numbers)
    secretNum = ''
    for i in range(numDigits):
        secretNum += str(numbers[i])
    return secretNum

def getClues(guess, secretNum):

    if guess == secretNum:
        return 'You got it!'

    clue = []

    for i in range(len(guess)):
        if guess[i] == secretNum[i]:
            clue.append('fermi')
        elif guess[i] in secretNum:
            clue.append('Pico')
    if len(clue) == 0:
        return 'Bagels'

    clue.sort()
    return ' '.join(clue)

def isOnlyDigits(num):

    if num == '':
        return False

    for i in num:
        if i not in '0 1 2 3 4 5 6 7 8 9'.split():
            return False
    return True

def playAgain():
    print('Do you want to play again?(yes or no)')
    return input().lower().startswith('y')

NUMDIGITS = 3
MAXGUESS = 10

print('I am thinking of a %s-digit number. Try to guess what it is.' %(NUMDIGITS))
print('here are some clues:')
print('When I say:    That means:')
print('  Pico         One digit is correct but in the wrong position.')
print('  Fermi        One digit is correct and in right position.')
print('  Bagels       No digit is correct.')

while True:
    secretNum = getSecretNum(NUMDIGITS)
    print('I have thought of a number. You have %s guesses to guess it' %(MAXGUESS))

    numGuesses = 1
    while numGuesses <= MAXGUESS:
        guess = ''
        while len(guess) != NUMDIGITS or not isOnlyDigits(guess):
            print('Guess #%s: ' % (numGuesses))
            guess = input

        clue = getClues(guess, secretNum)
        print(clue)
        numGuesses ++ 1

        if guess == secretNum:
            break
        if numGuesses > MAXGUESS:
            print('You ran out of guesses. The answer was %s. ' %(secretNum))

    if not playAgain():
        break

Upvotes: 0

Views: 1301

Answers (2)

Matthias
Matthias

Reputation: 13232

In the while loop you overwrite guess with the builtin function input.

You need to call the input function (please notice the extra pair of parentheses).

    while len(guess) != NUMDIGITS or not isOnlyDigits(guess):
        print('Guess #%s: ' % (numGuesses))
        guess = input()

Upvotes: 2

Marcus M&#252;ller
Marcus M&#252;ller

Reputation: 36442

The problem is here:

        guess = input

    clue = getClues(guess, secretNum)

guess is now a reference to input, which is a python built-in function (like the error said).

You might want to do

guess = int(input("please enter guess"))

Upvotes: 0

Related Questions