Làm thế nào để bạn kiểm tra xem một số có chứa một con trăn chữ số nhất định không?

Câu hỏi này thực sự đã xuất hiện trong một trong những bài kiểm tra của học sinh của tôi. Ở đây, chúng tôi được yêu cầu viết một hàm

def contains_1(n):
if n>=10 and n<=19:
return True
if n%10 == 1:
return True
return n == 100
8, nhận vào một số nguyên và trả về
def contains_1(n):
if n>=10 and n<=19:
return True
if n%10 == 1:
return True
return n == 100
9 nếu số nguyên đầu vào của chúng tôi chứa chữ số 1 và
def contains_1(n):
n = abs(n)
while n > 0:
remainder = n % 10
n = n // 10
if remainder == 1:
return True
return False
0 nếu không. Thông thường, chúng ta có thể làm điều này trong 1 dòng

def contains_1(n):
return "1" in str(n)

Cuộc đuổi bắt

Chúng tôi không được phép sử dụng chuỗi trong chức năng của mình

Phiên bản đơn giản trong đó 1 ≤ n ≤ 100

Trong câu hỏi mà sinh viên của tôi đã đưa ra, số nguyên đầu vào được giới hạn trong phạm vi từ 1 đến 100. Chúng ta có thể đơn giản giả định rằng số đó nằm trong khoảng từ 1 đến 100 (bao gồm cả), điều này khiến mọi thứ trở nên đơn giản hơn nhiều

Lực lượng vũ phu

def contains_1(n):
numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
21,31,41,51,61,71,81,91,100]
return n in numbers_with_1

Cho rằng các số chỉ nằm trong khoảng từ 1 đến 100, thực sự khả thi khi thực hiện phương pháp vũ phu và liệt kê thủ công từng số có chứa chữ số 1, sau đó kiểm tra xem số đầu vào của chúng ta có thuộc bên trong không

Sử dụng câu lệnh if-else

def contains_1(n):
if n>=10 and n<=19:
return True
if n%10 == 1:
return True
return n == 100

Nếu chúng ta không muốn sử dụng phương pháp brute force tắt, chúng ta có thể sử dụng một vài câu lệnh if-else để giải quyết vấn đề này. Đây là các số từ 1 đến 100 có chứa chữ số 1

  • các số kết thúc bằng 1 vd. 1, 11, 21, … , 91
  • số từ 10 đến 19
  • 100

Như vậy ta có thể viết 1 câu lệnh if cho mỗi điều kiện là xong

Phiên bản khó hơn - n có thể là bất kỳ số nguyên nào

Nếu chúng ta loại bỏ giới hạn trong đó n chỉ có thể bao gồm từ 1 đến 100, những câu hỏi này sẽ trở nên khó hơn. Thay vào đó, chức năng của chúng tôi phải bao gồm tất cả các số nguyên - chúng tôi chắc chắn không thể sử dụng phương pháp vũ phu ở đây

Logic của giải pháp

  1. Biến
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 thành số dương (chúng tôi không muốn giải quyết các số âm ở đây)
  2. Kiểm tra xem số hiện tại của chúng tôi có kết thúc bằng số 1 không. Chúng ta có thể làm điều này bằng cách sử dụng chức năng modulo
  3. Nếu
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    2 là 1, chúng tôi biết chắc chắn rằng số
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 của chúng tôi chứa chữ số 1, vì vậy chúng tôi trả về
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    9 ngay lập tức
  4. Nếu
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    2 không phải là 1, chúng ta tiếp tục cuộc sống và chia
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 cho 10 (chia tầng)
  5. Lặp lại cho đến khi
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bằng 0
  6. Trả lại
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    0 ở cuối nếu chúng tôi không gặp bất kỳ chữ số 1 nào

Giải mã

def contains_1(n):
n = abs(n)
while n > 0:
remainder = n % 10
n = n // 10
if remainder == 1:
return True
return False

Chạy nhanh trong đó n = 12345

  1. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    6 là 5 → số cuối cùng không phải là 1
  2. Bây giờ chúng ta chỉ cần kiểm tra
    def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    7, vì chúng ta biết chắc chắn rằng số cuối cùng không phải là 1 (nó là 5)
  3. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    8 →
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bây giờ sẽ là 1234
  4. def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    0 là 4 → số cuối cùng không phải là 1
  5. Bây giờ chúng ta chỉ cần kiểm tra
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    1, vì chúng ta biết chắc chắn rằng số cuối cùng không phải là 1 (nó là 4)
  6. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    8 →
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bây giờ sẽ là 123
  7. Lặp lại điều này cho đến khi
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    4
  8. def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    5 là 1 → số cuối cùng ở đây là 1. Bây giờ chúng tôi biết chắc chắn rằng chữ số 1 tồn tại bên trong số này, vì vậy chúng tôi trả về
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    9

Một lần chạy khác trong đó n = 9876

  1. def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    7 là 6 → số cuối cùng không phải là 1 → kiểm tra
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    8
  2. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    8 →
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bây giờ là
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    8
  3. def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    2 là 7 → số cuối cùng không phải là 1 → kiểm tra
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    3
  4. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    8 →
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bây giờ là
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    3
  5. def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    7 là 8 → số cuối cùng không phải là 1 → kiểm tra
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    8
  6. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    8 →
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bây giờ là
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    8
  7. def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    42 là 9 → số cuối cùng không phải là 1 → không còn gì để kiểm tra
  8. def contains_1(n):
    numbers_with_1 = [1,10,11,12,13,14,15,16,17,18,19,
    21,31,41,51,61,71,81,91,100]
    return n in numbers_with_1
    8 →
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    1 bây giờ là
    def contains_1(n):
    if n>=10 and n<=19:
    return True
    if n%10 == 1:
    return True
    return n == 100
    45
  9. vòng lặp while kết thúc và chúng tôi trả về
    def contains_1(n):
    n = abs(n)
    while n > 0:
    remainder = n % 10
    n = n // 10
    if remainder == 1:
    return True
    return False
    0

Một số mã thử nghiệm

def contains_1(n):
if n>=10 and n<=19:
return True
if n%10 == 1:
return True
return n == 100
4Kết luận

Nếu bài viết này cung cấp giá trị và bạn muốn hỗ trợ tôi với tư cách là một nhà văn, hãy cân nhắc đăng ký làm thành viên Phương tiện - Đó là 5 đô la một tháng và bạn có quyền truy cập không giới hạn vào các câu chuyện trên Phương tiện. Nếu bạn đăng ký bằng liên kết của tôi bên dưới, tôi sẽ kiếm được một khoản hoa hồng nhỏ mà không phải trả thêm phí cho bạn

Đăng ký bằng liên kết của tôi tại đây để đọc các bài viết trên Phương tiện không giới hạn

Nếu bài viết này mang lại giá trị to lớn cho bạn, hãy cân nhắc mua cho tôi một ly cà phê — mọi đóng góp nhỏ đều được đánh giá cao

https. //www. muameacoffee. com/zlliu

Nếu bạn muốn nhận thông báo bất cứ khi nào tôi xuất bản, hãy cân nhắc tham gia danh sách email của tôi

Nhận email bất cứ khi nào Zlliu xuất bản

Nhận email bất cứ khi nào Zlliu xuất bản. Bằng cách đăng ký, bạn sẽ tạo một tài khoản Medium nếu bạn chưa có…

zl-liu. vừa phải. com

Thêm nội dung bằng tiếng Anh. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Nhận quyền truy cập độc quyền để viết các cơ hội và lời khuyên trong cộng đồng của chúng tôi Discord