Tại sao tôi nhận được TypeError: không thể nhân chuỗi với không phải int của kiểu 'float'?


96

Tôi đang nhập để lấy số tiền bán hàng (theo đầu vào) nhân với thuế bán hàng xác định (0,08) và sau đó in ra tổng số tiền (thuế bán hàng nhân với số tiền bán hàng).

Tôi gặp phải lỗi này. Bất cứ ai biết những gì có thể là sai hoặc có bất kỳ đề xuất?

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'

Câu trả lời:


84

raw_inputtrả về một chuỗi (một chuỗi ký tự). Trong Python, nhân một chuỗi và một số thực không có nghĩa xác định (trong khi nhân một chuỗi và một số nguyên có nghĩa: "AB" * 3"ABABAB"; là bao nhiêu "L" * 3.14? Vui lòng không trả lời "LLL|"). Bạn cần phân tích cú pháp chuỗi thành một giá trị số.

Bạn có thể muốn thử:

salesAmount = float(raw_input("Insert sale amount here\n"))

Tôi đã học cách đọc lỗi cú pháp trước khi đăng ở đây và sử dụng Google. Tôi đang cố gắng chuyển đổi raw_input cho salesAmount thành int thay vì float. Bạn có biết tại sao int sẽ không hoạt động, mà thay vào đó là float? Trần với tôi, lol.
SD.

2
Nhân (sử dụng toán tử *) một chuỗi với một số nguyên được xác định rõ ràng trong Python. Nhân một chuỗi với một số float không được định nghĩa và đó là điều Python phàn nàn.
Greg Hewgill

Cảm ơn Greg! Tôi đoán tôi cần phải rút ra một số quy tắc cơ bản hơn.
SD.

1
@Raj: Tôi đã nói rằng nó đã được xác định rõ ràng, nhưng nó không nhất thiết phải như những gì bạn mong đợi. "abc" * 3 là "abcabcabc", và do đó "5" * 3 là "555".
Greg Hewgill

52

Có thể điều này sẽ giúp ích cho những người khác trong tương lai - Tôi đã gặp lỗi tương tự khi cố gắng tạo nhiều float và một danh sách các float. Vấn đề là mọi người ở đây đã nói về việc nhân một số float với một chuỗi (nhưng ở đây tất cả phần tử của tôi đều là float) nên vấn đề thực sự là sử dụng toán tử * trên một danh sách.

Ví dụ:

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

Lỗi:

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

Giải pháp - chuyển danh sách thành mảng numpy:

coff = np.asarray(coff) * C

Tôi thích cách tiếp cận này!
Léo Léopold Hertz 준영

1
nếu bạn không muốn nhập numpy, bạn có thể thực hiện:coff = [i * c for i in coff]
nicolas.fg

3

Vấn đề là salesAmount đang được đặt thành một chuỗi. Nếu bạn nhập biến trong trình thông dịch python và nhấn enter, bạn sẽ thấy giá trị được nhập bao quanh bởi dấu ngoặc kép. Ví dụ: nếu bạn nhập 56,95, bạn sẽ thấy:

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

Bạn sẽ muốn chuyển đổi chuỗi thành số float trước khi nhân nó với thuế bán hàng. Tôi để đó cho bạn tìm hiểu. Chúc may mắn!


1
Cảm ơn người anh em nhiều. Tôi đánh giá cao sự giúp đỡ! Tôi không biết về việc có thể lưu trữ giá trị float khi xác định. Tôi đã cố gắng thực hiện nó một cách nhanh chóng (nhưng tôi đang cố gắng thay đổi giá trị từ một chuỗi thành một int - vì vậy tôi đã sai vì tôi cần một giá trị float).
SD.

1

Bạn không thể nhân chuỗi và float. Hãy thử như bên dưới. Nó hoạt động tốt

totalAmount = salesAmount * float(salesTax)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.