Hướng dẫn are leading zeros ok in python? - Các số 0 ở đầu có ổn không trong python?

Mẹo & Thủ thuật Python thú vị

👋 Chào mừng!

Bạn có biết rằng Python 3 không chấp nhận số không hàng đầu cho các số nguyên? Bạn có biết rằng Python 2 đã chấp nhận số không hàng đầu không? Bạn có muốn biết tại sao không? 👍
✔️ Did you know that Python 2 did accept leading zeros?
✔️ Do you want to know why? 👍

Trong bài viết này, bạn sẽ tìm hiểu chính xác lý do và điều gì đã thay đổi. Bạn sẽ ngạc nhiên khi biết rằng nó phải làm lý do tại sao hệ thống số bát phân.octal numeral system.

Tuyệt vời, phải không? Hãy để Lặn đi sâu vào các chi tiết!

✅ Python 2 - Zeros hàng đầu ở đây chúng ta đi!

Trong phiên bản Python này, bạn đã có thể thêm số không hàng đầu theo ý thích của mình mà không gây ra bất kỳ lỗi nào. Biểu thức như thế này đã được cho phép:

print(000000000000000015)
print(000000000000000025.6)
print(053)
print(-00004)
var1 = 0075

Tôi chắc chắn rằng bạn phải suy nghĩ: Tại sao họ lại cho phép điều này nếu các số không dẫn đầu không thêm bất cứ điều gì vào kết quả?

0000015 phải tương đương với 15, phải không? 😟

Không phải trong Python 2! 😱Not in Python 2! 😱

Số 0 đầu tiên trong 0000015 hoạt động giống như một lá cờ của người Hồi giáo nói với trình thông dịch Python rằng số được biểu thị trong hệ thống số bát phân (cơ sở 8) thay vì hệ thống thập phân mà chúng ta thường làm việc với (cơ sở 10).0000015 acts like a “flag” 🚩 that tells the Python interpreter that the number is expressed in the octal numeral system (base 8) instead of the decimal system that we usually work with (base 10).

# In Python 2
>>> 0000015
13

Đây là lý do tại sao trình thông dịch trả về số 13 khi chúng tôi nhập 0000015. Số được chuyển đổi từ hệ thống số bát diện thành hệ thống số thập phân. (Tôi đã bao gồm một lời giải thích ngắn gọn về quá trình này bên dưới 👍).

Nhưng làm thế nào chúng ta có thể nói với Python rằng con số này đã nằm trong hệ thống số thập phân, và đó là số 0 hàng đầu không nên thay đổi kết quả?how can we tell Python that this number is already in the decimal numeral system, andthat the leading zeros shouldn’t change the result?

Đây là nơi Python 3 đến giải cứu! 🎊

Python 3, Bye, tạm biệt, hàng đầu Zeros!

Trong Python 3, đây không phải là vấn đề nữa bởi vì cờ của người Viking đã rõ ràng hơn nhiều để phân biệt các số trong hệ thống số bát phân. Số phải bắt đầu bằng 0O hoặc 0O (số 0 theo sau là chữ O O O ở chữ thường hoặc chữ hoa).octal numeral system. The number must start with 0o or 0O (zero followed by an “o” letter in lowercase or uppercase).

>>> 0o0000015  # Notice the "flag" 0o
13
>>> 0O0000015
# Notice the "flag" 0O
13
>>> 0000015
# We didn't add the "flag", so an error is thrown
SyntaxError: invalid token

Trong ví dụ cuối cùng, bạn có thể thấy rằng trong Python 3, nếu chúng ta cố gắng viết một số nguyên với số 0 hàng đầu, một lỗi được ném vì phiên bản này đã thực hiện một cách để phân biệt cả hai hệ thống số.

Mẹo: Trong Python 3, số thập phân và số không chấp nhận số không hàng đầu. In Python 3, decimal numbers and zeros do accept leading zeros.

>>> 000000000000000  # A sequence of zeros is transformed into 0
0
>>> 000005.6
# A decimal number
5.6

Mẹo nhanh: Hệ thống số bát phân

Tôi chắc chắn rằng bạn phải tò mò về hệ thống số này, vì vậy hãy để phân tích cách 0000015 trở thành 13 trong Python 2. 😄 😄

1⃣ hệ thống thập phân

Đây là hệ thống số mà chúng ta thường sử dụng trong thực tế. Nó có cơ sở 10, có nghĩa là mỗi chữ số được nhân với 10 được nâng lên thành một nguồn để có được kết quả cuối cùng. Các chữ số được phép trong hệ thống số thập phân là 0 trận9. It has base 10, which means that each digit is multiplied by 10 raised to a power to obtain the final result. The digits allowed in the decimal numeral system are 0–9.

Ví dụ: 1365 trong hệ thống số thập phân là 1*(10³) + 3*(10²) + 6*(10¹) + 5*(10⁰) Điều này tương đương với 1000 + 300 + 60 + 5 = 1365.
1365 in the decimal numeral system is 1*(10³)+3*(10²)+6*(10¹)+5*(10⁰)
This is equivalent to 1000 + 300 + 60 + 5 = 1365.

Xem cách chúng ta nhân mỗi chữ số với 10 được nâng lên một nguồn bắt đầu từ 0 và tăng lên một cho mỗi nơi ở bên trái?

2⃣ hệ thống bát phân

Ngược lại, các số trong hệ thống số bát phân có cơ sở 8. Điều này có nghĩa là thay vì nhân với 10 được nâng lên thành một nguồn, chúng tôi nhân với 8 người được nâng lên một nguồn để biến số thành số tương đương của nó trong hệ thống thập phân. Các chữ số được phép trong hệ thống số bát phân là 0 trận7. This means that instead of multiplying by 10 raised to a power, we multiply by 8 raised to a power to transform the number to its equivalent number in the decimal system. The digits allowed in the octal numeral system are 0–7.

Ví dụ: 2536 trong hệ thống số bát diện là 2*(8³) + 5*(8²) + 3*(8¹) + 6*(8⁰). Điều này tương đương với 1024 + 320 + 24 + 6 = 1374 trong thập phân hệ thống.
2536 in the octal numeral system is 2*(8³) +5*(8²)+3*(8¹)+6*(8⁰).
This is equivalent to 1024 + 320 + 24 + 6 = 1374 in the decimal system.

>>> 02536 # In Python 2, the first 0 is the flag.
1374

Lưu ý: Sử dụng một chữ số lớn hơn 7 sẽ gây ra lỗi. Using a digit greater than 7 would cause an error.

# Example in Python 3
>>> 0o0008
SyntaxError: invalid syntax

👋 Cảm ơn bạn!

Tôi thực sự hy vọng rằng bạn thích bài viết của tôi. Tôi chân thành đánh giá cao các vỗ tay và bình luận của bạn. Twitter để tìm thêm các bài viết như thế này. 😃
I sincerely appreciate your claps and comments.👏
Follow me on Medium | Twitter to find more articles like this. 😃

💡 Bạn có thể thích đọc bài viết của tôi:

Trong các ngôn ngữ của năm qua, bao gồm Python 2.x, 0 tiền tố là mã cho 'Giải thích số này trong Octal', có thể dẫn đến nhiều loại lỗi đáng ngạc nhiên, không chỉ là thứ mà nó chỉ ngăn bạn thực hiện - được giải thích trong Octal, "032" là số thập phân 26.

Nếu bạn không biết về hành vi của Octal và tất cả các chữ số của bạn đều ít hơn 8, xin chúc mừng, bạn chỉ cần giới thiệu một sự khó chịu không thể tin được để chẩn đoán lỗi vào chương trình của bạn mà trình biên dịch không /không thể cảnh báo bạn.

Các số không hàng đầu có được phép trong Python không?

Nó không được phép có số 0 hàng đầu trong một số nguyên trong Python. Một cách để giải quyết lỗi là loại bỏ bất kỳ số không hàng đầu nào. Đã sao chép! Ngoài ra, bạn có thể bọc giá trị trong một chuỗi.. One way to solve the error is to remove any leading zeros. Copied! Alternatively, you can wrap the value in a string.

Tại sao các số không hàng đầu không được phép trong Python?

Lý do cho điều này là do một số nguyên thập phân khác không theo nghĩa đen (21,5,15, v.v.) không thể bắt đầu bằng số 0 (021,05,015).Tuy nhiên, chúng ta có thể viết bản in (00000) và lấy lại 0. Điều này đã vi phạm quy tắc Python cho biết lỗi cú pháp sẽ được nêu ra nếu 0 là số bắt đầu, theo sau là một số khác (bao gồm cả bằng không).a non-zero decimal integer literal(21,5,15, etc) can't start of with a zero(021,05,015). But yet we can write print(00000) and get back 0. This violated a Python rule that said a syntax error would be raised if 0 is the starting number, followed by another number(including zero).

Quy tắc cho các số không hàng đầu là gì?

1) Các số 0 hàng đầu sẽ bị triệt tiêu, mặc dù một số 0 trước khi cho phép một điểm thập phân.2) số 0 đáng kể sẽ không bị triệt tiêu;Khi một số 0 là đáng kể, nó có thể được sử dụng.3) Không bao gồm các số 0 sau khi điểm thập phân trừ khi chúng cần thiết để biểu thị độ chính xác.Leading zeroes shall be suppressed, although a single zero before a decimal point is allowed. 2) Significant zeroes shall not be suppressed; when a single zero is significant, it may be used. 3) Do not include Trailing zeroes after the decimal point unless they are needed to indicate precision.

Tại sao mọi người sử dụng số không hàng đầu?

Các số 0 hàng đầu được sử dụng để thực hiện thứ tự tăng dần của các số tương ứng với thứ tự bảng chữ cái: ví dụ: 11 đến theo thứ tự bảng chữ cái trước 2, nhưng sau 02. (xem, ví dụ, ISO 8601.)to make ascending order of numbers correspond with alphabetical order: e.g., 11 comes alphabetically before 2, but after 02. (See, e.g., ISO 8601.)