-4

Почему в питоне нельзя приравнять(по смыслу): '0' == 48?
Ведь по кодировке ASCII это одно и тоже.
Просто в C же можно, а почему тут не действует?

jfs
  • 52,361
Romer
  • 11
  • Может дело в том, что в Питоне строки допустимы и в одиночных кавычках? – Владимир Мартьянов Nov 27 '17 at 15:46
  • https://ideone.com/CI257m ---- а вот мой код – Romer Nov 27 '17 at 15:50
  • Очень хорошо. Но код надо писать в вопросе. И даже если вы это сделаете, строки в питоне все равно можно будет писать в одиночных кавычках. – Владимир Мартьянов Nov 27 '17 at 15:50
  • 3
    наверное потому что это не "с"? Бросайте вы изучать Python - он вам не нужен. ;-) Язык "c" лучше ведь, правда? – Vasyl Kolomiets Nov 27 '17 at 15:50
  • @Vasyl Kolomiets, спасибо, но ведь питон проще, чем все так и выигрывает си?????!!!(я сам за си, но просто аргументы хочу от других людей услышать)))) – Romer Nov 27 '17 at 15:53
  • кстати, да все так и можно приравнять по смыслу!!! chr(48) выдает в консоли '0' , но у меня в проге что-то не работает((((( – Romer Nov 27 '17 at 15:55
  • 1
    мне нужно считать из файла матрицу символов в матрицу, которая в проге и уже закинуть туда не символы, а числа!!!!! – Romer Nov 27 '17 at 15:56
  • @Romer, напишите вашу программу. ) конвертация символов в целое делается так: i =int(ch) – Vasyl Kolomiets Nov 27 '17 at 16:04
  • кстати Python не проще. Он умнее. ) – Vasyl Kolomiets Nov 27 '17 at 16:06
  • @Vasyl Kolomiets, спасибо, но тогда почему Вы сказали бросать питон, т.к. си лучше?????мой код пока что не работает, походу не только в типе дело!! – Romer Nov 27 '17 at 16:13
  • 1
    Строки и числа — вещи разные, и смешивать их — глупость. К вашим услугам функции ord, переводящая символ в Unicode/ASCII число, и chr, переводящая Unicode/ASCII число в символ – andreymal Nov 27 '17 at 16:54
  • в питоне 3 есть классная штука bytearray, а в питоне2 (также и в 3) есть модуль struct для таких дел – eri Nov 27 '17 at 19:42
  • bytearray - это как строка, но когда берешь один элемент - он получается int – eri Nov 27 '17 at 19:43
  • @Romer: чтение матрицы символов из файла -- это совсем другой вопрос. "мой код пока не работает" -- создайте минимальный пример кода [mcve], приведите ввод, желаемый вывод и что у вас фактически получается. Опубликуйте как отдельный вопрос. В сторону: про Си и Питон, я думаю Vasyl Kolomiets пошутил (должно быть очевидно, что разные языки могут и ведут себя по-разному. Если вы привыкли к одному в одном языке, это не значит, что другие языки обязаны также себя вести -- лучше/хуже другое поведение -- это уже от конкретной задачи зависит). – jfs Nov 30 '17 at 09:41

2 Answers2

1

В Си '0' имеет тип int. В Питоне '0' имеет тип str. Строки не равны числам в Питоне. Питон — сильно-типизированный язык. str не превращается неявно в int.

Для сравнения приведите к одному типу:

>>> ord('0') == 48
True
>>> '0' == chr(48)
True

ord() возвращает порядковый номер Unicode символа (Unicode code point) как целое число.
chr() в обратную сторону работает: возвращает Unicode символ по его номеру.

Номера Unicode символов в ASCII диапазоне совпадают со значениями байтов, полученных кодированием этих символов, используя ASCII кодировку.

Байты (тип bytes) в Питоне (3) это коллекция чисел в диапазоне 0 <= b < 256. Байты в ASCII диапазоне, можно с помощью соответствующих символов в исходном коде задавать:

>>> b'0'[0] == 48
True

В Питоне, гарантировано 48 здесь получите (вне зависимости от кодировки исходного кода). В сторону: в общем случае Си не обязан ASCII кодировку использовать, поэтому '0' не обязан быть равным 48.

jfs
  • 52,361
0

Тут не действует, потому что:
1) в Python обычные строки не ASCII, а UNICODE
2) главное это разные типы для сравнения которых надо делать явное приведение.

Дополнительная новость - в Python нет матриц и массивов в понимании Фортрана или С. Однако есть специальные модули, в которых похожие массивы реализованы.

  • 1- str тип представлял последовательности байт в Питоне 2 (не обязан ascii кодировку использовать). str представляет последовательности Unicode символов в Питоне 3 (их внутреннее представление может быть разным -- деталь реализации). Другими словами ASCII и Unicode к совершенно разным категориям в Питоне относятся (всё равно что килограммы с метрами сравнивать). 2- в общем случае, объекты разных типов могут быть равны в Питоне. К примеру: 1 == 1.0 (сравнение происходит без приведения типа, подробнее: Ляп в Питоне: x + 1.0 < x) – jfs Nov 30 '17 at 09:33