본문 바로가기
파이썬

파이썬 TypeError : 목록 인덱스는 부동 소수점이 아닌 정수 여야합니다.

by º기록 2021. 2. 2.
반응형

오류를 생성하는 Python 3.x 프로그램이 있습니다.

def main():
    names = ['Ava Fischer', 'Bob White', 'Chris Rich', 'Danielle Porter',
             'Gordon Pike', 'Hannah Beauregard', 'Matt Hoyle',
             'Ross Harrison', 'Sasha Ricci', 'Xavier Adams']

    entered = input('Enter the name of whom you would you like to search for:')
    binary_search(names, entered)

    if position == -1:
        print("Sorry the name entered is not part of the list.")
    else:
        print(entered, " is part of the list and is number ", position, " on the list.")
    input('Press<enter>')

def binary_search(names, entered):
    first = 0
    last = len(names) - 1
    position = -1
    found = False

    while not found and first <= last:
        middle = (first + last) / 2

        if names[middle] == entered:
            found = True
            position = middle
        elif names[middle] > entered:
            last = middle - 1
        else:
            first = middle + 1

    return position

main()

오류 :

TypeError: list indices must be integers, not float

이 오류 메시지의 의미를 이해하는 데 문제가 있습니다.

 

해결 방법

 

Python 3.x를 사용중인 것 같습니다. Python 3.x의 중요한 차이점 중 하나는 나누기가 처리되는 방식입니다. x / y 를 수행하면 소수점이 잘 리기 때문에 (바닥 나누기) Python 2.x에서 정수가 반환됩니다. 그러나 3.x에서 / 연산자는 'true'나누기를 수행하여 정수 대신 float 가됩니다 (예 : 1/2 = 0.5 ). 이것이 의미하는 바는 현재 목록 (예 : my_list [0.5] 또는 my_list [1.0] )에서 위치를 참조하기 위해 부동 소수점을 사용하려고한다는 것입니다. Python이 정수를 예상하므로 작동하지 않습니다. 따라서 먼저 middle = (first + last) // 2 를 사용하여 결과가 예상 한 결과를 반환하도록 조정하는 것이 좋습니다. // 는 Python 3.x에서 층 분할을 나타냅니다.

 

참조 페이지 https://stackoverflow.com/questions/13355816

 

 

반응형

댓글