Invalid type error

2

I wrote this code:

import random 

continuar=1
while continuar ==1:
    print("Bienvenido a mistermind")
    print("Elija el nivel de dificultad (1=facil, 2=normal, 3=dificil")
    dificultad=int(input("escoja el nivel de dificultad: "))
    if dificultad==1:
        cant_digitos=3
    elif dificultad==2:
        cant_digitos=4
    elif dificultad==3:
        cant_digitos=5
    digitos=("0","1","2","3","4","5","6","7","8","9")
    codigo=("")

    for i in range(cant_digitos):
        elegido=random.choice(digitos)
        while elegido in codigo:
            elegido=random.choice(digitos)
        codigo=codigo+elegido

    print("Tienes que adivinar un número de", cant_digitos, "digitos")
    print("No puede haber 2 números iguales en el codigo")
    propuesta=int(input("Que codigo propones: "))
    intentos=1

    while propuesta != codigo:
        intentos=intentos+1
        aciertos=0
        coincidencias=0
        for i in range(cant_digitos):
            if propuesta(i) == codigo(i):
                aciertos=aciertos+1
            elif propuesta(i) in codigo(i):
                coincidencias=coincidencias+1
            print("Aciertos=has acertado un número en el sitio en el que esta y "
                "Coincidencias=has acertado un número pero no va en ese sitio")
            print("Tu propuesta(",propuesta,")tiene ",aciertos,
                "aciertos y ",coincidencias," coincidencias")
            propuesta=input("Propon otra propuesta: ")

    print("FELICIDADES! adivinaste el codigo en",intentos," intentos")
    continuar=int(input("Quieres seguir jugando (1=si 0=no): "))

But when I put the level of difficulty and propose a number, it sends me this error:

Traceback (most recent call last):   
File "mistermind.py", line 33, in <module>
   if propuesta(i) == codigo(i): 
TypeError: 'int' object is not callable
    
asked by Snake 10.07.2017 в 18:28
source

1 answer

2

I've tweaked the code a bit since it has several problems:

import random 

continuar = 1
while continuar == 1:
    print("Bienvenido a mistermind")
    print("Elija el nivel de dificultad (1=fácil, 2=normal, 3=difícil")
    dificultad = int(input("escoja el nivel de dificultad: "))
    if dificultad == 1:
        cant_digitos = 2
    elif dificultad == 2:
        cant_digitos = 4
    elif dificultad == 3:
        cant_digitos = 5
    digitos = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
    codigo = ""

    for i in range(cant_digitos):
        elegido = random.choice(digitos)
        # Aquí no permites que se repitan dígitos y números como 112 no
        # serán seleccionados nunca. No lo modifico pero no sé si es lo 
        # que quieres. Por otra parte, puede ser que salga el número 012
        # y habría que dejar claro esa posibilidad.
        while elegido in codigo:
            elegido = random.choice(digitos)
        codigo = codigo + elegido

    print("Tienes que adivinar un número de", cant_digitos, "dígitos")
    print("No puede haber 2 dígitos iguales en el código")
    propuesta = input("Que código propones: ")
    intentos = 1

    while propuesta != codigo:
        intentos = intentos + 1
        aciertos = 0
        coincidencias = 0
        for i in range(cant_digitos):
            if propuesta[i] == codigo[i]:
                aciertos = aciertos + 1
            elif propuesta[i] in codigo[i]:
                coincidencias = coincidencias + 1
            print("Aciertos=has acertado un número en el sitio en el que esta y "
                "Coincidencias=has acertado un número pero no va en ese sitio")
            print("Tu propuesta(",propuesta,")tiene ",aciertos,
                "aciertos y ",coincidencias," coincidencias")
            propuesta = input("Propon otra propuesta: ")

    print("FELICIDADES! adivinaste el codigo en",intentos," intentos")
    continuar=int(input("Quieres seguir jugando (1=si 0=no): "))

You are comparing the variables propuesta (integer, initially) and codigo (string). It will always give you False . On the other hand, you are using parentheses instead of brackets as the operator to index, propuesta(i) instead of propuesta[i] , the interpreter understands that you are trying to call an integer as if it were a function and tells you that the integer can not be call (because it's not a function, hence the TypeError ).

    
answered by 10.07.2017 / 19:23
source