Почему указатель печатается, когда я пытаюсь распечатать содержимое списка? - PullRequest
0 голосов
/ 24 июня 2019

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

def square_digits(num):

    print(num)

    string_num =(str(num)) #convert the num to a string   

    for word in string_num: #iterate through every digit 

        word = int(word) #convert each digit to an int so we can square it
        square_num = word * word
        str_sq_num = list(str(square_num)) #create a list of those nums

        for count in str_sq_num:  #iterate through list to make it one number  
            print(count, end = "")  


    print(str_sq_num)
    return str_sq_num

Так, например, приводится номер примера 3212. Я должен вывести 9414, вместо этого мой вывод 9414['4']. Другим примером является число 6791, вывод должен быть 3649811, но мой вывод 3649811['1'].

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Проблема в способе работы циклов в python.Переменная str_square_num осталась от последней итерации for word in string_num.

Например, если предположить, что ваше число равно 12, в первой итерации str_square_num будет [1] или 1 в квадрате,Но это значение переопределяется во второй итерации, когда оно установлено на [4] или 2 в квадрате.Таким образом, массив всегда будет содержать только квадрат последней цифры.

Если ваша цель - получить массив всех признаков, попробуйте следующее:

def square_digits(num):
    print(num)
    string_num =(str(num)) #convert the num to a string
    str_sq_num = []

    for word in string_num: #iterate through every digit 

        word = int(word) #convert each digit to an int so we can square it
        square_num = word * word
        str_sq_num.extend(str(square_num)) #create a list of those nums

    for count in str_sq_num:  #iterate through list to make it one number  
        print(count, end = "")  


    print(str_sq_num)
    return str_sq_num
0 голосов
/ 24 июня 2019

Не могу проверить это, но это должно сделать это:

def square_digits (string_num):

return "".join([str(int(num)**2) for num in string_num])
0 голосов
/ 24 июня 2019

Я не совсем уверен, чего вы здесь добиваетесь, но, глядя на ваши примеры, я полагаю, это должно сработать:

def square_digits(num):
    print(num)

    string_num = (str(num))
    str_sq_num = []

    for word in string_num:
        word = int(word)
        square_num = word * word
        str_sq_num.append(square_num)
    for count in str_sq_num:
        print(count, end = "")

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