เหตุใดฉันจึงได้รับ TypeError: ไม่สามารถคูณลำดับด้วยประเภท 'float' ที่ไม่ใช่ int


99

ฉันกำลังพิมพ์เพื่อรับยอดขาย (โดยการป้อนข้อมูล) เพื่อคูณด้วยภาษีขายที่กำหนด (0.08) จากนั้นให้พิมพ์จำนวนเงินทั้งหมด (จำนวนภาษีขายเท่าจำนวนเงินที่ขาย)

ฉันพบข้อผิดพลาดนี้ ใครทราบว่ามีอะไรผิดพลาดหรือมีข้อเสนอแนะ

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'

คำตอบ:


86

raw_inputส่งคืนสตริง (ลำดับของอักขระ) ใน Python การคูณสตริงและ float ไม่มีความหมายที่กำหนดไว้ (ในขณะที่การคูณสตริงและจำนวนเต็มมีความหมาย: "AB" * 3is คือ"ABABAB"เท่าใด"L" * 3.14โปรดอย่าตอบกลับ"LLL|") คุณต้องแยกวิเคราะห์สตริงเป็นค่าตัวเลข

คุณอาจต้องการลอง:

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

ฉันเรียนรู้ที่จะอ่านข้อผิดพลาดทางไวยากรณ์ก่อนที่จะโพสต์ที่นี่และใช้ Google ฉันพยายามแปลง raw_input สำหรับ salesAmount เป็น int แทนที่จะเป็น float คุณรู้หรือไม่ว่าทำไม int ถึงไม่ทำงาน แต่จะลอยมากกว่า? เปลือยกับฉันฮ่า ๆ .
SD.

3
การคูณ (โดยใช้ตัวดำเนินการ *) สตริงด้วยจำนวนเต็มถูกกำหนดไว้อย่างดีใน Python การคูณสตริงด้วย float ไม่ได้กำหนดไว้และเป็นสิ่งที่ Python บ่น
Greg Hewgill

ขอบคุณ Greg! ฉันเดาว่าฉันต้องเข้าใจกฎพื้นฐานมากกว่านี้
SD.

1
@Raj: ฉันบอกว่ามันชัดเจนดี แต่มันไม่จำเป็นต้องเป็นอย่างที่คุณคาดหวัง "abc" * 3 คือ "abcabcabc" ดังนั้น "5" * 3 จึงเป็น "555"
Greg Hewgill

54

บางทีนี่อาจจะช่วยคนอื่นได้ในอนาคต - ฉันมีข้อผิดพลาดเดียวกันในขณะที่พยายามลอยหลาย ๆ รายการและรายการลอย ประเด็นก็คือทุกคนที่นี่พูดถึงการคูณโฟลตด้วยสตริง (แต่ที่นี่องค์ประกอบทั้งหมดของฉันลอยตลอด) ดังนั้นปัญหาคือการใช้ตัวดำเนินการ * ในรายการ

ตัวอย่างเช่น:

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

ความผิดพลาด:

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

วิธีแก้ปัญหา - แปลงรายการเป็นอาร์เรย์ numpy:

coff = np.asarray(coff) * C

ฉันชอบแนวทางนี้!
LéoLéopold Hertz 준영

1
หากคุณไม่ต้องการนำเข้า numpy คุณสามารถทำได้:coff = [i * c for i in coff]
nicolas.fg

3

ปัญหาคือว่า salesAmount ถูกตั้งค่าเป็นสตริง หากคุณป้อนตัวแปรในตัวแปล python และกด Enter คุณจะเห็นค่าที่ป้อนล้อมรอบด้วยเครื่องหมายคำพูด ตัวอย่างเช่นหากคุณป้อน 56.95 คุณจะเห็น:

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

คุณจะต้องแปลงสตริงให้เป็นทศนิยมก่อนที่จะคูณด้วยภาษีขาย ฉันจะปล่อยให้คุณคิดออก โชคดี!


1
ขอบคุณมากครับ ขอขอบคุณสำหรับความช่วยเหลือ! ฉันไม่รู้เกี่ยวกับความสามารถในการจัดเก็บค่าลอยตัวเมื่อกำหนด ฉันพยายามทำมันทันที (แต่ฉันพยายามเปลี่ยนค่าจากสตริงเป็น int - ดังนั้นฉันจะคิดผิดเพราะฉันต้องการค่าลอย)
SD.

1

คุณไม่สามารถคูณสตริงและลอยได้แทนที่จะลองทำตามด้านล่างมันใช้งานได้ดี

totalAmount = salesAmount * float(salesTax)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.