Cuando ejecuto el programa, obtengo el código de salida 0 pero no ejecuta toda la función / código. Parece que solo corre la primera línea ... ¿alguna idea sobre cómo resolver esto? ¡Muchas gracias de antemano!

import random

def mastermind():

    #asking for length
    length=int(input("chain length of 2 to 9: "))

    #generating random chain of 2 to 9 numbers according to user's demand:
    chain=[]
    for number in range(length+1):
        chain_nr=random.randint(1,9)
        chain.append(chain_nr)
    return chain


    #guessed chain
    guessed_chain = int(input("guessed chain: "))
    guessed_count = 0
    for nr in guessed_chain:
        if nr in chain and nr == chain[0]:
            guessed_count +=1
            print(f'"you\'ve guessed" {guessed_count}"numbers of the chain"')
        else:
            print("you haven't guessed any number")

mastermind()
0
Marta 11 oct. 2019 a las 12:37

3 respuestas

La mejor respuesta

Como respondieron otras respuestas, el error está en la cláusula de devolución, donde debe eliminarse (ya que reduce la ejecución), así como la necesidad de emitir la segunda entrada a str para iterar y comparar. Sin embargo, la cláusula input ya devuelve una cadena, por lo que puede convertir la primera entrada en str o convertir cada valor de la segunda entrada en int al comparar. Además, si desea comparar cada cadena de números en cuanto a caracteres (primero a primero y así sucesivamente), la lógica de su programa es incorrecta (está comparando cada elemento de la segunda cadena con solo el primer valor del primero cadena al azar!).

Aquí está el código, con una declaración impresa de la primera cadena para depurar.

import random

def mastermind():

    #asking for length
    length=int(input("chain length of 2 to 9: "))

    #generating random chain of 2 to 9 numbers according to user's demand:
    chain=[]
    for number in range(length+1):
        chain_nr=random.randint(1,9)
        chain.append(chain_nr)

    print(chain)

    #guessed chain
    guessed_chain = input("guessed chain: ")
    guessed_count = 0
    for i, nr in enumerate(guessed_chain):
        if int(nr) in chain and int(nr) == chain[i]:
            guessed_count +=1
            print(f'"you\'ve guessed" {guessed_count}"numbers of the chain"')
        else:
            print("you haven't guessed any number")

mastermind()    

EDITAR: aquí hay una forma más pitónica de construir la cadena aleatoria de enteros, utilizando la comprensión de la lista.

chain=[random.randint(1,9) for i in range(length+1)]
0
jcf 11 oct. 2019 a las 10:34

Simplemente necesita eliminar la declaración return de la mitad de su código. Llamar a una declaración de devolución hace que su código salga de la función y devuelva la cadena que generó. No hay necesidad de eso.

Si ejecuta esto sin la declaración de devolución, encontrará otro error. La siguiente entrada del usuario debe ser de tipo cadena y no int, por lo tanto, deberá analizarla como tal con str() en lugar de int() ya que algo de tipo int no es iterable.

import random

def mastermind():

    #asking for length
    length=int(input("chain length of 2 to 9: "))

    #generating random chain of 2 to 9 numbers according to user's demand:
    chain=[]
    for number in range(length+1):
        chain_nr=random.randint(1,9)
        chain.append(chain_nr)

    # no need for the return statement here 

    #guessed chain
    guessed_chain = str(input("guessed chain: "))
    guessed_count = 0
    for nr in guessed_chain:
        if nr in chain and nr == chain[0]:
            guessed_count +=1
            print(f'"you\'ve guessed" {guessed_count}"numbers of the chain"')
        else:
            print("you haven't guessed any number")

mastermind()

También para el futuro, intente proporcionar un ejemplo reproducible mínimo de su código y explique por qué cree que le está mostrando un error, lo que hizo y no solo cuál es el error.

0
Ahmad Moussa 11 oct. 2019 a las 09:49

Esto es lo que veo en la consola:

I imported
mastermind will be called
chain length of 2 to 9: 5
guessed chain: 456
Traceback (most recent call last):
  File "E:/Python/Part3ej2.py", line 28, in <module>
    mastermind()
  File "E:/Python/Part3ej2.py", line 21, in mastermind
    for nr in guessed_chain:
TypeError: 'int' object is not iterable

Process finished with exit code 1
0
Marta 11 oct. 2019 a las 09:59
58338432