왜 TypeError : 'float'유형의 정수가 아닌 시퀀스를 곱할 수 없습니까?


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문자열 (문자열)을 반환합니다. 파이썬에서 문자열과 부동 소수점을 곱하면 정의 된 의미가 없습니다 (문자열과 정수를 곱하면 의미가 있습니다 : "AB" * 3is "ABABAB"; 얼마 "L" * 3.14입니까? 회신하지 마십시오"LLL|" ). 문자열을 숫자 값으로 구문 분석해야합니다.

시도해 볼 수 있습니다.

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

여기에 게시하고 Google을 사용하기 전에 구문 오류를 읽는 법을 배웠습니다. salesAmount의 raw_input을 float가 아닌 int로 변환하려고했습니다. int가 작동하지 않고 float가 작동하는 이유를 알고 있습니까? 나랑 맨손으로, 롤.
SD.

3
* 연산자를 사용하여 문자열에 정수를 곱하는 것은 Python에서 잘 정의되어 있습니다. 문자열에 부동 소수점을 곱하는 것은 정의되지 않았으며 파이썬이 불평 한 것입니다.
Greg Hewgill

감사합니다 Greg! 좀 더 기본적인 규칙을 내려야 할 것 같아요.
SD.

1
@Raj : 나는 그것이 잘 정의되었다고 말했지만 반드시 당신이 기대하는 것은 아닙니다. "abc"* 3은 "abcabcabc"이므로 "5"* 3은 "555"입니다.
Greg Hewgill

54

아마도 이것은 미래에 다른 사람들에게 도움이 될 것입니다-여러 개의 float와 float 목록을 시도하는 동안 동일한 오류가 발생했습니다. 문제는 여기에있는 모든 사람들이 float에 문자열을 곱하는 것에 대해 이야기했기 때문에 (하지만 여기서 내 모든 요소는 모두 부동 소수점이었습니다) 문제는 실제로 목록에서 * 연산자를 사용하는 것입니다.

예를 들면 :

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éo Léopold Hertz 준영

1
당신이 수입 NumPy와하지 않으려면, 당신은 할 수 있습니다 :coff = [i * c for i in coff]
nicolas.fg

3

문제는 salesAmount가 문자열로 설정된다는 것입니다. 파이썬 인터프리터에 변수를 입력하고 엔터를 치면 따옴표로 묶인 값이 입력 된 것을 볼 수 있습니다. 예를 들어 56.95를 입력하면 다음과 같이 표시됩니다.

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

판매 세를 곱하기 전에 문자열을 부동 소수점으로 변환 할 수 있습니다. 나는 당신이 알아낼 수 있도록 남겨 둘 것입니다. 행운을 빕니다!


1
정말 감사합니다. 도움을 주셔서 감사합니다! 정의 할 때 float 값을 저장할 수 있는지 몰랐습니다. 나는 그것을 즉석에서하려고했다 (하지만 값을 문자열에서 int로 변경하려고 시도하고 있었기 때문에 부동 값이 필요했기 때문에 잘못되었습니다).
SD.

1

아래와 같이 시도하는 대신 string과 float를 곱할 수 없습니다.

totalAmount = salesAmount * float(salesTax)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.