Почему делают я получаю TypeError: не может умножить последовательность на неинтервал типа 'плавание'?

Функции возвращают неизменные значения. Это так, как это происходит в Swift. Если вы хотите, чтобы он был изменяемым, вы должны сначала сохранить его в var.

Однако, вы можете использовать + для объединения Array с любым Sequence. Поэтому, если filteredApps является Array, это должно сработать:

    let filteredDataOpt: [TimeSeriesEntry?] = filteredApps
        .map { data in
            let isInDate = dates.contains { date in
                guard let d = date else {
                    return false
                }
                return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
            }
            return isInDate ? self.timeSeriesData(appData: data) : nil
    } + self.locationsData.map { data in
        let isInDate = dates.contains { date in
            guard let d = date else {
                return false
            }
            return Calendar.current.isDate(d, equalTo: data.date, toGranularity: Calendar.Component.day)
        }
        return isInDate ? self.timeSeriesData(locationData: data) : nil
    }
    let filteredData = filteredDataOpt.compactMap { [110] }

Есть несколько других вещей, которые мы можем сделать, чтобы очистить и этот код. Мы можем вычленить тест даты:

    func isValid(_ candidate: Date) -> Bool {
        return dates.contains { date in
            guard let d = date else {
                return false
            }
            return Calendar.current.isDate(d, equalTo: candidate, toGranularity: Calendar.Component.day)
        }
    }

    let filteredDataOpt: [TimeSeriesEntry?] = filteredApps
        .map { data in
            return isValid(data.date) ? self.timeSeriesData(appData: data) : nil
    } + self.locationsData.map { data in
        return isValid(data.date) ? self.timeSeriesData(locationData: data) : nil
    }
    let filteredData = filteredDataOpt.compactMap { [111] }

В зависимости от ваших данных, может быть лучше предварительно рассчитать допустимые диапазоны Date:

    let calendar = Calendar.current
    let dayRanges: [Range<Date>] = dates.lazy.compactMap({ [112] }).map({ date in
        let start = calendar.startOfDay(for: date)
        let end = calendar.date(byAdding: .day, value: 1, to: start)!
        return start ..< end
    })

    func isValid(_ candidate: Date) -> Bool {
        return dayRanges.contains(where: { [112].contains(candidate) })
    }

Мы также можем разделить фильтрация от трансформера. Это позволяет нам исключить использование compactMap:

    let filteredData = Array(filteredApps.lazy.filter({ isValid([113].date) }).map(self.timeSeriesData))
        + locationsData.lazy.filter({ isValid([113].date) }).map(self.timeSeriesData)

Или мы могли бы использовать compactMap дважды:

    let filteredData = filteredApps.compactMap({ isValid([114].date) ? self.timeSeriesData(appData: [114]) : nil })
        + locationsData.compactMap({ isValid([114].date) ? self.timeSeriesData(locationData: [114]) : nil })
80
задан 5 revs, 3 users 65% 28 September 2012 в 00:31
поделиться

2 ответа

raw_input возвраты строка (последовательность символов). В Python, умножая строку и плавание не делает определенного значения (при умножении строки, и целое число имеет значение: "AB" * 3 "ABABAB"; сколько "L" * 3.14? Не отвечайте "LLL|"). Необходимо проанализировать строку к численному значению.

Вы могли бы хотеть попробовать:

salesAmount = float(raw_input("Insert sale amount here\n"))
69
ответ дан 2 revs, 2 users 77% 24 November 2019 в 09:59
поделиться

Проблема состоит в том, что salesAmount устанавливается на строку. Если Вы вводите переменную в интерпретатор Python и совершаете нападки, входят, Вы будете видеть значение, вводимое окруженный кавычками. Например, если бы Вы вошли 56.95, то Вы видели бы:

>>> sales_amount = raw_input("[Insert sale amount]: ")
[Insert sale amount]: 56.95
>>> sales_amount
'56.95'

Вы захотите преобразовать строку в плавание прежде, чем умножить его на налог с продаж. Я оставлю это, чтобы Вы выяснили.Удачи!

3
ответ дан 2 revs 24 November 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: