Python 3 (3.8) воспринимает 10 как 1, при этом в этом же коде 10 воспринимается как 10

ArturP

Новичок
Пользователь
Апр 12, 2020
15
1
3
Код:
d = int(input()) # использовал 10
c = str(input()) # использовал 1 2 3 4 5 6 7 8 9 10 должно было быть 0

def sort(a, b):
    trade = 0
    bs = b.split()
    t = True
    while t:
        t = False
        #for i in range (a-1):
        for j in range (a-1):
            if bs[j] > bs[j+1]:
                bs[j], bs[j+1] = bs[j+1], bs[j]
                t = True
                trade += 1
                print(bs)
        a -= 1
    print (trade)

sort(d, c)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
В таком случае должно выводиться 0 без промежуточных результатов сортировки
Так происходит потому что вы сравниваете не числа а строки, содержащие числа. А строка '10' меньше строки '9'. Чтобы ваш код работал нужно сравнивать числа. Вот исправленный код:
Python:
d = int(input())  # использовал 10
c = input()  # использовал 1 2 3 4 5 6 7 8 9 10 должно было быть 0

def sort(a, b):
    trade = 0
    bs = [int(i) for i in b.split()]
    t = True
    while t:
        t = False
        for j in range(a - 1):
            if bs[j] > bs[j + 1]:
                bs[j], bs[j + 1] = bs[j + 1], bs[j]
                t = True
                trade += 1
                print(bs)
        a -= 1
    print(trade)

sort(d, c)
 
  • Мне нравится
Реакции: ArturP

lightmanLP

Новичок
Пользователь
Май 23, 2020
18
1
3
1590237523243.png
Это задуманное поведение?
 

ArturP

Новичок
Пользователь
Апр 12, 2020
15
1
3
 

ArturP

Новичок
Пользователь
Апр 12, 2020
15
1
3
В таком случае должно выводиться 0 без промежуточных результатов сортировки
 

ArturP

Новичок
Пользователь
Апр 12, 2020
15
1
3
Так происходит потому что вы сравниваете не числа а строки, содержащие числа. А строка '10' меньше строки '9'. Чтобы ваш код работал нужно сравнивать числа. Вот исправленный код:
Python:
d = int(input())  # использовал 10
c = input()  # использовал 1 2 3 4 5 6 7 8 9 10 должно было быть 0

def sort(a, b):
    trade = 0
    bs = [int(i) for i in b.split()]
    t = True
    while t:
        t = False
        for j in range(a - 1):
            if bs[j] > bs[j + 1]:
                bs[j], bs[j + 1] = bs[j + 1], bs[j]
                t = True
                trade += 1
                print(bs)
        a -= 1
    print(trade)

sort(d, c)
Спасибо!
 

Форум IT Специалистов