Hướng dẫn how to iterate through a number in python - cách lặp qua một số trong python

Python có nhiều chức năng sẵn có cho phép bạn thực hiện các tác vụ cụ thể trên đầu vào. Nếu bạn muốn lặp lại các chữ số của một số trong Python thì trình thông dịch có chức năng cho điều đó. Trong toàn bộ hướng dẫn này, bạn sẽ biết cách lặp lại thông qua các chữ số của một số trong Python bằng các phương thức khác nhau.

Báo cáo vấn đề

Hãy nói rằng bạn có một số ‘1234567 và bạn muốn lặp lại từng chữ số trong số và in từng chữ số trên màn hình. Làm thế nào bạn có thể làm như vậy?1234567‘ and you want to iterate each digit in the number and print each of them on the screen. How you can do so?

Trong phần tiếp theo, bạn sẽ biết tất cả các phương pháp để giải quyết vấn đề này.

Phương pháp 1: Lặp qua các chữ số của một số trong python bằng hàm iter ()

Phương pháp đầu tiên để lặp qua các chữ số của một số là việc sử dụng hàm iter (). Nó chấp nhận giá trị chuỗi là đối số. Do đó, trước tiên bạn phải đánh máy giá trị số nguyên và sau đó chuyển nó vào nó.

Thực hiện các dòng dưới đây của mã để lặp qua các chữ số.

integer = 1234567 for i in iter(str(integer)): print(i)

Đầu ra

1 2 3 4 5 6 7

Phương pháp 2: Lặp qua các chữ số sử dụng cho vòng lặp

Bạn cũng có thể lặp qua mỗi chữ số chỉ bằng cách sử dụng vòng lặp cho vòng lặp. Mã sẽ giống như phương thức trên nhưng ở đây bạn sẽ không sử dụng phương thức iter ().

Chạy các dòng dưới đây của mã.

num = 1234567 for digit in str(num): print(digit)

Đầu ra

1 2 3 4 5 6 7

Phương pháp 2: Lặp qua các chữ số sử dụng cho vòng lặp

Bạn cũng có thể lặp qua mỗi chữ số chỉ bằng cách sử dụng vòng lặp cho vòng lặp. Mã sẽ giống như phương thức trên nhưng ở đây bạn sẽ không sử dụng phương thức iter ().

Chạy các dòng dưới đây của mã.

num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)

Đầu ra

7 6 5 4 3 2 1

Phương pháp 2: Lặp qua các chữ số sử dụng cho vòng lặp

Bạn cũng có thể lặp qua mỗi chữ số chỉ bằng cách sử dụng vòng lặp cho vòng lặp. Mã sẽ giống như phương thức trên nhưng ở đây bạn sẽ không sử dụng phương thức iter ().

Chạy các dòng dưới đây của mã.

num = 1234 for c in map(int, str(num)): print(c)

Đầu ra

Phương pháp 2: Lặp qua các chữ số sử dụng cho vòng lặp
iterate through digits in python

Bạn cũng có thể lặp qua mỗi chữ số chỉ bằng cách sử dụng vòng lặp cho vòng lặp. Mã sẽ giống như phương thức trên nhưng ở đây bạn sẽ không sử dụng phương thức iter ().

Chạy các dòng dưới đây của mã.

Phương pháp 3: Lặp lại bằng cách sử dụng vòng lặp trong khi

Ở đây bạn sẽ sử dụng vòng lặp trong khi lặp lại các chữ số của số. Bên trong vòng lặp trong khi bạn sẽ sử dụng hàm divmod (). Sau đó, bạn sẽ vượt qua số đầu vào và 10 để chọn mỗi chữ số trong vòng lặp.

Bạn sẽ nhận được đầu ra dưới đây khi bạn sẽ chạy các dòng mã dưới đây.

Phương pháp 4: Sử dụng hàm map ()

Bạn cũng có thể sử dụng hàm map () để lặp qua các chữ số của một số. Hàm bản đồ () sẽ chấp nhận tham số đầu tiên là trực tiếp và tham số thứ hai là số đầu vào được đánh máy vào chuỗi.

Đầu tiên, mất cuộc gọi đó đến num = 1234567 for digit in str(num): print(digit)2 - bạn đang chuyển đổi một chuỗi ký tự thành số nguyên, đó không phải là điều bạn muốn (bạn muốn coi mỗi ký tự là số riêng của nó). Biến đổi:

inp = int(input("Enter a number:"))

to:

inp = input("Enter a number:")

Bây giờ num = 1234567 for digit in str(num): print(digit)3 là một chuỗi các chữ số, bạn có thể lặp qua nó, bằng chữ số.

Tiếp theo, gán một số giá trị ban đầu cho num = 1234567 for digit in str(num): print(digit)4 - khi bạn mã hóa ngay bây giờ, bạn sẽ nhận được num = 1234567 for digit in str(num): print(digit)5 vì bạn không bao giờ khởi tạo nó. Có lẽ bạn muốn num = 1234567 for digit in str(num): print(digit)6 trước vòng num = 1234567 for digit in str(num): print(digit)7.

Tiếp theo, hãy xem xét sự khác biệt giữa một ký tự và một số nguyên một lần nữa. Bây giờ bạn có:

1 2 3 4 5 6 70

trong đó, bên cạnh dấu chấm phẩy không cần thiết (Python là một cú pháp dựa trên vết lõm), đang cố gắng tổng hợp ký tự tôi vào số nguyên n-sẽ không hoạt động! Vì vậy, điều này trở thànhcharacter i to the integer n -- that won't work! So, this becomes

1 2 3 4 5 6 71

Để biến ký tự num = 1234567 for digit in str(num): print(digit)8 thành số nguyên num = 1234567 for digit in str(num): print(digit)9, v.v.

Phụ trợ @unacademy • Dữ liệu @Amazon • Nền tảng @Practo | Viết về ngôn ngữ nội bộ và toán học trong khoa học máy tính

Xuất bản ngày 14 tháng 6 năm 2020 được cập nhật ngày 10 tháng 12 năm 2020

Tererables trong Python là các đối tượng và container có thể được bước qua một mục tại một thời điểm, thường là sử dụng vòng lặp 1 2 3 4 5 6 70. Không phải tất cả các đối tượng có thể được lặp lại, ví dụ - chúng ta không thể lặp lại một số nguyên, đó là một giá trị số ít. Điều tốt nhất chúng ta có thể làm ở đây là lặp lại trên một loạt các số nguyên sử dụng loại 1 2 3 4 5 6 71 giúp chúng ta lặp lại thông qua tất cả các số nguyên trong phạm vi 1 2 3 4 5 6 72.

Vì các số nguyên, theo chủ nghĩa cá nhân, không thể hiểu được, khi chúng ta cố gắng thực hiện 1 2 3 4 5 6 73, nó sẽ tăng một ngoại lệ nêu rõ 1 2 3 4 5 6 74. Vì vậy, điều gì sẽ xảy ra nếu, chúng tôi thay đổi mã nguồn của Python và làm cho các số nguyên trở nên dễ hiểu, nói mỗi khi chúng tôi thực hiện 1 2 3 4 5 6 73, thay vì nâng một ngoại lệ mà nó thực sự lặp lại thông qua các giá trị 1 2 3 4 5 6 76. Trong bài tiểu luận này, chúng ta sẽ trải qua chính xác điều đó, và toàn bộ chương trình nghị sự:

  • Một con trăn có thể đi được là gì?
  • Giao thức Iterator là gì?
  • Thay đổi mã nguồn của Python và làm cho các số nguyên trở nên dễ hiểu, và
  • Tại sao nó có thể là một ý tưởng tồi để làm như vậy?

Python Iterables

Bất kỳ đối tượng nào có thể được lặp lại là một điều khác biệt trong Python. Danh sách này phải là loại có thể lặp lại phổ biến nhất ngoài kia và nó tìm thấy cách sử dụng của nó trong hầu hết mọi ứng dụng Python - trực tiếp hoặc gián tiếp. Ngay cả trước khi lệnh người dùng đầu tiên được thực thi, trình thông dịch Python, trong khi khởi động, đã tạo ra các danh sách 1 2 3 4 5 6 77, để sử dụng nội bộ.

Trong ví dụ dưới đây, chúng tôi thấy cách một danh sách 1 2 3 4 5 6 78 được lặp lại thông qua việc sử dụng vòng lặp 1 2 3 4 5 6 70 và mỗi phần tử có thể được truy cập thông qua biến num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)0.

1 2 3 4 5 6 72

Tương tự như num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)1, 1 2 3 4 5 6 71 là loại Python cho phép chúng ta lặp lại các giá trị số nguyên bắt đầu với giá trị num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)3 và đi đến num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)4 trong khi bước qua các giá trị num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)5 mỗi lần. 1 2 3 4 5 6 71 được sử dụng phổ biến nhất để thực hiện vòng lặp num = 1234567 for digit in str(num): print(digit)7 giống như C trong Python. Trong ví dụ dưới đây, vòng lặp num = 1234567 for digit in str(num): print(digit)7 lặp lại trên 1 2 3 4 5 6 71 bắt đầu từ 7 6 5 4 3 2 10, cho đến num = 1234567 for digit in str(num): print(digit)9 với bước 7 6 5 4 3 2 12 - tạo ra chuỗi 1 2 3 4 5 6 76.

1 2 3 4 5 6 73

Ngoài num = 1234567 while num > 0: num, digit = divmod(num, 10) print(digit)1 và 1 2 3 4 5 6 71 Các vòng lặp khác là - 7 6 5 4 3 2 16, 7 6 5 4 3 2 17, 7 6 5 4 3 2 18, 7 6 5 4 3 2 19, num = 1234 for c in map(int, str(num)): print(c)0, num = 1234 for c in map(int, str(num)): print(c)1, num = 1234 for c in map(int, str(num)): print(c)2 và num = 1234 for c in map(int, str(num)): print(c)3. Python cũng cho phép chúng tôi tạo các phép lặp tùy chỉnh bằng cách tạo các đối tượng và loại tuân theo giao thức Iterator.

Trình lặp và giao thức lặp

Python, giữ cho mọi thứ đơn giản, định nghĩa có thể lặp lại là bất kỳ đối tượng nào tuân theo giao thức iterator; có nghĩa là đối tượng hoặc một container thực hiện các chức năng sau

  • num = 1234 for c in map(int, str(num)): print(c)4 sẽ trả về một đối tượng iterator đã triển khai phương thức num = 1234 for c in map(int, str(num)): print(c)5
  • num = 1234 for c in map(int, str(num)): print(c)5 sẽ trả về mục tiếp theo của phép lặp và nếu các mục bị cạn kiệt thì hãy tăng ngoại lệ num = 1234 for c in map(int, str(num)): print(c)7.

Vì vậy, trong một ý chính, num = 1234 for c in map(int, str(num)): print(c)4 là một cái gì đó làm cho bất kỳ đối tượng Python nào có thể được điều chỉnh; Do đó, để làm cho các số nguyên có thể có được chúng ta cần phải có chức năng num = 1234 for c in map(int, str(num)): print(c)4 được đặt cho các số nguyên.

Có thể lặp lại trong Cpython

Việc triển khai Python nổi tiếng và được sử dụng rộng rãi nhất là Cpython trong đó cốt lõi được thực hiện trong Pure C. Vì chúng ta cần thay đổi một trong các kiểu dữ liệu cốt lõi của Python, chúng ta sẽ sửa đổi CPYThon, thêm hàm num = 1234 for c in map(int, str(num)): print(c)4 vào loại số nguyên và xây dựng lại nhị phân. Nhưng trước khi nhảy vào việc thực hiện, điều quan trọng là phải hiểu một vài nguyên tắc cơ bản.

1 2 3 41

Mỗi đối tượng trong Python được liên kết với một loại và mỗi loại là một thể hiện của một cấu trúc có tên pytypeObject. Một ví dụ mới của cấu trúc này thực sự là một loại mới trong Python. Cấu trúc này chứa một vài thông tin meta và một loạt các con trỏ chức năng C - mỗi con thực hiện một phân đoạn nhỏ của chức năng của loại. Hầu hết các "khe" này trong cấu trúc là tùy chọn có thể được lấp đầy bằng cách đặt các con trỏ chức năng thích hợp và điều khiển chức năng tương ứng.

Khe 1 2 3 42

Trong số tất cả các vị trí có sẵn, khe cắm mà chúng ta quan tâm là khe cắm ____72 có thể giữ một con trỏ cho một hàm trả về một đối tượng tererator. Khe này tương ứng với chức năng num = 1234 for c in map(int, str(num)): print(c)4 làm cho đối tượng có thể đạt được một cách hiệu quả. Giá trị không 1 2 3 45 của khe này cho biết khả năng lặp lại. 1 2 3 42 giữ chức năng với chữ ký sau

1 2 3 4 5 6 74

Số nguyên trong Python không có kích thước cố định; Thay vào đó, kích thước của số nguyên phụ thuộc vào giá trị mà nó giữ. Làm thế nào Python thực hiện các số nguyên siêu dài là một câu chuyện tự nó nhưng việc thực hiện cốt lõi có thể được tìm thấy tại LongObject.C. Ví dụ của 1 2 3 41 xác định số nguyên/loại dài là 1 2 3 48 và có khe cắm 1 2 3 42 của nó thành 7 6 5 4 3 2 10, tức là 1 2 3 45, điều này khẳng định thực tế rằng các số nguyên trong python không thể hiểu được.

1 2 3 4 5 6 75

Giá trị 1 2 3 45 này cho 1 2 3 42 làm cho đối tượng num = 1234567 for digit in str(num): print(digit)2 không thể hiểu được và do đó nếu khe này bị chiếm bởi một con trỏ hàm thích hợp với chữ ký đã nói ở trên, điều này cũng có thể làm cho bất kỳ số nguyên nào có thể đạt được.

Thực hiện inp = int(input("Enter a number:")) 5

Bây giờ chúng tôi thực hiện hàm 1 2 3 42 trên loại số nguyên, đặt tên cho nó inp = int(input("Enter a number:")) 5, trả về một đối tượng tererator, theo yêu cầu của quy ước. Chức năng cốt lõi mà chúng tôi đang tìm cách thực hiện ở đây là - khi một số nguyên num = 1234567 for digit in str(num): print(digit)4 được lặp lại, nó sẽ lặp lại thông qua chuỗi 1 2 3 4 5 6 72 với bước 7 6 5 4 3 2 12. Hành vi này rất gần với loại 1 2 3 4 5 6 71 được xác định trước, lặp đi lặp lại trên một loạt các giá trị số nguyên, cụ thể hơn là 1 2 3 4 5 6 71 bắt đầu vào lúc 7 6 5 4 3 2 10, đến num = 1234567 for digit in str(num): print(digit)4 với bước 7 6 5 4 3 2 12.

Chúng tôi xác định một hàm tiện ích trong inp = input("Enter a number:") 6, với số nguyên Python, trả về một ví dụ là inp = input("Enter a number:") 7 theo thông số kỹ thuật của chúng tôi. Hàm tiện ích này sẽ khởi tạo inp = input("Enter a number:") 7 với sự khởi đầu là 7 6 5 4 3 2 10, kết thúc ở giá trị dài được đưa ra trong đối số và bước là 7 6 5 4 3 2 12. Chức năng tiện ích được minh họa dưới đây.

1 2 3 4 5 6 76

Hàm tiện ích 1 2 3 4 5 6 701 được xác định trong inp = input("Enter a number:") 6 và sẽ được khai báo trong 1 2 3 4 5 6 703 để nó có thể được sử dụng trên CPYThon. Tuyên bố chức năng trong 1 2 3 4 5 6 703 bằng cách sử dụng các macro Python tiêu chuẩn như thế này

1 2 3 4 5 6 77

Hàm chiếm vị trí 1 2 3 42 sẽ nhận được đối tượng 1 2 3 4 5 6 706 làm đối số đầu vào và dự kiến ​​sẽ trả về thể hiện iterator. Do đó, hàm inp = int(input("Enter a number:")) 5 sẽ nhận được đối tượng số nguyên python (tự) được lặp lại như một đối số đầu vào và nó sẽ trả về thể hiện iterator. Ở đây chúng tôi sẽ sử dụng chức năng tiện ích 1 2 3 4 5 6 701, chúng tôi vừa xác định, đó là trả lại cho chúng tôi một ví dụ của trình lặp lại phạm vi. Toàn bộ hàm inp = int(input("Enter a number:")) 5 có thể được định nghĩa là

1 2 3 4 5 6 78

Bây giờ chúng tôi đã xác định inp = int(input("Enter a number:")) 5, chúng tôi có thể đặt hàm trên khe 1 2 3 42 của 1 2 3 48 cho phép khả năng lặp lại được yêu cầu trên số nguyên.

1 2 3 4 5 6 79

Dòng chảy hợp nhất

Khi chúng ta có mọi thứ tại chỗ, toàn bộ dòng chảy như thế này -

Mỗi khi một số nguyên được lặp lại, sử dụng bất kỳ phương thức lặp nào - ví dụ 1 2 3 4 5 6 70, nó sẽ kiểm tra 1 2 3 42 của 1 2 3 4 5 6 715 và vì bây giờ nó giữ con trỏ hàm inp = int(input("Enter a number:")) 5, hàm sẽ được gọi. Nhu cầu này sẽ trả về một đối tượng lặp của loại inp = input("Enter a number:") 7 với giá trị khởi động, chỉ mục và bước cố định - theo thuật ngữ Pythonic thực sự là 1 2 3 4 5 6 718. Do đó, 1 2 3 4 5 6 73 vốn được đánh giá là 1 2 3 4 5 6 720 cho phép chúng ta lặp lại số nguyên.

Những thay đổi này cũng được lưu trữ trên một nhánh từ xa cpython@02-long-iter và yêu cầu kéo giữ 1 2 3 4 5 6 721 có thể được tìm thấy ở đây.

Lặp lại số nguyên trong hành động

Khi chúng ta xây dựng một nhị phân Python mới với những thay đổi đã nói ở trên, chúng ta có thể thấy các số nguyên số đó trong hành động. Bây giờ khi chúng ta làm 1 2 3 4 5 6 73, thay vì nâng cao một ngoại lệ, nó thực sự đã lặp lại thông qua các giá trị 1 2 3 4 5 6 76.

num = 1234567 for digit in str(num): print(digit)0

Tại sao nó không phải là một ý kiến ​​hay

Mặc dù nó có vẻ thú vị, và có phần hữu ích, để có số nguyên, nhưng nó thực sự không phải là một ý tưởng tuyệt vời. Lý do cốt lõi cho điều này là nó làm cho việc giải nén không thể đoán trước. Giải nén là khi bạn giải nén một điều khác nhau và gán nó cho nhiều biến. Ví dụ: 1 2 3 4 5 6 724 sẽ gán 3 cho A và 4 cho b. Vì vậy, việc gán 1 2 3 4 5 6 725 phải là một lỗi vì chỉ có một giá trị ở bên phải và nhiều ở bên trái.

Giải nén đối xử với kích thước tay phải vì có thể lặp lại và cố gắng lặp lại nó; Và bây giờ vì các số nguyên là có thể sử dụng bên phải, đăng bài Lặp lại mang lại 7 giá trị mà phía bên trái chỉ có 2 biến; Do đó, nó làm tăng một ngoại lệ 1 2 3 4 5 6 726.

Mọi thứ sẽ hoạt động tốt nếu chúng ta làm 1 2 3 4 5 6 727 như bây giờ bên phải, đăng bài, có hai giá trị và phía bên trái có hai biến. Do đó, hai tuyên bố rất giống nhau dẫn đến hai kết quả rất khác nhau, làm cho việc không đóng gói không thể đoán trước.

num = 1234567 for digit in str(num): print(digit)1

Sự kết luận

Trong bài tiểu luận này, chúng tôi đã sửa đổi mã nguồn của Python và làm cho các số nguyên trở nên dễ hiểu. Mặc dù không phải là một ý tưởng tốt để làm như vậy, nhưng thật thú vị khi chơi xung quanh với mã và thực hiện các thay đổi trong ngôn ngữ lập trình yêu thích của chúng tôi. Nó giúp chúng tôi có được một ý tưởng chi tiết về việc triển khai Python cốt lõi và có thể mở đường cho chúng tôi để trở thành một nhà phát triển lõi Python. Đây là một trong nhiều bài viết trong loạt bài Python Internals - Làm thế nào Python thực hiện các số nguyên siêu dài? và Python Cache số nguyên.

Người giới thiệu

  • PytypeObject
  • Đối tượng loại Python
  • Giao thức Iterator Python
  • Cpython với long_iter

Các bài viết khác mà bạn có thể thích

  • Python Cache số nguyên
  • Làm thế nào Python thực hiện các số nguyên siêu dài?
  • Tôi đã thay đổi con trăn của mình và làm cho nó đáng ngờ | Python Internals
  • Xây dựng máy trạng thái hữu hạn với Python Coroutines
  • Cá nhân hóa lời nhắc Python của bạn

Nếu bạn thích những gì bạn đọc, hãy xem xét đăng ký nhận bản tin hàng tuần của tôi tại arpitbhayani.me/newsletter, mỗi tuần một lần, tôi viết một bài luận về các ngôn ngữ lập trình nội bộ, hoặc một lần lặn sâu trên một số thuật toán siêu xe, hoặc chỉ một vài lời khuyên về việc xây dựng các hệ thống phân tán có thể mở rộng cao.

Bạn luôn có thể tìm thấy tôi duyệt qua Twitter @arpit_bhayani.

Làm thế nào để bạn lặp lại thông qua một mảng số nguyên trong Python?

Phương thức Range () của Python có thể được sử dụng kết hợp với vòng lặp để đi qua và lặp qua danh sách trong Python. Phương thức phạm vi () về cơ bản trả về một chuỗi các số nguyên, tức là nó xây dựng/tạo một chuỗi các số nguyên từ chỉ mục bắt đầu được cung cấp cho đến chỉ mục cuối như được chỉ định trong danh sách đối số.. The range() method basically returns a sequence of integers i.e. it builds/generates a sequence of integers from the provided start index up to the end index as specified in the argument list.

Bạn có thể lặp lại thông qua một số nguyên trong Python không?

Tererables trong Python là các đối tượng và container có thể được bước qua một mục tại một thời điểm, thường là sử dụng cho ... trong vòng lặp. Không phải tất cả các đối tượng có thể được lặp lại, ví dụ - chúng ta không thể lặp lại một số nguyên, đó là một giá trị số ít.we cannot iterate an integer, it is a singular value.

Làm thế nào để tôi lặp lại một số?

Phương pháp đầu tiên để lặp qua các chữ số của một số là việc sử dụng hàm iter ().Nó chấp nhận giá trị chuỗi là đối số.Do đó, trước tiên bạn phải đánh máy giá trị số nguyên và sau đó chuyển nó vào nó.use of iter() function. It accepts the string value as the argument. Therefore you have to first typecast the integer value and then pass it into it.

Làm thế nào để bạn lặp lại thông qua các giá trị trong một danh sách?

Chúng ta có thể lặp lại thông qua một danh sách bằng cách sử dụng hàm phạm vi () và chuyển độ dài của danh sách.Nó sẽ trả về chỉ mục từ 0 đến hết danh sách.Đầu ra sẽ giống như trên.using the range() function and passing the length of the list. It will return the index from 0 till the end of the list. The output would be the same as above.

Chủ đề