Mengapa saya mendapatkan TypeError: tidak bisa mengalikan urutan dengan non-int tipe 'float'?

99

Saya mengetik untuk mendapatkan jumlah penjualan (dengan input) untuk dikalikan dengan pajak penjualan yang ditentukan (0,08) dan kemudian mencetak jumlah total (pajak penjualan dikalikan jumlah penjualan).

Saya mengalami kesalahan ini. Adakah yang tahu apa yang mungkin salah atau punya saran?

salesAmount = raw_input (["Insert sale amount here \n"])
['Insert sale amount here \n']20.99
>>> salesTax = 0.08
>>> totalAmount = salesAmount * salesTax

Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    totalAmount = salesAmount * salesTax
TypeError: can't multiply sequence by non-int of type 'float'
SD.
sumber

Jawaban:

86

raw_inputmengembalikan string (urutan karakter). Dalam Python, mengalikan string dan float tidak memiliki arti yang ditentukan (sementara mengalikan string dan integer memiliki arti: "AB" * 3is "ABABAB"; berapa harganya "L" * 3.14? Tolong jangan balas "LLL|"). Anda perlu mengurai string menjadi nilai numerik.

Anda mungkin ingin mencoba:

salesAmount = float(raw_input("Insert sale amount here\n"))
Marc Gravell
sumber
Saya belajar membaca kesalahan sintaks sebelum memposting di sini dan menggunakan Google. Saya mencoba mengonversi raw_input untuk salesAmount ke int daripada float. Tahukah Anda mengapa int tidak akan bekerja, melainkan float? Bare with me, lol.
SD.
3
Mengalikan (menggunakan operator *) string dengan integer didefinisikan dengan baik di Python. Mengalikan string dengan float tidak didefinisikan, dan itulah yang dikeluhkan Python.
Greg Hewgill
Terima kasih Greg! Saya rasa saya perlu menurunkan beberapa aturan dasar.
SD.
1
@ Raj: Saya mengatakan itu didefinisikan dengan baik, tetapi itu belum tentu seperti yang Anda harapkan. "abc" * 3 adalah "abcabcabc", dan oleh karena itu "5" * 3 adalah "555".
Greg Hewgill
54

Mungkin ini akan membantu orang lain di masa mendatang - Saya mengalami kesalahan yang sama saat mencoba menggandakan pelampung dan daftar pelampung. Masalahnya adalah semua orang di sini berbicara tentang mengalikan pelampung dengan string (tetapi di sini semua elemen saya mengambang selama ini) jadi masalahnya sebenarnya menggunakan operator * pada daftar.

Sebagai contoh:

import math
import numpy as np
alpha = 0.2 
beta=1-alpha
C = (-math.log(1-beta))/alpha

coff = [0.0,0.01,0.0,0.35,0.98,0.001,0.0]
coff *= C

Kesalahannya:

    coff *= C 
TypeError: can't multiply sequence by non-int of type 'float'

Solusinya - ubah daftar menjadi array numpy:

coff = np.asarray(coff) * C
Serendipity
sumber
Saya suka pendekatan ini!
Léo Léopold Hertz 준영
1
jika Anda tidak ingin mengimpor numpy, Anda dapat melakukannya:coff = [i * c for i in coff]
nicolas.fg
3

Masalahnya adalah salesAmount disetel ke string. Jika Anda memasukkan variabel di interpreter python dan menekan enter, Anda akan melihat nilai yang dimasukkan dikelilingi oleh tanda kutip. Misalnya, jika Anda memasukkan 56,95, Anda akan melihat:

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

Anda ingin mengubah string menjadi float sebelum mengalikannya dengan pajak penjualan. Saya akan meninggalkan itu untuk Anda pikirkan. Semoga berhasil!

Eric Palakovich Carr
sumber
1
Terima kasih banyak bro. Saya menghargai bantuannya! Saya tidak tahu tentang cara menyimpan nilai float saat menentukan. Saya mencoba melakukannya dengan cepat (tetapi saya mencoba untuk mengubah nilai dari string menjadi int - jadi saya akan salah karena saya membutuhkan nilai float).
SD.
1

Anda tidak dapat mengalikan string dan float. Alih-alih Anda mencoba seperti di bawah ini. Itu berfungsi dengan baik

totalAmount = salesAmount * float(salesTax)
Maheshnagakumar
sumber