Вывод для «кода 1» отличается от ожидаемого, поскольку операнды в сравнении имеют значение str
, для которого определенный порядок отличается от порядка соответствующего int
.
Другими словами, если a
и b
являются двумя int
с такими, что a > b
, то мы можем быть уверены, что str(a) > str(b)
только если длина двух строк одинакова, в противном случае это может произойти либоstr(a) > str(b)
или str(a) < str(b)
в зависимости от фактического значения a
и b
.
Порядок строки, состоящей из чисел, является «алфавитным» для символов, появляющихся первыми, следовательно, в то время как "1" < "2" < "3"
,и т. д., когда две строки имеют несколько символов, открыта любая опция, например:
- для
"2"
и "10"
, "2" > "10"
(противоположно 2 < 10
), поскольку "2" > "1"
иприсутствие "0"
после "1"
не имеет значения - для
"2"
и "20"
, "2" < "20"
(аналогично 2 < 20
), поскольку "2" == "2"
и присутствие "0"
после"2"
в "20"
делает "20"
«больше».
Обратите внимание, чтоУпорядочивание / сравнение по кольцу действительно работает для любой строки, даже если она не содержит чисел.