TypeError: объект типа 'Fraction' не имеет len () - PullRequest
0 голосов
/ 01 марта 2020

Я настроил его, чтобы добавить себя в обновление, но теперь у меня проблемы с основной, где я тестирую материал.

from file import Fraction
import random
def main():
    a = Fraction()
    b = a.update()
main()

Я пытаюсь сделать это для Для работы l oop предполагается вычесть первое число списка на второе, второе на третье и т. д. c и создать новый список с этими значениями. Часть __init__ работает, но тогда у меня возникает проблема с обновлением.

class Fraction():
    def __init__(self):
        shape = int(input("How many sides does the shape have? : "))
        if shape <= 0: #doesnt work with negatives?
            print("Please make a valid choice (positive integers only)")
            shape = int(input("How many sides does the shape have? : "))
        numbers = 0
        print("Your numbers are: ")
        numbers = []
        for i in range(0,shape):
            n = random.randint(1,100)
            numbers.append(n)
        print(numbers)

    def update(numbers):
        long=len(numbers)
        for i in range(long):
            newnum = numbers[i]-numbers[i+1]

        print(newnum)

1 Ответ

0 голосов
/ 01 марта 2020

Вы должны использовать self.number, чтобы иметь доступ к номерам в update. И вы должны использовать self вместо number в def update(number)

Также для создания нового списка вы должны создать пустой список до for -l oop и append(newnum) для этого списка. И позже вы можете return этот список, чтобы получить его как b = ...

class Fraction():

    def __init__(self):
        shape = int(input("How many sides does the shape have? : "))

        if shape <= 0: #doesnt work with negatives?
            print("Please make a valid choice (positive integers only)")
            shape = int(input("How many sides does the shape have? : "))

        self.numbers = []
        for i in range(shape):
            n = random.randint(1, 100)
            self.numbers.append(n)
        print("Your numbers are:", self.numbers)

    def update(self):
        newlist = []

        long = len(self.numbers)
        for i in range(long-1): # it has to be long-1 because later `long-1+1`will give `long` 
            newnum = self.numbers[i] - self.numbers[i+1]
            newlist.append(newnum)

        return newlist

import random

def main():
    a = Fraction()
    b = a.update()
    print(b)
main()

Кстати: было бы хорошо использовать input() вне класса и запустить его как Fraction(shape), чтобы он мог работать со значениями из input() или файлом или жестко закодированным переменным. Это помогает снова и снова проверять код с одинаковыми значениями.

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