Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Giải pháp lỗi Python TypeError: can't multiply sequence by non-int of type 'str'

Bạn có thể nhân hai số với nhau trong Python. Bạn cũng có thể nhân một số với một chuỗi. Điều này trả về một chuỗi lặp lại nội dung của chuỗi đó một số lần cụ thể.

Nếu bạn thử nhân một chuỗi với một chuỗi khác, bạn sẽ gặp lỗi TypeError: can't multiply sequence by non-int of type 'str'.

Trong hướng dẫn này, chúng ta nói về ý nghĩa của lỗi này và nơi bạn có thể gặp nó trong mã. Chúng ta đi qua một ví dụ của lỗi này để giúp bạn tìm ra cách khắc phục.

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

Chuỗi là một kiểu chuỗi (sequence). Điều này là do chúng chứa các ký tự mà Python có thể lặp qua. Các kiểu chuỗi khác bao gồm tuple, từ điển và danh sách.

Bạn sử dụng toán tử nhân (*) để tạo một chuỗi lặp lại nội dung của một chuỗi. Xét mã sau:

print("Cakes! " * 2)

Mã này trả về: "Cakes! Cakes!". Toán tử nhân làm cho chuỗi của chúng ta lặp lại hai lần.

Bạn không thể sử dụng toán tử nhân để nhân một chuỗi với một chuỗi. Số nguyên và số thực là các giá trị duy nhất có thể nhân với các giá trị cùng kiểu dữ liệu. Không có cách nào để Python diễn giải việc nhân hai chuỗi.

Ví dụ minh họa

Hãy xây dựng một chương trình tính toán số tiền một nhà hàng kiếm được từ bánh scone mứt vào chiều thứ Năm.

Đầu tiên, chúng ta cần định nghĩa giá của một chiếc bánh scone mứt. Chúng ta cũng yêu cầu người dùng cho biết họ bán được bao nhiêu chiếc bánh scone mứt trong ngày làm việc cuối cùng bằng câu lệnh input():

jam_scone = "1.95"
sold = input("How many jam scones did you sell yesterday? ")

Tiếp theo, chúng ta nhân hai giá trị này lại với nhau. Điều này sẽ cho chúng ta biết số tiền kiếm được từ bánh scone mứt trong một ngày cho trước:

earned_from_scones = jam_scone * sold

Bây giờ chúng ta biết số tiền kiếm được từ bánh scone, chúng ta viết câu lệnh print() thông báo cho người dùng kết quả tính toán:

print("You earned ${} from selling scones.".format(earned_from_scones))

Phương thức format() cho phép chúng ta thêm giá trị của "earned_from_scones" vào vị trí các ngoặc nhọn ({}) xuất hiện trong chuỗi.

Chúng ta cũng cần tính lợi nhuận trên mỗi chiếc bánh scone. Chúng ta biết rằng chúng ta kiếm được 25 cent lợi nhuận trên mỗi chiếc. Để tính tổng lợi nhuận, chúng ta dùng mã:

profit = sold * 0.25
print("You made a ${} profit from selling scones.".format(profit))

Mã này tính toán lợi nhuận từ mỗi chiếc bánh scone và in giá trị đó ra console. Chạy mã và xem nó có hoạt động không:

How many jam scones did you sell yesterday? 17
Traceback (most recent call last):
  File "main.py", line 4, in 
    earned_from_scones = jam_scone * sold
TypeError: can't multiply sequence by non-int of type 'str'

Mã của chúng ta trả về lỗi.

Giải pháp

Hãy phân tích dòng mã từ lỗi:

earned_from_scones = jam_scone * sold

Mặc dù dòng mã này trông ổn, nhưng có vấn đề: chúng ta đang cố gắng nhân hai giá trị chuỗi với nhau. Chúng ta lưu "jam_scone" như một chuỗi. Phương thức input() trả về chuỗi, nghĩa là sold có giá trị chuỗi.

Để giải quyết vấn đề này, chúng ta cần đảm bảo cả "jam_scone" và "sold" là số thực (float). Điều này cho phép chúng ta thực hiện phép toán học trên các giá trị này.

Tiếp theo, thay đổi cách khai báo giá trị của các biến này:

jam_scone = 1.95
sold = float(input("How many jam scones did you sell yesterday? "))

Giá trị của "jam_scone" không còn trong dấu ngoặc kép. Điều này cho thấy chúng ta đã đổi "jam_scone" từ chuỗi sang float. Chúng ta cũng dùng phương thức float() để chuyển giá trị "sold" thành số thực.

Chạy mã và xem kết quả:

How many jam scones did you sell yesterday? 17
You earned $33.15 from selling scones.
You made a $4.25 profit from selling scones.

Mã hoạt động thành công. Đầu tiên, mã yêu cầu người dùng nhập số lượng bánh scone bán được vào console. Tiếp theo, chương trình tính tiền kiếm được từ bán bánh scone. Cuối cùng, chương trình tính lợi nhuận từ bán bánh scone.

Kết luận

Lỗi TypeError: can't multiply sequence by non-int of type 'str' xảy ra nếu bạn thử nhân hai giá trị chuỗi với nhau. Bạn có thể khắc phục bằng cách đảm bảo bạn nhân hai giá trị số với nhau hoặc chỉ nhân chuỗi với số nguyên.

Bây giờ bạn đã sẵn sàng giải quyết lỗi này như một Pythonista!