programing

ValueError: 기본값이 10인 int()의 리터럴이 잘못되었습니다.

megabox 2023. 5. 4. 19:47
반응형

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

반응형