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.