简体   繁体   中英

why my code not working AttributeError: 'int' object has no attribute 'isdigit'

#Guess the num
import random
def is_valid_num(num):
    if num.isdigit() and 1 <= int(num) <= 100:
        return True
    else:
        return False

def main():
    number = random.randint(1,100)
    guessed_number = False
    guess = input('enter a num')
    #guess = (input('enter a num'))
    num_of_guesses = 0
    while not guessed_number:
        if not is_valid_num(guess):
            #return False
            guess = input('i count only digits enter 1<num<100')
            continue
        else:
            num_of_guesses += 1
            #break
            guess = int(guess)
        if guess < number:
            print ('entered number is low')

        elif guess > number:
            print ('entered number is high')

        else:
            print ('you got in',num_of_guesses, 'guesses')
            guessed_number = True
main()

Expected Out if random number is system is 51 and we pressed 50 it will print too low, then continue this process lets say we gave input 51 output will you got in 2 guesses

isdigit() is a string method, it doesn't work on int inputs.

change this:

guess = int(input('enter a num'))

to this:

guess = input('enter a num')

your code after editing:

#Guess the num
import random
def is_valid_num(num):
    if num.isdigit() and 1 <= int(num) <= 100:
        return True
    else:
        return False

def main():
    number = random.randint(1,100)
    guessed_number = False
    guess = input('enter a num')
    #guess = (input('enter a num'))
    num_of_guesses = 0
    while not guessed_number:
        if not is_valid_num(guess):
            #return False
            guess = input('i count only digits enter 1<num<100')
            continue
        else:
            num_of_guesses += 1
            break

    guess = int(guess)
    if guess < number:
        print ('entered number is low')
    elif guess > number:
        print ('entered number is high')
    else:
        print ('you got in',num_of_guesses, 'guesses')
        guessed_number = True
main()
@Thanks Issac Full code is below

#Guess the num
import random
def is_valid_num(num):
    if num.isdigit() and 1 <= int(num) <= 100:
        return True
    else:
        return False

def main():
    number = random.randint(1,100)
    guessed_number = False
    guess = input('enter a num')
    #guess = (input('enter a num'))
    num_of_guesses = 0
    while not guessed_number:
        if not is_valid_num(guess):
            #return False
            guess = input('i count only digits enter 1<num<100')
            continue
        else:
            num_of_guesses += 1
            #break

            guess = int(guess)
        if guess < number:
            guess = (input('entered number is low try again'))
        elif guess > number:
            guess = (input('entered number is high try again'))
        else:
            print ('you got in',num_of_guesses, 'guesses')
            guessed_number = True
main()

Output is below

>>enter a num55
entered number is high try again55
entered number is high try again45
entered number is high try again88
entered number is high try again30
entered number is high try again10
entered number is low try again20
entered number is low try again25
entered number is high try again22
entered number is low try again23
you got in 10 guesses

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM