Я получаю код выхода 0, но программа не делает то, что я хочу. Похоже, это застревает в первой строке кода - PullRequest
0 голосов
/ 11 октября 2019

При запуске программы я получаю код выхода 0, но он не выполняет всю функцию / код. Кажется, он просто запускает первую строку ... есть идеи, как это решить? заранее большое спасибо!

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()

Ответы [ 3 ]

0 голосов
/ 11 октября 2019

Как ответили другие ответы, ошибка содержится в предложении return, где она должна быть удалена (поскольку она ограничивает выполнение), а также в необходимости приведения второго ввода к str для итерации и сравнения. Тем не менее, предложение input уже возвращает строку, поэтому вы можете либо привести первый вход к str, либо преобразовать каждое значение второго входного значения в int при сравнении. Кроме того, если вы хотите сравнить каждую цепочку чисел по символам (от первого до первого и т. Д.), Логика вашей программы неверна (она сравнивает каждый элемент второй цепочки только с первым значением первогослучайная цепь!).

Вот код с оператором печати первой цепочки для отладки.

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()    

РЕДАКТИРОВАТЬ: вот более питонский способ построения случайной цепочки целых чисел, используяпонимание списка.

chain=[random.randint(1,9) for i in range(length+1)]
0 голосов
/ 11 октября 2019

вот что я вижу в консоли:

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 голосов
/ 11 октября 2019

Вам просто нужно удалить оператор return из середины вашего кода. Вызов оператора return заставляет ваш код выйти из функции и вернуть сгенерированную вами цепочку. В этом нет необходимости.

Если вы запустите это без оператора return, вы столкнетесь с другой ошибкой. Следующий пользовательский ввод должен иметь тип string, а не int, поэтому вам нужно будет проанализировать его как таковой с str(), а не int(), поскольку что-то типа int не итеративно.

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()

Такжев будущем постарайтесь представить минимальный воспроизводимый пример вашего кода и объясните, почему вы думаете, что он показывает ошибку, что вы сделали, а не только то, что ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...