반응형
오류를 생성하는 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 Compare strings based on alphabetical ordering (0) | 2021.02.02 |
---|---|
파이썬 Homebrew에서 Python을 심볼릭 링크하는 방법은 무엇입니까? (0) | 2021.02.02 |
파이썬 matplotlib에 선 스타일 목록이 있습니까? (0) | 2021.02.02 |
파이썬 Is there a Python module for converting RTF to plain text? (0) | 2021.02.02 |
파이썬 matplotlib 그림에 선이 나타나는 레이블 만들기 (0) | 2021.02.02 |
댓글