Я создаю функцию, которая возвращает сумму всех чисел в списке FizzBuzz. Я думал, что это будет хорошо, но не работает. В Python

#python

#python

Вопрос:

Результат равен 0, должно быть 60, если я наберу 15, но нет. Я не знаю почему, но n_numlist пуст. В чем моя ошибка? Я не могу его найти!! Есть ли кто-нибудь, кто может найти? Пожалуйста, помогите мне!!

 #This is my code:

def to_fizzbuzz(number):
    if number % 15 == 0:
        return 'FizzBuzz'

    if number % 3 == 0:
        return 'Fizz'

    if number % 5 == 0:
        return 'Buzz'

    else:
        return str(number)
        # return i

def main():
    N = int(input())
    # this list concludes "FizzBuzz", "Fizz" or "Buzz"
    fblist = []
    for number in range(1, 10**6):
        result = to_fizzbuzz(number)
        fblist.append(result)

    # the list up to N
    n_list = fblist[0:N]
    # this list contains only numbers and up to N

    n_numlist = []

    for s in n_list:
        if s.isdigit == True:
            n_numlist.append(s)

    print(sum(n_numlist))


main()
  

Комментарии:

1. вы пытались напечатать первые элементы fblist и n_list, чтобы посмотреть, соответствует ли это вашим ожиданиям?

2. 1) isdigit это функция. Вы, вероятно, хотите сказать if s.isidigt() (несвязанно, == True ничего не делает). 2) Что вы ожидаете получить от суммы списка строк ( n_numlist )?

3. > glagla: я попробовал для n_list, и это было успешно, но для fblist и n_numlist не fblist похоже на повторение от 1 до 15, а fblist пуст

4. > gspr: 1) хорошо, это означает, что я не могу использовать isdigit здесь? потому что это функция? 2) Если входные данные равны 15, 60

5. > glagla и gspr: Спасибо за ответ! Это так полезно

Ответ №1:

Вам нужно изменить свой for s in n_list цикл на это:

 for s in n_list:
    if s.isdigit() == True:
        n_numlist.append(int(s))
  

Поскольку isdigit() это функция, вам нужно добавить () в конец, чтобы вызвать ее.

Поскольку вы возвращаете свои числа в виде строк — return str(number) — он не может их суммировать, поэтому вам нужно преобразовать их обратно в целые числа, когда вы добавляете их к n_numlist .

Комментарии:

1. > Дэвид Сандерс: Спасибо за ответ! Я отредактировал, как вы сказали, и теперь это работает! Я, как правило, забываю добавить (), который я узнал. Спасибо!!

Ответ №2:

 x = int(input())

inputList = list(range(1,x 1)) #creating a list [1,x]
stringList = [str(a) for a in inputList] #changing int elements to string

for n, i in enumerate(stringList): #n shows which element from list, i shows this element

    if int(i) %15 == 0: #changing to int because we are doing math
        stringList[n] = "FizzBuzz" 

    elif int(i) %5 == 0:
        stringList[n] = "Fizz"

    elif int(i) %3 == 0:
        stringList[n] = "Buzz"

print(stringList) #let's see our new list

last_list = [] #lets add output list

for a in stringList: 
        if a.isdigit() == True: #you forgot put () to isdigit by the way 
            last_list.append(a) 

int_last_list = [int(a) for a in last_list] #we are changing all elements to int because we are going to do some math.

print(sum(int_last_list))
  

Комментарии:

1. ну, кажется, вы решили свою проблему, извините, я новичок, и я пытался создать BuzzFeed самостоятельно. Спасибо за опыт, хотя ^^