ValueError: 기본값이 10인 int()의 리터럴이 잘못되었습니다.
나는 풀 프로그램을 썼습니다.y = a^x
그래프에 투영합니다.문제는 언제나a < 1
오류가 발생했습니다.
ValueError: 기본값이 10인 int()의 리터럴이 잘못되었습니다.
좋은 의견이라도 있나?
추적 결과는 다음과 같습니다.
Traceback (most recent call last):
File "C:\Users\kasutaja\Desktop\EksponentfunktsioonTEST - koopia.py", line 13, in <module>
if int(a) < 0:
ValueError: invalid literal for int() with base 10: '0.3'
1보다 작지만 0보다 큰 숫자를 넣을 때마다 문제가 발생합니다.이 예제의 경우 0.3입니다.
내 코드는 다음과 같습니다.
# y = a^x
import time
import math
import sys
import os
import subprocess
import matplotlib.pyplot as plt
print ("y = a^x")
print ("")
a = input ("Enter 'a' ")
print ("")
if int(a) < 0:
print ("'a' is negative, no solution")
elif int(a) == 1:
print ("'a' is equal with 1, no solution")
else:
fig = plt.figure ()
x = [-2,-1.75,-1.5,-1.25,-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1,1.25,1.5,1.75,2]
y = [int(a)**(-2),int(a)**(-1.75),int(a)**(-1.5),int(a)**(-1.25),
int(a)**(-1),int(a)**(-0.75),int(a)**(-0.5),int(a)**(-0.25),
int(a)**(0),int(a)**(0.25),int(a)**(0.5),int(a)**(0.75),
int(a)**1,int(a)**(1.25),int(a)**(1.5),int(a)**(1.75), int(a)**(2)]
ax = fig.add_subplot(1,1,1)
ax.set_title('y = a**x')
ax.plot(x,y)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.spines['left'].set_smart_bounds(True)
ax.spines['bottom'].set_smart_bounds(True)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.savefig("graph.png")
subprocess.Popen('explorer "C:\\Users\\kasutaja\\desktop\\graph.png"')
def restart_program():
python = sys.executable
os.execl(python, python, * sys.argv)
if __name__ == "__main__":
answer = input("Restart program? ")
if answer.strip() in "YES yes Yes y Y".split():
restart_program()
else:
os.remove("C:\\Users\\kasutaja\\desktop\\graph.png")
답변:
당신의 추적을 통해 알 수 있듯이int()
정수를 사용합니다. 소수를 지정하려고 하므로 다음을 사용해야 합니다.float()
:
a = float(a)
이것은 예상대로 작동해야 합니다.
>>> int(input("Type a number: "))
Type a number: 0.3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0.3'
>>> float(input("Type a number: "))
Type a number: 0.3
0.3
컴퓨터는 다양한 방법으로 숫자를 저장합니다.Python은 크게 두 가지가 있습니다.정수(정수) - 정수(Ω) 및 실수(Ω)를 저장하는 부동 소수점 숫자입니다.당신은 당신이 필요로 하는 것에 따라 올바른 것을 사용해야 합니다.
(참고로, Python은 이것을 사용자로부터 추상화하는 데 꽤 능숙합니다. 예를 들어, 대부분의 다른 언어도 2배의 정밀 부동 소수점 번호를 가지고 있지만, 그것에 대해 걱정할 필요가 없습니다.3.0부터 파이썬은 정수를 나누면 자동으로 플로트로 변환하기 때문에 실제로 매우 쉽게 작업할 수 있습니다.
우리가 추적을 받기 전에 답에 대한 이전 추측:
당신의 문제는 당신이 입력하는 것은 무엇이든 숫자로 변환될 수 없다는 것입니다.이는 다음과 같은 여러 가지 원인으로 인해 발생할 수 있습니다.
>>> int(input("Type a number: "))
Type a number: -1
-1
>>> int(input("Type a number: "))
Type a number: - 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '- 1'
사이에 공백 추가-
그리고.1
문자열을 숫자로 올바르게 구문 분석하지 못하게 합니다.물론 이것은 예에 불과하며, 문제가 무엇인지 확실히 말할 수 있도록 귀하가 제공하는 정보를 알려주셔야 합니다.
코드 스타일에 대한 조언:
y = [int(a)**(-2),int(a)**(-1.75),int(a)**(-1.5),int(a)**(-1.25),
int(a)**(-1),int(a)**(-0.75),int(a)**(-0.5),int(a)**(-0.25),
int(a)**(0),int(a)**(0.25),int(a)**(0.5),int(a)**(0.75),
int(a)**1,int(a)**(1.25),int(a)**(1.5),int(a)**(1.75), int(a)**(2)]
이것은 정말 나쁜 코딩 습관의 예입니다.무언가를 반복적으로 복사하는 곳에 무언가가 잘못되어 있습니다.먼저, 당신은 사용합니다.int(a)
이 작업을 수행할 때마다 값을 변수에 할당하고 대신 값을 사용하여 값을 반복해서 입력하지 않도록 해야 합니다.
a = int(a)
이예에서나값다할당니합다시을는다니▁to▁the▁back에 할당합니다.a
이전 값을 새 값으로 덮어씁니다.
y = [a**i for i in x]
이 코드는 동일한 내용을 반복적으로 쓰는 대량의 작업 없이 위의 괴물과 동일한 결과를 생성합니다.그것은 간단한 목록 이해입니다.이것은 또한 당신이 편집할 경우x
당신은 아무것도 할 필요가 없습니다.y
자연스럽게 적합하게 업데이트될 것입니다.
또한 Python 스타일 가이드인 PEP-8은 함수 호출을 할 때 식별자와 대괄호 사이에 공백을 두지 않는 것이 좋습니다.
Lattyware가 말했듯이 Python2와 Python3 사이에는 다음과 같은 오류를 일으키는 차이점이 있습니다.
Python2를 사용하는 int(str(5/2))
2개를 드립니다.Python3에서도 마찬가지입니다. ValueError: int()에 대한 잘못된 리터럴(기본값: '2.5')입니다.
int 대신 float를 포함할 수 있는 문자열을 변환해야 하는 경우 항상 다음과 같은 추한 공식을 사용해야 합니다.
int(float(myStr))
~하듯이float('3.0')
그리고.float('3')
, 3.0을 주시오.int('3.0')
오류가 표시됩니다.
검증하는 것이 더 나을 수도 있습니다.a
입력할 때는 오른쪽입니다.
try:
a = int(input("Enter 'a' "))
except ValueError:
print('PLease input a valid integer')
이것은 캐스팅 중 하나입니다.a
나중에 사용하는 모든 정수이거나 예외를 처리하고 사용자에게 경고합니다.
int() 캐스팅은 소수점이 있는 문자열 번호를 처리할 수 없습니다.
예 --> int "13.5")는 오류를 제공하지만 int "13")은 문자열을 정수로 변환합니다.
Why : 데이터셋을 읽고 부동소수점 숫자가 있는지 모를 경우 0.5와 같은 정보가 손실되는 것을 방지하기 때문에 사용자가 요구하는 명시적 캐스팅으로 간주됩니다.
Work Around >
int(Float("13.5"))
제가 직면한 실제 예: int("mpg")가 직접 작동하지 않아서 float()을 사용한 후 int()를 사용한 int()와 같은 숫자를 원하는 경우.
sum([int(float(i["mpg"])) for i in file])//len(file)
언급URL : https://stackoverflow.com/questions/13861594/valueerror-invalid-literal-for-int-with-base-10
'programing' 카테고리의 다른 글
TargetType="{x:Button}"과 TargetType="Button"을 입력하시겠습니까? (0) | 2023.05.04 |
---|---|
리눅스: 백그라운드 태스크 제거 (0) | 2023.05.04 |
WPF 데이터 그리드에 목록을 바인딩하려면 어떻게 해야 합니까? (0) | 2023.05.04 |
사용자의 현재 위치/좌표 가져오기 (0) | 2023.05.04 |
Azure 테넌트와 Azure 서브스크립션의 차이점은 무엇입니까? (0) | 2023.05.04 |