Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python TypeError:ไม่สามารถคูณลำดับด้วย non-int ของประเภท 'str' Solution

คุณสามารถคูณตัวเลขสองตัวเข้าด้วยกันใน Python คุณยังสามารถคูณตัวเลขด้วยสตริงได้ ส่งคืนลำดับของสตริงที่ทำซ้ำตามจำนวนที่ระบุ

หากคุณพยายามคูณสตริงด้วยสตริงอื่น คุณพบข้อผิดพลาด "TypeError:can't multiply sequence by non-int of type 'str'"

ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้ และตำแหน่งที่คุณอาจพบข้อผิดพลาดนี้ในโค้ดของคุณ เราอธิบายตัวอย่างข้อผิดพลาดนี้เพื่อช่วยให้คุณทราบวิธีแก้ปัญหา

TypeError:ไม่สามารถคูณลำดับด้วย non-int ของประเภท 'str'

สตริงเป็นประเภทของลำดับ เนื่องจากพวกมันมีอักขระที่ Python สามารถวนซ้ำได้ ลำดับประเภทอื่นๆ ได้แก่ ทูเพิล พจนานุกรม และรายการ

คุณใช้ตัวดำเนินการการคูณ (*) เพื่อสร้างสตริงที่ทำซ้ำเนื้อหาของสตริง พิจารณารหัสต่อไปนี้:

print("Cakes! " * 2)

รหัสนี้ส่งคืน:“เค้ก! เค้ก!". ตัวดำเนินการคูณทำให้สตริงของเราทำซ้ำสองครั้ง

คุณไม่สามารถใช้ตัวดำเนินการการคูณเพื่อคูณสตริงด้วยสตริงได้ จำนวนเต็มและเลขทศนิยมเป็นค่าเดียวที่สามารถคูณด้วยค่าของประเภทข้อมูลเดียวกันได้ ไม่มีทางที่ Python จะตีความการคูณสองสตริงได้

ตัวอย่างสถานการณ์

มาสร้างโปรแกรมที่คำนวณจำนวนเงินที่ร้านอาหารทำกับแยมสโคนของพวกเขาในบ่ายวันพฤหัสบดีกันเถอะ

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

ในการเริ่มต้น เราต้องกำหนดราคาของแยมสโคน นอกจากนี้เรายังขอให้ผู้ใช้บอกเราว่าขายแยมสโคนได้กี่ชิ้นในวันสุดท้ายของการทำธุรกิจโดยใช้คำสั่ง input():

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

ต่อไป เราคูณค่าทั้งสองนี้เข้าด้วยกัน สิ่งนี้จะบอกเราว่าได้รับเงินเท่าไรจากแยมสโคนในวันที่กำหนด:

earned_from_scones = jam_scone * sold

ตอนนี้เรารู้แล้วว่าได้เงินจากสโคนมากแค่ไหน เราจึงเขียน print() คำสั่งที่แจ้งให้ผู้ใช้ทราบผลการคำนวณของเรา:

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

วิธี format() ช่วยให้เราเพิ่มค่าของ "earned_from_scones" โดยที่วงเล็บปีกกาของเรา ({}) ปรากฏในสตริงของเรา

เราต้องคำนวณด้วยว่าแต่ละสโคนจะทำกำไรได้เท่าไร เรารู้ว่าเราทำกำไร 25 เซ็นต์ในแต่ละสโคน ในการคำนวณหากำไร เราใช้รหัสนี้:

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

รหัสนี้คำนวณกำไรที่ได้จากแต่ละสโคน แล้วพิมพ์ค่านั้นไปยังคอนโซล เรียกใช้รหัสของเราและดูว่าใช้งานได้หรือไม่:

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'

รหัสของเราส่งคืนข้อผิดพลาด

การแก้ปัญหา

มาวิเคราะห์บรรทัดของรหัสจากข้อผิดพลาดของเรา:

	earned_from_scones = jam_scone * sold

แม้ว่าโค้ดบรรทัดนี้จะดูดี แต่มีปัญหาคือ เรากำลังพยายามคูณค่าสตริงสองค่าเข้าด้วยกัน เราเก็บ “jam_scone” เป็นสตริง input() วิธีส่งคืนสตริงซึ่งหมายความว่า sold() มีค่าสตริง

ในการแก้ปัญหานี้ เราต้องตรวจสอบให้แน่ใจว่าทั้ง "jam_scone" และ "sold" เป็นจุดลอยตัว ซึ่งช่วยให้เราสามารถดำเนินการทางคณิตศาสตร์กับค่าเหล่านี้ได้

ต่อไป เราเปลี่ยนวิธีการประกาศค่าของตัวแปรเหล่านี้:

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

ค่าของ “jam_scone” จะไม่อยู่ในเครื่องหมายคำพูดอีกต่อไป นี่แสดงว่าเราได้เปลี่ยน “jam_scone” จากสตริงเป็นทุ่น เรายังใช้วิธี float() เพื่อแปลงค่าของ "ขาย" เป็นตัวเลขทศนิยม

เรียกใช้โค้ดของเราและดูว่าเกิดอะไรขึ้น:

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.

รหัสของเราทำงานสำเร็จ ขั้นแรก โค้ดของเราจะขอให้ผู้ใช้ใส่จำนวนสโคนที่ขายในคอนโซล ต่อไป โปรแกรมของเราจะคำนวณจำนวนเงินที่ร้านค้าได้รับจากการขายสโคน สุดท้าย โปรแกรมของเราจะคำนวณกำไรที่เกิดจากการขายสโคน

บทสรุป

ข้อผิดพลาด “TypeError:can't multiply sequence by non-int of type 'str'” เกิดขึ้นหากคุณพยายามคูณค่าสตริงสองค่าเข้าด้วยกัน คุณสามารถแก้ไขปัญหานี้ได้โดยตรวจสอบให้แน่ใจว่าคุณคูณค่าตัวเลขสองค่าเข้าด้วยกัน หรือคูณเฉพาะสตริงด้วยจำนวนเต็มเท่านั้น

ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาดนี้แล้วเหมือน Pythonista!