Computer >> Máy Tính >  >> Lập trình >> Python

Python TypeError:không thể nhân chuỗi với số không phải int của kiểu ‘str’ Giải pháp

Bạn có thể nhân hai số với nhau bằng 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 của một chuỗi lặp lại một số lần cụ thể.

Nếu bạn cố gắng nhân một chuỗi với một chuỗi khác, bạn gặp phải lỗi “TypeError:không thể nhân chuỗi với số không phải int của loại‘ str ’”.

Trong hướng dẫn này, chúng tôi nói về lỗi này có nghĩa là gì và bạn có thể gặp nó ở đâu trong mã của mình. Chúng tôi xem qua một ví dụ về lỗi này để giúp bạn tìm ra cách giải quyết nó.

TypeError:không thể nhân chuỗi với số không phải int của kiểu ‘str’

Chuỗi là một loại chuỗi. Điều này là do chúng chứa các ký tự mà Python có thể lặp lại. Các loại trình tự khác bao gồm bộ giá trị, 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. Hãy xem xét đoạn mã sau:

print("Cakes! " * 2)

Mã này trả về:“Cakes! Bánh!". 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ố dấu phẩy động là những giá trị duy nhất có thể nhân với các giá trị của cùng một kiểu dữ liệu. Không có cách nào để Python diễn giải việc nhân hai chuỗi.

Một tình huống mẫu

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

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia chương trình đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Để bắt đầu, chúng ta cần xác định giá của một chiếc bánh nướng nhân mứt. Chúng tôi cũng yêu cầu người dùng cho chúng tôi biết họ đã bán bao nhiêu bánh nướng mứt trong ngày kinh doanh cuối cùng của mình 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 với nhau. Điều này sẽ cho chúng tôi biết số tiền kiếm được từ bánh nướng mứt vào một ngày nhất định:

earned_from_scones = jam_scone * sold

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

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

Phương thức format () cho phép chúng tôi thêm giá trị của “gain_from_scones” nơi dấu ngoặc nhọn ({}) xuất hiện trong chuỗi của chúng tôi.

Chúng ta cũng cần tính toán lợi nhuận thu được trên mỗi bánh nướng. Chúng tôi biết rằng chúng tôi tạo ra lợi nhuận 25 xu trên mỗi chiếc bánh nướng. Để tính toán bao nhiêu lợi nhuận được tạo ra, chúng tôi sử dụng mã này:

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

Mã này tính toán số tiền lãi được tạo ra từ mỗi bánh nướng và sau đó in giá trị đó vào bảng điều khiển. Hãy chạy mã của chúng tôi 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 <module>
	earned_from_scones = jam_scone * sold
TypeError: can't multiply sequence by non-int of type 'str'

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

Giải pháp

Hãy phân tích dòng mã từ lỗi của chúng tôi:

earned_from_scones = jam_scone * sold

Mặc dù dòng mã này trông ổn, nhưng có một vấn đề:chúng tôi đang cố nhân hai giá trị chuỗi với nhau. Chúng tôi lưu trữ “jam_scone” dưới dạng một chuỗi. input() phương thức trả về một chuỗi có 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 rằng cả “jam_scone” và “sell” đều là dấu phẩy động. Điều này cho phép chúng tôi thực hiện một phép toán trên các giá trị này.

Tiếp theo, chúng tôi thay đổi cách chúng tôi 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 tôi đã thay đổi “jam_scone” từ một chuỗi thành một phao. Chúng tôi cũng đã sử dụng phương thức float () để chuyển đổi giá trị của “đã bán” thành một số dấu phẩy động.

Chạy mã của chúng tôi và xem điều gì sẽ xảy ra:

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ã của chúng tôi hoạt động thành công. Đầu tiên, mã của chúng tôi yêu cầu người dùng chèn số lượng bánh nướng được bán vào bảng điều khiển. Tiếp theo, chương trình của chúng tôi sẽ tính toán số tiền mà cửa hàng kiếm được từ việc bán bánh nướng. Cuối cùng, chương trình của chúng tôi tính toán lợi nhuận thu được từ việc bán bánh nướng.

Kết luận

Lỗi “TypeError:không thể nhân chuỗi với giá trị không phải int của loại‘ str ’” xảy ra nếu bạn cố gắng nhân hai giá trị chuỗi với nhau. Bạn có thể khắc phục sự cố này bằng cách đảm bảo rằng bạn nhân hai giá trị số với nhau hoặc bạn chỉ nhân một chuỗi với một số nguyên.

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