2009-07-30 2 views
1
>>> 
Enter muzzle velocity (m/2): 60 
Enter angle (degrees): 45 
Traceback (most recent call last): 
    File "F:/Python31/Lib/idlelib/test", line 9, in <module> 
    range() 
    File "F:/Python31/Lib/idlelib/test", line 7, in range 
    Distance = float(decimal((2*(x*x))((decimal(math.zsin(y)))*(decimal(math.acos(y)))))/2) 
TypeError: can't multiply sequence by non-int of type 'str' 

저는 매우 새롭습니다. 너무 심각하지는 않지만이 오류가 발생하는 이유는 무엇입니까?TypeError : 'str'유형이 아닌 정수로 시퀀스를 곱할 수 없습니다.

답변

4

당신은 정수로 콘솔에서 얻는 데이터를 변환해야합니다 :

x = int(x) 
y = int(y) 
Distance = float(decimal((2*(x*x))((decimal(math.zsin(y)))*(decimal(math.acos(y)))))/2) 
5
>>> '60' * '60' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can't multiply sequence by non-int of type 'str' 

두 개의 문자열을 함께 곱하려고합니다. 사용자 입력 문자열을 int() 또는 float()을 사용하는 숫자로 변환해야합니다.

또한 무엇을하고 있는지 잘 모르겠습니다. decimal; 당신이 모듈을 호출하려는 것 (유형에서 모듈, decimal.Decimal입니다)하지만 많은 포인트가 float로 다시 변환 한 후 일부 부동 소수점 연산과 을하고 후 진수 로 변환하는이 아니다 보인다 .

나중에 문제를 일으키는 코드를 게시하고 상호 작용 및 추적을 유지하십시오. 하지만 가능한 한 코드를 축소하고 계속 축소하면서 오류가 계속 발생하는지 확인하십시오. 이것은 디버깅의 중요한 단계입니다.

0

당신은 raw_input을 사용하는()를 입력을 얻기 위해. 대신 input()을 사용하십시오. Int를 반환합니다. 숫자 만 입력했는지 확인하십시오. 그렇지 않으면 input()은 오류를 발생시킵니다 (문자열의 경우). 또한 변수 이름을 올바르게 지정하면 좋을 것입니다. x와 y는 많이 전달하지 않습니다. (속도와 각도가 훨씬 더 좋을 것입니다.)

+5

input() 대신 raw_input()을 사용하고 float (또는 "try :"로 변환하거나 오류를 발생 시키십시오)로 변환하는 것이 좋습니다. 현재 입력()은 나중에 파이썬 버전에서 제거 될 예정입니다. 레코드의 경우 – user141446

+0

, raw_input이 input()으로 대체되었습니다. – zero01alpha

관련 문제