Я хочу знать, почему функция swap () не вызывается при SortArray ()
На самом деле, он вызывается - который вы можете проверить самостоятельно, добавив пару print()
вызовов внутри или , используя пошаговый отладчик - но он не делает то, что, как вы думаете, должен делать, потому что вы путаешь локальные и глобальные переменные.
В SortArray()
вы определяете локальную переменную с именем x
(она определена как локальная, потому что вы назначаете ее в функции), и вы, очевидно, ожидаете использовать swap()
. Но в вашей функции swap
вы используете переменную x
, которая не является ни аргументом функции, ни присваивается внутри функции (обе из которых делают ее локальной), поэтому она разрешается как global x
заявлено выше.
IOW, swap
использует глобальный x
, почему вы ожидаете, что он будет использовать тот, который является локальным для SortArray()
. Именно поэтому вторая версия работает, так как в этот раз она использует правильную переменную.
Решение состоит в том, чтобы удалить глобальный x
и явно передать правильное значение в swap()
, то есть:
def swap(x):
temp = score[x + 1]
score[x + 1] = score[x]
score[x] = temp
def SortArray():
y = 0
while y < COMPS:
x = 0
while x < COMPS:
if score[x] > score[x + 1]:
swap(x)
x += 1
y += 1
И пока вы это делаете, вы должны делать то же самое с score
- на самом деле, вы должны избегать глобальных переменных настолько, насколько это возможно (и поверьте мне, вы можете написать lot кода без использования глобалов):
def swap(score, x):
temp = score[x + 1]
score[x + 1] = score[x]
score[x] = temp
def SortArray(score):
comps = len(score) - 1
y = 0
while y < comps:
x = 0
while x < comps:
if score[x] > score[x + 1]:
swap(score, x)
x += 1
y += 1
def displayArray(score):
x = 0
while x < len(score):
print(score[x])
x += 1
if __name__ == "__main__":
score = [92,95,7,5,85,55,789,47,125,3265,88,965,655,3,15,448,0,255,455]
SortArray(score)
displayArray(score)
И теперь ваши функции можно использовать с любым списком или последовательностью. Они все еще совершенно не пифоничны, но это, очевидно, не в этом дело (в Python в любом случае встроен один из самых оптимизированных алгоритмов сортировки).