PYTHON : TypeError: can't multiply sequence by non-int of type 'float'

Odpowiedz Nowy wątek
2018-11-17 19:28
0

Witam,
Mam problem z float'ami w pythonie. Dodam tylko że jest to mój pierwszy program w pythonie, jednak dobrze znam c++ więc programowanie obce mi nie jest.
Program wywala mi taki oto błąd:

File "C:\Users\mkuch\source\repos\PythonApplication1\PythonApplication1\PythonApplication1.py", line 39, in <module>
f2 +=y[0] * f1
TypeError: can't multiply sequence by non-int of type 'float'

Problem pewnie jest banalny jednak nie znalazłem nic co mogło by mi jakoś pomóc zrozumieć ten problem.

A oto ten kod:

import numpy as np
import matplotlib.pyplot as plt

f1 = float(1.0)
f2 = float(0.0)
j = 0
c = 1
ile_punktow = 1
k =float(-5)
x = []
y = []
yp = []
f = []
p = []
print ("wprowadz rzad")
rzad = int(input())
print ("ile punktow")
ile_punktow = int(input())
print ("wprowadz kolejne wartosci x")
for i in range(ile_punktow):
    x.insert(i, float(input()))
print("wprowadz odpowiadajace wartosci y")
for i in range(ile_punktow):
    y.insert(i,float(input())),
    yp.insert(i,y[i]),
while k <= 5 :
    for i in range(rzad):
        y.insert(i, yp[i]),
    f.insert(c, y[0])
    j = 1
    f2 = float(0)
    while rzad != 1:
        for i in range(rzad - 1):
            p.insert(i, ((y[i + 1] - y[i]) / (x[i + j] - x[i]))),
            y.insert(i, p[i]),
        f1 = 1
        for i in range(j):
            f1 = f1*(k - x[i]),
        f2 +=y[0] * f1
        rzad = rzad - 1
        j = j + 1
    f.insert(c, f[c] + f2)
    print(f[c])
    k = k + 0.1
    c = c +1

Pozostało 580 znaków

2018-11-17 20:26
0
 f1 = f1*(k - x[i]),

ten przecinek tam po coś?

Pozostało 580 znaków

2018-11-18 22:04
0

temat mogę już zamknąć poradziłem sobie z problemem i były to właśnie te przecinki i brak zrozumienia po co one występowały

Pozostało 580 znaków

2018-11-19 08:03
0

Tak na marginesie, kodu tak pisanego nie da się czytać.
Patrz tylko na:

ile_punktow = int(input()) 
print ("wprowadz kolejne wartosci x")
for i in range(ile_punktow): 
    x.insert(i, float(input()))

Wersja Pythonowa (która na marginesie też jest szybsza):

ile_punktow = int(input("wprowadź ilość punktów i kolejne wartości x: "))
x = [float(input()) for _ in range(ile_punktow)]

Albo

for i in range(j): 
    f1 = f1*(k - x[i])

wystarczy zmienić na:

for element in x:
    f1 *= k - element

Użyłeś też pętli while, a wszystko co z nią robisz to powtórzenie zawartości pętli ileś krotnie - to jest zastosowanie pętli for (z ujemnym krokiem, np list(range(4, 0, -1)) == [4, 3, 2, 1]).

edytowany 1x, ostatnio: enedil, 2018-11-19 08:06

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0