Tag: python

  • Top 7 ngôn ngữ lập trình cho trẻ em

    Top 7 ngôn ngữ lập trình cho trẻ em

    Top 7 ngôn ngữ lập trình cho trẻ em

    Lần đầu tiên học cách viết mã và đọc mã nguồn tất cả các ngôn ngữ lập trình khác nhau đều có vẻ đáng sợ, đặc biệt là đối với trẻ em mới tiếp xúc với máy tính!

    May mắn thay, trong khi việc học một thứ gì mới hiếm khi dễ dàng, nhưng vẫn có rất nhiều lựa chọn và một loạt các khóa học phù hợp cho mọi đối tượng, trình độ khác nhau.

    Trong hướng dẫn này, chúng tôi sẽ phân tích những ưu điểm và nhược điểm của 7 ngôn ngữ lập trình cho trẻ em, bao gồm Scratch, JavaScript, Java, Python, Lua, C ++ và C #. Đầy đều là những ngôn ngữ lập trình phổ biến nhất, được đông đảo các lập trình liên lựa chọn và sử dụng hàng ngày.

    Ngôn ngữ lập trình là ngôn ngữ hình thức bao gồm một tập hợp các lệnh tạo ra nhiều loại đầu ra khác nhau. Ngôn ngữ lập trình được sử dụng trong lập trình máy tính để thực hiện các thuật toán.

    Ngôn ngữ lập trình được sử dụng để truyền đạt các chỉ dẫn đến máy móc — trong hầu hết các trường hợp là máy tính. Bởi vì máy móc hoạt động theo một cách cụ thể, các lập trình viên phải sử dụng các ngôn ngữ chính thức để giao tiếp với máy tính và phát triển các chương trình phần mềm, thể hiện các thuật toán hoặc cung cấp các hướng dẫn cụ thể.

    ngôn ngữ lập trình là gì

    1. Scratch & các ngôn ngữ lập trình trực quan khác

    Scratch là ngôn ngữ lập trình tốt nhất có thể khiến trẻ em hào hứng với việc viết mã nhờ vào cách tạo mã bằng việc kéo thả các khối mã lệnh.

    Scratch ngôn ngữ lập trình cho trẻ em

    Khi nói đến việc viết mã cho trẻ em , các ngôn ngữ lập trình trực quan như Scratch cung cấp một nền tảng vững chắc về các nguyên tắc lập trình, với việc trẻ em có thể kéo và thả các khối mã để tạo hoạt ảnh cho các nhân vật, tạo trò chơi và xây dựng ứng dụng.

    Scratch hoàn hảo để dạy cho trẻ em chưa có kinh nghiệm lập trình, trẻ em nhỏ tuổi (tiểu học).

    Scratch cho trẻ thấy việc viết mã có thể thú vị như thế nào với các thao tác kéo thả vô cùng trực quan. Nó cũng được sử dụng để tạo nên các bộ phim hoạt hình có khả năng tương tác với người xem.

    2. JavaScript – Ngôn ngữ tốt nhất cho web

    JavaScript là một ngôn ngữ lập trình thủ tục và hướng đối tượng được sử dụng cho các ứng dụng front-end hoặc client, có nghĩa là các hành động của nó được thực thi trên máy tính của người dùng.

    Ngôn ngữ này rất phổ biến, được hỗ trợ bởi nhiều người dùng (và công việc!) Và là ngôn ngữ gốc trên tất cả các trình duyệt web. JavaScript được sử dụng phổ biến nhất để tạo các ứng dụng web phức tạp và có khả năng tương tác.

    Mặc dù tên của chúng nghe có vẻ giống nhau, nhưng Java và JavaScript là hai ngôn ngữ lập trình rất khác nhau, bạn cần phân biệt rõ điều này.

    JavaScript tuyệt vời cho sinh viên quan tâm đến phát triển và thiết kế web hoặc trẻ em muốn bắt đầu học các kiến ​​thức cơ bản về lập trình.

    3. Java – Ngôn ngữ lập trình tốt nhất cho sinh viên trung cấp

    Java là một trong những ngôn ngữ lập trình được sử dụng rộng rãi nhất trên thế giới, với các nhà phân tích nói rằng khoảng 90% các công ty trong danh sách Fortune 500 sử dụng Java. Vì vậy, đó là một lựa chọn tuyệt vời cho những sinh viên muốn có hiểu biết phong phú về lập trình có thể được sử dụng trong nhiều năm tới.

    Java là một ngôn ngữ được định kiểu tĩnh, có nghĩa là nó yêu cầu bạn chỉ định một kiểu biến. Mặc dù điều này có nghĩa là các ứng dụng được xây dựng bằng Java được biết là có khả năng mở rộng, ổn định và dễ bảo trì hơn, nhưng điều đó cũng có nghĩa là Java có thể mất nhiều thời gian để thành thạo hơn các ngôn ngữ khác.

    Java tốt cho trẻ em vì nó có thể được sử dụng để tạo công cụ trò chơi, ứng dụng dành cho thiết bị di động Android, môi trường phụ trợ lớn, v.v.

    Java  tuyệt vời cho:

    • Các lập trình viên trung cấp muốn củng cố các kỹ năng lập trình của họ
    • Trẻ em học các nguyên tắc Java thông qua một trò chơi thú vị như Minecraft
    • Trẻ em đang chuẩn bị tham gia Kỳ thi AP Khoa học Máy tính hoặc muốn hiểu rõ hơn về các khái niệm lập trình

    4. Lua (dành cho Roblox) tốt nhất cho lập trình viên trò chơi

    Được tạo ra ở Brazil, Lua (có nghĩa là “mặt trăng” trong tiếng Bồ Đào Nha!) Là một ngôn ngữ lập trình gọn nhẹ được thiết kế để nhúng vào các ứng dụng. Đó là một ngôn ngữ đa mô hình, có nghĩa là nó có một tập hợp các tính năng chung có thể được áp dụng cho nhiều vấn đề.

    Lua có dễ học không?

    Với đường cong học tập ngắn (như Python), dễ nhúng và thực thi nhanh chóng, đây là một lựa chọn lý tưởng khi nói đến các hoạt động như  học cách viết mã một trò chơi. Trên thực tế, Lua là ngôn ngữ phổ biến nhất được sử dụng trong game engine, theo GameDev.net và nó đã giành được giải thưởng Gamasutra Frontline cho công cụ lập trình tốt nhất.

    Số lượng các nhà phát triển sử dụng Lua đang tăng đều, có nghĩa là sinh viên của bạn có thể chọn một công cụ có thể phục vụ họ trong một số ngành nghề. Adobe Photoshop, World of Warcraft và Angry Birds đều sử dụng mã Lua. (Đặc biệt là tìm hiểu thêm về mã hóa Roblox cho trẻ em.)

    Tuyệt vời cho:

    • Trẻ em và thanh thiếu niên muốn tiếp thu ngôn ngữ nhanh chóng
    • Sinh viên quan tâm đến lập trình trò chơi
    • Học cách làm Obby trong Roblox!

    5. Python – Ngôn ngữ tốt nhất cho người mới bắt đầu

    Được đặt tên theo loạt phim hài Monty Python, Python được coi là một trong những ngôn ngữ mã hóa dễ học nhất, một phần là do cú pháp đơn giản hóa và tập trung vào khoảng trắng. Python sử dụng ít dòng mã hơn so với các ngôn ngữ lập trình khác. Đặc biệt, việc đọc mã Python khá dễ dàng, vì vậy ngay cả người mới bắt đầu có thể bắt đầu tạo tương đối nhanh chóng.

    Các công ty như Google và Disney sử dụng Python và nó rất phổ biến trong các lĩnh vực khoa học, nơi các nhà khoa học coi lập trình như nghề nghiệp thứ hai của mình. Ngôn ngữ này có thể được sử dụng để phát triển trò chơi điện tử, các trang web, và trí tuệ nhân tạo, khoa học dữ liệu.

    Mời bạn tham khảo các bài học về lập trình Python tại https://o2.edu.vn/d/lap-trinh/python/

    Lập trình Python rất tuyệt vời cho trẻ em và cũng đủ linh hoạt để sử dụng trong các lĩnh vực phức tạp như an ninh mạng và trí tuệ nhân tạo. Bây giờ đó là một ngôn ngữ linh hoạt và mạnh mẽ!

    Tuyệt vời cho:

    • Trẻ em và thanh thiếu niên muốn lên ý tưởng và thực hiện trong thời gian ngắn.
    • Tạo mã dễ đọc trông giống như tiếng Anh thông thường.
    • Sinh viên muốn theo đuổi các lĩnh vực khoa học, đặc biệt là trí tuệ nhân tạo.

    6. C++ – Ngôn ngữ tốt nhất để hiểu sâu hơn về khoa học máy tính

    Được phát âm là “see plus plus”, ngôn ngữ lập trình này được sử dụng để tạo các ứng dụng chạy cục bộ trên các máy như máy tính của bạn.

    Bất chấp thời gian và độ phức tạp cần thiết để học C ++, ngôn ngữ này sẽ cung cấp cho thanh thiếu niên sự hiểu biết rất sâu sắc về lập trình. C ++ có thể được sử dụng để tạo phần mềm hệ thống, trò chơi và nhiều chương trình khác.

    Tuyệt vời cho:

    • Thanh thiếu niên muốn hiểu biết sâu về các nguyên tắc lập trình.
    • Sinh viên muốn lập trình trong ngành công nghiệp trò chơi.

    7. C# – tốt nhất để học lập trình game 3D

    Được phát âm là “see sharp”, C # là một ngôn ngữ lập trình cực kỳ phổ biến được sử dụng để phát triển hầu hết các ứng dụng của bên thứ ba cho Windows. Đây là ngôn ngữ lập trình được yêu cầu nhiều thứ tư cho các công việc và có thể là một ngôn ngữ khởi đầu tuyệt vời cho những người mới học lập trình.

    Về mặt cú pháp, C # rất giống với Java, vì vậy kinh nghiệm sử dụng một trong các ngôn ngữ này sẽ giúp bạn dễ dàng tiếp nhận ngôn ngữ kia hơn. C # thậm chí còn được gọi là bản sao của Microsoft đối với ngôn ngữ Java . Nó có thể được sử dụng để tạo các ứng dụng web, trò chơi và các chương trình khác.

    Unity là một game engine chuyên dụng để tạo các trò chơi 3D, nó cũng sử dụng C# để viết các script cho chương trình của mình.

    Top 7 ngôn ngữ lập trình cho trẻ em 1

    Tuyệt vời cho:

    • Sinh viên quan tâm đến việc tạo ứng dụng cho Windows
    • Thanh thiếu niên có kinh nghiệm Java và đang muốn học một ngôn ngữ tương tự
  • Sử dụng Python giải bài tập tổ hợp xác suất

    Sử dụng Python giải bài tập tổ hợp xác suất

    Sau khi đã giải được 20 Bài tập Python cơ bản có lời giải, mời bạn tiếp tục thử sức các bài tập Python chỉ sử dụng vòng lặp và các kiểu dữ liệu cơ bản như kiểu danh sách list, kiểu xâu str.

    Bài 1. [Đại học Thái Nguyên 2000] Từ các chữ số 1; 2; 3 có thể lập được bao nhiêu số tự nhiên gồm 5 chữ số có mặt đủ 3 chữ số nói trên?

    Đáp số: 150 số.

    Hướng dẫn. Đầu tiên sử dụng 5 vòng lặp để tạo một danh sách tất cả các số tự nhiên gồm 5 chữ số được tạo thành từ các chữ số 1, 2, 3. Sau đó duyệt qua tất cả các phần tử của danh sách này và dùng hàm membership in để kiểm tra xem phần tử đó có mặt cả ba chữ số 1, 2, 3 hay không. Nếu có thì tăng biến đếm count, và in phần tử đó ra nếu muốn.

    numbers = ['1', '2', '3']
    results = []
    
    for a in numbers:
      for b in numbers:
        for c in numbers:
          for d in numbers:
            for e in numbers:
              # results.append([a,b,c,d,e])
              results.append(a+b+c+d+e)
    
    count = 1
    
    for temp in results:
      # print(temp)
      if ('1' in temp) and ('2' in temp) and ('3' in temp):
        print(str(count) +': '+temp)
        count +=1

    Bài 2. Có bao nhiêu số tự nhiên gồm 5 chữ số và chia hết cho 7.

    Đáp số: 12857 số.

    Hướng dẫn. Sử dụng một biến đếm count. Duyệt tất cả các số tự nhiên có 5 chữ số (từ 10000 đến 99999) và kiểm tra xem số đó có chia hết cho 7 hay không. Nếu có thì tăng biến đếm. Có thể in ra số đó nếu muốn.

    count = 0
    for i in range(10000, 99999 + 1):	
      if (i % 7 == 0):
        count += 1
        print(str(count) + ': ' + str(i))

    Bài 3. Một em bé có thể mang họ cha là Nguyễn, hoặc họ mẹ là Lê; tên đệm có thể là Văn, Hữu hoặc Đình; tên có thể là Nhân, Nghĩa, Trí hoặc Dũng. Hỏi có bao nhiêu cách đặt tên cho bé?

    Đáp số. Có 24 cách đặt tên.

    bien_dem = 1
    ho = ['Nguyễn', 'Lê']
    dem = ['Văn', 'Hữu', 'Đình']
    ten = ['Nhân', 'Nghĩa', 'Trí', 'Dũng']
    for h in ho:
      for d in dem:
        for t in ten:
          print(str(bien_dem) + ': ' + h + ' ' + d + ' ' + t)
          bien_dem += 1

    Bài 4. [Đại học An Ninh 1997] Từ các chữ số từ 0 đến 6 có thể lập được bao nhiêu số tự nhiên chẵn gồm 3 chữ số khác nhau?

    Nếu sử dụng kiểu dữ liệu tập hợp set, chúng ta có thể in trực tiếp ra các số thỏa mãn yêu cầu:

    numbers_even = {'0', '2', '4', '6'}
    numbers_odd = {'1', '3', '5'}
    numbers = numbers_even | numbers_odd
    
    results = []
    count = 0
    
    for c in numbers_even:
      for a in (numbers - {'0'}):
        if (a != c):
          for b in numbers:
            if ( b!=a and b!= c):
              count += 1
              print(str(count) + ': ' +a+b+c)
    

    Cách khác, chúng ta không sử dụng kiểu dữ liệu tập hợp thì sẽ in ra rất cả các số tự nhiên chẵn sau đó loại đi các số mà có chữ số giống nhau:

    count = 0
    results =[]
    
    for a in range(1,7):
      for b in range(0,7):
        for c in {0,2,4,6}:
          results.append(str(a)+str(b)+str(c))
    
    temp = []
    for x in results:
      if not((x[0] == x[1]) or (x[0]==x[2]) or (x[1]==x[2])):
        temp.append(x)
    print(len(temp))
    print(temp)

    Bài 5. Từ các chữ số 0,1,2,3,4,5,6 có thể lập được bao nhiêu số tự nhiên gồm 3 chữ số khác nhau và phải có mặt chữ số 5?

    Đáp số: 80 số.

    count = 0
    results =[]
    
    for a in range(1,7):
      for b in range(0,7):
        for c in range(0,7):
          results.append(str(a)+str(b)+str(c))
    
    temp = []
    for x in results:
      if not((x[0] == x[1]) or (x[0]==x[2]) or (x[1]==x[2])) and ('5' in x):
        temp.append(x)
    print(len(temp))
    print(temp)

     

  • Class trong Python

    Class trong Python

    Class trong Python

    Python là một ngôn ngữ lập trình hướng đối tượng. Hầu hết mọi thứ trong Python đều là một đối tượng, với các thuộc tính properties và phương thức methods.

    Lớp Class trong Python kí hiệu là class được hiểu như là một bản mẫu, bản mô tả về các đối tượng nào đó. Class (lớp, loài) chính là một định nghĩa, chứa tất cả các thông tin bao gồm thuộc tính – properties và hành vi – method, function của mọi cá thể (đối tượng – object) trong loài đó.

    Ví dụ, chúng ta định nghĩa lớp car thì lớp này sẽ phải bao gồm tất cả những thông tin, đặc điểm chung mà mọi chiếc ô tô đều có:

    • các thuộc tính: fuel – loại nguyên liệu sử dụng, maxspeed – tốc độ tối đa…
    • các hàm, phương thức: refuel() – nạp nhiên liệu, getFuel() – lấy mức nhiên liệu hiện tại, setSpeed() – thiết lập vận tốc là bao nhiêu, getSpeed() – lấy vận tốc hiện tại của xe, drive() – lái xe…

    lớp class trong python

    Khi đó, giả sử myCar là một object (đối tượng) của class car thì myCar phải có đầy đủ các đặc điểm của lớp car với những thông số cụ thể. Chẳng hạn myCar.fuel có giá trị là xăng, myCar.maxSpeed bằng 18o km/h, khi gọi hàm myCar.getFuel() sẽ trả về mức nhiên liệu hiện tại của myCar

    Đối tượng (Object) chỉ đơn giản là một tập hợp các dữ liệu (các biến) và các phương thức (các hàm) hoạt động trên các dữ liệu đó. Và, lớp (class) là một kế hoạch chi tiết cho đối tượng.

    Xem thêm 15 Cuốn sách học Python miễn phí

    Nếu bạn thấy khó hiểu thì nên nhớ rằng từ bản thân từ class có nghĩa là loài, lớp. Nói đến loài mèo, chúng ta đều biết rằng tất cả các con mèo đều có các đặc điểm như màu lông, màu mắt, chiều dài, cân nặng… và các hành động như kêu meo meo, dụi lông vào chân, kêu gừ gừ… Do đó, chúng ta có thể dùng class LoaiMeo để mô tả những đặc điểm này của loài mèo. Nhưng, đối với mỗi một con mèo cụ thể thì từng đặc điểm trên lại có các giá trị cụ thể khác nhau. Chẳng hạn con mèo Milu của tôi thì màu xám, cân nặng 2 kí, mắt xanh… còn con mèo Mimi của bạn thì lại màu trắng, cân nặng 3 kí và mắt nâu.

    class lop trong Python

    Các khái niệm trong class

    • Instance là một hiện thực cụ thể của một lớp, có thể gọi là thực thể (cá thể). Chẳng hạn, với lớp LoaiMeo kể trên thì Milu là một instance của LoaiMeo.
    • Methods: Hàm, phương thức của một class.
    • Data members: Biến chứa dữ liệu gồm: class variable và instance variable.
      • Class variable: Biến dùng chung cho tất cả các đối tượng của lớp, được định nghĩa trong lớp mà không nằm trong methods (hàm thực thi) nào cả. Các biến này không được sử dụng thường xuyên.
      • Instance variable: Biến được định nghĩa bên trong method và chỉ thuộc về các instance (đối tượng thực thể của lớp).

    Khai báo Class trong Python

    Khai báo lớp trong Python sử dụng từ khóa class, theo sau là tên của lớp, thường bắt đầu bằng kí tự viết hoa và cuối cùng là kí tự :

    Dòng tiếp theo, thường là comment sử dụng cặp ngoặc ''' gọi là docstring – một mô tả ngắn gọn về lớp. Docstring này không bắt buộc nhưng khuyến khích sử dụng.

    Tiếp theo là các thuộc tính và các hàm, phương thức của lớp. Cấu trúc chung như sau:

    class TenLop:
        '''Mô tả về class'''
        <các trường dữ liệu (data field)>
        <các hàm, phương thức>

    Ví dụ, khai báo lớp MyClass với thuộc tính a = 5, chúng ta viết như sau:

    class MyClass:
        '''Đây là docstring. Một lớp mới vừa được khai báo.'''
        a =5

    Class tạo ra một local namespace mới trở thành nơi để các thuộc tính của nó được khai báo. Thuộc tính có thể là hàm hoặc dữ liệu.

    Tạo một đối tượng trong Python

    Để tạo một đối tượng object của class, chẳng hạn lớp MyClass chúng ta cần một biến để lưu đối tượng này và dùng phép gán, theo sau là lời gọi MyClass()

    class MyClass:
        '''Đây là docstring. Một lớp mới vừa được khai báo.'''
        a =5
    foo = MyClass()

    Truy cập đến các thuộc tính, method của class

    Để truy cập đến các thuộc tính, hàm, phương thức của lớp, chúng ta sử dụng dấu chấm . sau tên lớp, tên đối tượng và theo sau là tên thuộc tính, tên hàm. Ví dụ, với lớp MyClass ở trên, để truy cập đến thuộc tính a, chúng ta dùng câu lệnh MyClass.a hoặc foo.a

    class MyClass: 
      '''Đây là docstring. Một lớp mới vừa được khai báo.''' 
      a =5
    foo = MyClass()
    
    print(foo.a) //kết quả 5
    print(MyClass.a) //kết quả 5

    Chúng ta có thể thay đổi giá trị cho các thuộc tính của một đối tượng trong class sử dụng phép gán giá trị mới cho thuộc tính đó. Chẳng hạn, trong ví dụ trên, chúng ta muốn a nhận giá trị 7 thì làm như sau

    <pre class="EnlighterJSRAW" data-enlighter-language="python">class MyClass: 
      '''Đây là docstring. Một lớp mới vừa được khai báo.''' 
      a =5
    foo = MyClass()
    
    print(foo.a) //kết quả 5
    foo.a = 7
    print(foo.a)//kết quả 7
    
    print(MyClass.a) //kết quả 5

    Lưu ý rằng, cùng là thuộc tính a nhưng gắn với những đối tượng khác nhau thì sẽ là những đối tượng khác nhau. Chẳng hạn, cùng thuộc về lớp ConNguoi, nhưng mỗi con người cụ thể sẽ có những tên, tuổi, đặc điểm không giống nhau.

    Xóa bỏ thuộc tính và đối tượng

    Ngoài việc đọc các giá trị, ghi các mới cho các trường của class hoặc gọi các hàm, phương thức của class, chúng ta có thể xóa các thuộc tính, các phương thức của một lớp, hoặc xóa một đối tượng của lớp. Để làm việc này, chúng ta sử dụng lệnh del theo sau là tên lớp và tên thuộc tính, phương thức:

    >>> class MyClass:
    ...   a = 5
    ...
    >>> foo = MyClass()
    >>> foo.a
    5
    >>> foo.a = 10 //gán giá trị 10 cho trường a của đối tượng foo
    >>> foo.a
    10
    >>> del foo.a //xóa giá trị trong trường a của đối tượng foo
    >>> foo.a
    5
    >>> del MyClass.a //xóa trường a của lớp MyClass
    >>> foo.a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'MyClass' object has no attribute 'a'

    Các phương thức method của class

    Một class ngoài các thuộc tính properties còn có các hàm, phương thức methods để thực hiện những công việc nào đó. Như trong lớp car ở đầu bài viết thì các phương thức chính là refuel(), getFuel(), setSpeed()

    Constructor Hàm __init__() trong Python

    Tất cả các lớp đều có một hàm được gọi là __init __ (), hàm này luôn được thực thi mỗi khi một đối tượng của lớp được khởi tạo. Chúng ta sử dụng hàm __init __ () để cung cấp các giá trị khởi tạo cho các thuộc tính hoặc các thao tác khác cần thực hiện khi đối tượng được tạo.

    Ví dụ sau, chúng ta tạo một lớp có tên Person, sử dụng hàm __init __ () để gán giá trị cho trường tên name và tuổi age:

    class Person:
      def __init__(self, name, age):
        self.name = name
        self.age = age
    p1 = Person("PHƯƠNG", 34)
    
    print(p1.name)
    print(p1.age)

    Self trong Python là gì?

    Các hàm function, phương thức method trong mỗi lớp khi khai báo thì đều có tham số self, tham số self là một tham chiếu đến thể hiện hiện tại của lớp. Khi gọi thì bạn không cần vì Python sẽ tự động truyền instance vào biến self đó. Như trong ví dụ sau, biến p1 khi được gọi hàm sayHeloo thì self sẽ được tham chiếu đến chính biến p1.

    class Person:
      def __init__(self, name, age):
        self.name = name
        self.age = age
    
      def sayHeloo(self):
        print("Hello my name is " + self.name)
    
    p1 = Person("PHUONG", 34)
    p1.sayHeloo()

    Bạn hoàn toàn có thể sử dụng từ khác để thay thế từ self, chẳng hạn từ yours 🙂

    class Person:
      def __init__(yours, name, age):
        yours.name = name
        yours.age = age
    
      def sayHeloo(mine):
        print("Hello my name is " + mine.name)
    
    p1 = Person("PHUONG", 34)
    p1.sayHeloo()

    Static Methods

    Static Methods (phương thức tĩnh) trong Python cũng tương tự như các phương thức chúng ta gặp từ đầu bài viết đến giờ, sự khác biệt duy nhất là phương thức tĩnh được liên kết với một lớp chứ không phải các đối tượng của lớp đó. Nghĩa là bạn sẽ gọi đến static method bằng tên class chứ không phải bằng tên đối tượng.

    Điều này có nghĩa là một phương thức tĩnh có thể được gọi mà không cần đối tượng cho lớp đó. Điều này cũng có nghĩa là các phương thức tĩnh không thể sửa đổi trạng thái của một đối tượng vì chúng không bị ràng buộc với nó.

    Cách tạo phương thức tĩnh trong Python

    • Sử dụng hàm staticmethod() để biến một phương thức bình thường thành phương thức tĩnh;
    • Sử dụng từ khóa @staticmethod trước khi khai báo phương thức.

    Dưới đây là ví dụ về cách tạo phương thức tĩnh thứ nhất:

    class Calculator:
        def addNumbers(x, y):
            return x + y
    
    # create addNumbers static method
    Calculator.addNumbers = staticmethod(Calculator.addNumbers)
    
    print('Product:', Calculator.addNumbers(15, 110))

    hoặc cách thứ hai

    class Calculator:
        # create addNumbers static method
        @staticmethod
        def addNumbers(x, y):
            return x + y
    
    print('Product:', Calculator.addNumbers(15, 110))

    Trong bài viết tiếp theo, chúng ta sẽ lần lượt tìm hiểu các chủ đề khác về class trong Python như tính kế thừa, operator overloading, data encapsulation và private attributes… Mời các bạn đón xem.

  • 100 ĐỀ THI HỌC SINH GIỎI TIN HỌC – ĐỀ THI TIN HỌC TRẺ

    100 ĐỀ THI HỌC SINH GIỎI TIN HỌC – ĐỀ THI TIN HỌC TRẺ

    Bài 1: Viết chương trình nhập vào tọa độ tâm I(a;b) và bán kính r của một đường tròn (a, b, r là các số nguyên). Sau đó nhập vào một điểm A(x, y) bất kì và kiểm tra xem nó có thuộc đường tròn hay không?

    Bài 2: Viết chương trình tính tích xy (với x, y là hai số thực có độ lớn tùy ý).

    Bài 3: Tìm tất cả các chữ số có ba chữ số, sao cho tổng các lập phương của các chữ số thì bằng chính số đó.

    Bài 4: Nhập 3 loại tiền và số tiền cần đổi. Hãy tìm tất cả các tổ hợp có được của 3 loại tiền trên cho số tiền vừa nhập.

    Bài 5: Viết chương trình giải bài toán cổ sau:

    Trăm trâu trăm cỏ
    Trâu đứng ăn năm
    Trâu nằm ăn ba
    Trâu già ba con một bó.

    Hỏi có bao nhiêu con mỗi loại?

    Bài 6: Lập tam giác PASCAL, dùng chương trình con.

    Bài 7: Viết các chương trình con  tính diện tích tam giác, tròn, vuông, chữ nhật trong một chương trình. Sau  đó hỏi chọn  một trong các phương án  tính diện  tích bằng  cách chọn trong bảng chọn lệnh sau:

    1. Không làm gì hết và trở về màn hình soạn thảo.
    2. Tính diện tích hình vuông
    3. Tính diện tích hình tròn
    4. Tính diện tích tam giác
    5. Tính diện tích hình chữ nhật

    Bài 8: Viết chương trình nhập vào một dãy số nguyên   có n phần tử. In ra màn hình phần tử nhỏ nhất, phần tử lớn nhất và giá trị trung bình của danh sách ra màn hình.

    Bài 9: Viết chương trình nhập vào một dãy số nguyên  có n phần tử.

    1. Đưa những phần tử lẻ ra đầu danh sách, những phần tử chẵn về cuối danh sách và in kết quả ra màn hình.
    2. Sắp xếp các phần tử lẻ đầu danh sách theo thứ tứ tăng dần, sắp xếp các phần tử chẵn cuối danh sách theo thứ tự giảm dần. In danh sách ra màn hình.

    Bài 10: Viết chương trình nhập vào một chuỗi kí tự, sau đó nhập vào một kí tự bất kì và đếm số lần của nó trong chuỗi đã nhập.

    Bài 11: Viết chương trình nhập vào một chuỗi ký tự. Kiểm tra xem nó có đối xứng hay không (Ví dụ: Chuỗi đối xứng RADAR, MADAM).

    Bài 12: Viết chương trình nhập vào họ tên của một người. Sau đó in chuỗi họ tên ra màn hình với các ký tự đầu đổi thành chữ hoa, toàn bộ chuỗi họ và tên đổi thành chữ hoa.

    Bài 13: Viết chương trình nhập vào một dãy số nguyên  có n phần tử.

    1. Sắp xếp dãy theo thứ tự tăng dần và in kết quả ra màn hình.
    2. Nhập vào một số x bất kì, đếm số lần xuất hiện của nó trong dãy trên.
    3. In ra màn hình số phần tử nhỏ hơn hoặc bằng x.
    4. In ra màn hình số phần tử lớn hơn x.

    Bài 14: Sử dụng lệnh lặp để tính tổng của 11 số hạng đầu tiên

    S = 100 + 105 + 110  +...

    Bài 15:  Tìm số P, biết rằng

    P/4 = 1 - 1/3   + 1/5 - 1/7  +...

    Với độ chính xác: |1/2n-1| < 10^-5

    Bài 16: Cho một dãy số nguyên A(i) với i=1,...N. Viết chương trình:

    1. Tính và in ra trung bình cộng cuả các số dương trong dãy.
    2. Đếm xem có bao nhiêu số chia hết cho 3.
    3. In ra vị trí các số bằng 0 (nếu có) trong dãy đã cho.

    Bài 17:  Viết chương trình tìm các số có 3 chữ số mà tổng lập phương các chữ số của nó bằng chính nó (các số Amstrong).

    Bài 18:  Nhập một số thực x rồi tính

    S = 1 + x/1! + x^2/2! + x^3/3! +...+ x^n/n!

    với độ chính xác | x^n/n! | < 10^-5.

    Bài 19:  Dãy Fibonaxi được định nghĩa như sau:

    A1=A2=1, An=A(n-1) + A(n-2) với n>=2.

    Hãy:

    1. Nhập một số n và in ra n số Fibonaxi đầu tiên.
    2. Nhập một số n và in ra các số Fibonaxi nhỏ hơn hoặc bằng n.

    Bài 20:  Cho một dãy số. Viết chương trình:

    1. Gom tất cả các số chia hết cho 7 về đầu dãy và tất cả các số chia hết cho 5 vể cuối dãy.
    2. Sắp xếp phần số đã gom theo thứ tự tăng dần.

    Bài 21:   Cho một dãy số. Hãy viết chương trình Tìm phần tử nhỏ nhất và phần tử nhỏ thứ hai. Hãy cho biết vị trí đầu tiên của phần tử lớn nhất.

    Bài 22: Cho một dãy ký tự. Hãy viết chương trình tách dãy trên thành hai nửa, nửa đầu gồm các số, nửa sau là các chữ cái. Sắp xếp nửa đầu giảm dần, nửa sau tăng dần.

    Bài 23: Xét dãy các xâu F1, F2,... Fn trong đó:

    F1 = 'A'; F2 = 'B'; Fk+1 = Fk + F(k-1) với k=>2

    Ví dụ:

    F1 = 'A'
    F2 = 'B'
    F3 = 'BA'
    F4 = 'BAB'
    F5 = 'BABBA'
    F6 = 'BABBABAB'...

    Cho xâu S độ dài không quá 25, chỉ bao gồm các kí tự 'A''B'. Yêu cầu:

    1. Hãy xác định số lần xuất hiện xâu S trong xâu Fn, n<=35. Chú ý: Hai lần xuất hiện của S trong Fn không nhất thiết phải là các xâu rời nhau hoàn toàn.
    2. Dữ liệu vào: Đọc từ file văn bản FIBISTR.INP có cấu trúc như sau: Gồm nhiều dòng, mỗi dòng gồm nS. Giữa nS có đúng 1 dấu cách. Dữ liệu vào là chuẩn, không cần kiểm tra.
    3. Dữ liệu ra: Ghi ra file văn bản FIBISTR.OUT có cấu trúc như sau: Gồm nhiều dòng, mỗi dòng dữ liệu ứng với một dòng kết quả ra.

    Bài 24: SỐ PHẢN NGUYÊN TỐ. Một số tự nhiên n được gọi là số phản nguyên tố nếu nó có nhiều ước số nhất trong n số tự nhiên đầu tiên.

    Yêu cầu: Cho số K không vượt quá 10000. Ghi ra số phản nguyên tố lớn nhất nhỏ hơn hoặc bằng K.

    Dữ liệu vào: Đọc từ file văn bản OPNT.INP có cấu trúc như sau:

    • Dòng đầu tiên là số M (1<M<=100) là số lượng các số cần tìm số phản nguyên tố lớn nhất của nó.
    • M dòng tiếp theo là các số K1,K2,..KM

    Dữ liệu ra: Ghi ra file văn bản SOPNT.OUT có cấu trúc như sau:

    • Gồm M dòng.
    • Dòng thứ i (1<=i<=M) là số phản nguyên tố lớn nhất nhỏ hơn hoặc bằng Ki.

    Bài 25: Ngồi nhà quá rỗi, Sơn có ý tưởng dùng các que diêm tạo thành các số hập phân. Một cách đại diện cho 10 chữ số thập phân như sau:

    ĐỀ THI HỌC SINH GIỎI TIN HỌC - ĐỀ THI TIN HỌC TRẺ

    Cho N que diêm, Sơn có thể tạo ra một loạt các chữ số. Sơn kinh gạc phát hiện ra số nhỏ nhất và lớn nhất trong số đó có thể tạo được bằng cách sử dụng tất cả các que diêm của Sơn.

    Yêu cầu: Xác định số nhỏ nhất và lớn nhất mà Sơn có thể tạo ra.

    Dữ liệu vào: Đọc từ file văn bản MATCH.INP có cấu trúc như sau:

    • Dòng đầu tiên là số test K (1<K<=100)
    • K dòng tiếp theo, mỗi test gồm một dòng chứa số nguyên n (2<=n<=100) là số que diêm

    Bài 26: Dãy số được gọi là dãy số đối xứng nếu đọc các phần tử của dãy số này từ trái sang phải hay đọc ngược lại đều được cùng kết quả. Ví dụ: 1, 2, 1 hoặc 1, 2, 2, 1 là các dãy số đối xứng.

    Dãy số P được gọi là dãy số con của dãy số A nếu các phần tử thuộc P có mặt liên tiếp trong dãy số A với thứ tự không đổi. Ví dụ: 2, 1, 3 là dãy số con của 1, 2, 2, 1, 3.

    Cho dãy số tự nhiên A gồm n phần tử a1, a2, a3…an (ai <35000, 5<n<100)

    Yêu cầu: Hãy viết phương trình tìm dãy số P là dãy số con đối xứng dài nhất của dãy số A.

    Dữ liệu vào: Nhập vào số tự nhiên n và n phần tử của dãy số A.

    Kết quả: Xuất ra màn hình kết quả vừa tìm được

    Ví dụ:

    Dữ liệu vào: (nhập từ bàn phím)

    N=5   1 2 2 1

    Kết quả: (xuất ra màn hình)

    A: 1 2 2 1 2

    Bài 27:   Xâu s1 có độ dài m và s2 có độ dài n ( m,n là hai số tự nhiên; n,m<250). Biết rằng s1,s2 chỉ chứa các kí tự ‘A’…’Z’.

    Yêu cầu: Hãy viết phương trình tìm xâu con chung dài nhất của xâu s1 và s2.

    Dữ liệu vào: Nhập từ bàn phím 2 xâu s1 và s2.

    Kết quả: Xuất ra màn hình xâu con chung của 2 xâ s1 và s2.

    Ví dụ:

    Dữ liệu vào: kết quả: ABBA

    S1:ABBABC

    S2:ABABBA

    Bài 28: Cho xâu S có độ dài N (N<100). Xâu S chỉ chứa các k‎ tự số ‘0’…’9’.

    Yêu cầu: Hãy viết chương trình tìm xâu S1 bằng cách hoán vị các k‎ tự số trong xâu S sao cho xâu S1 có giá trị nhỏ nhất lớn hơn S.

    Đữ liệu vào: Cho trong tệp tin so.inp, gồm 1 dòng ghi xâu S.

    Kết quả: Ghi trong tập tin so.out, gồm 1 dòng ghi kết quả vừa tìm được.

    Ví dụ:

    Dữ liệu vào: (So.inp)     Kết quả: (so.out)

    ‘1234’   ‘1324’

    Bài 29: Viết chương tìm ước số chung lớn nhất của hai số nguyên a và b khác 0, với a, b được nhập từ bàn phím.

    Bài 30:  Viết chương trình nhập vào một mảng gồm n phần tử (n<=100). Kiểm tra và in ra màn hình các số là số nguyên tố sắp xếp theo thứ tự tăng dần.

    Bài 31: Cho số tự nhiên N (N<=50). Hãy viết chương trình thực hiện:

    1. Nhập số N, sau đó nhập N số nguyên từ bàn phím. thứ tự của các số gọi là chỉ số.
    2. Hãy tính trong dãy số trên có bào nhiêu số dương chẵn.
    3. Tìm (các) chỉ số của giá trị âm lớn nhất của dãy số nếu có.
    4. Tìm tất cả các dãy con dài nhất các số khác không cùng dấu.

    Bài 32:  Nhập vào từ bàn phím một số N nguyên dương (N<=5000).

    1. Hãy phân tích N thành tổng của hai số nguyên tố (nếu được) và thông báo không được nếu không có phương án nào.
    2. Nếu N thoả mãn câu a, hãy đưa càng nhiều càng tốt các phương án phân tích (2 phương án có cùng các số hạng chỉ coi là một)

    Bài 33:  Cho trước một dãy số bao gồm toàn các số 0 và 1. Dãy này có độ dài nhỏ hơn 255.

    1. Viết chương trình nhập dãy số trên từ bàn phím. Các số được nhập liên tiếp từ bàn phím, quá trình nhập dữ liệu kết thúc nhấn phím <Enter>. Nếu việc nhập dữ liệu sai trên màn hình kết quả “Bạn đã nhập sai, đề nghị nhập lại” và cho phép nhập lại ngay dữ liệu.
    2. Một dãy con đúng của dãy trên được gọi là một dãy con liên tục bất kỳ của dãy trên bao gồm các số hạng giống nhau. Hãy tính độ dài lớn nhất của một dãy con đúng của dãy trên.
    3. Một dãy con đúng bậc 1 của dãy trên được coi là một dãy con liên tục bất kỳ của dãy trên bao gồm toàn các số hạng giống nhau ngoại trừ 1 phần tử. Hãy tính độ dài lớn nhất của một dãy con đúng bậc 1 của dãy trên.

    Bài 34:  Cho số nguyên N trong phạm vi từ 1000 đến 999999. Cần xác định số này có phải là thông tin về một ngày tháng có trong thế kỷ 21 không. (Thế kỷ 21 bắt đầu từ 1 tháng 1 năm 2001 và kết thúc vào ngày 31 tháng 12 năm 3000. Biết rằng 2  chữ số cuối của N là chỉ hai chữ số cuối của năm, các chữ số còn lại (ở đầu) xác định ngày và tháng.

    Ví dụ:

    1111       tương ứng với 1 tháng 1 năm 2011;

    21290     tương ứng với 2 tháng 12 năm 2090 hoặc 21 tháng 2 năm 2090;

    131192 tương ứng với 13 tháng 11 năm 2092;

    32392     Không phải là thông tin về một ngày tháng nào cả;

    311198 Không phải là thông tin về một ngày tháng nào cả;

    29205     Không phải là thông tin về một ngày tháng nào cả;

    Dữ liệu: Nhập vào số N từ bàn phím.

    Kết quả: Đưa ra màn hình các ngày tháng năm tương ứng với N hoặc thông báo là KHONG nếu N không phải là thông tin về một ngày tháng nào cả.

    Ví dụ:

    Giá trị của N Thông báo ra màn hình tương ứng
    1111

    21290

    29205

    1-1-2011

    2-12-2090 HOAC 21-2-2090

    KHONG

    Bài 35:    Cho dãy số nguyên a1, a2,…, an (n <= 1000).

    Hãy tìm cách thực hiện một số ít nhất phép đổi chỗ hai số hạng bất kỳ của dãy để thu được dãy số mà số lẻ đứng ở vị trí lẻ, số chẵn đứng ở vị trí chẵn.

    Dữ liệu: Vào từ file văn bản DAYSO.INP:

    • Dòng đầu tiên chứa số nguyên dương n;
    • Dòng thứ i trong số n dòng tiếp theo chứa số hạng ai của dãy đã cho (-32767 à 32767, i = 1, 2,…, n).

    Kết quả: ghi ra file văn bản DAYSO.OUT:

    • Dòng đầu tiên ghi số lượng phép đổi chỗ cần thực hiện k (qui ước k = -1, nếu không thể biến đổi được dãy đã cho thành dãy thoả mãn yêu cầu đầu bài);
    • Nếu k > 0, thì dòng thứ j trong số k dòng tiếp theo ghi chỉ số của hai số hạng cần đổi chỗ cho nhau ở lần đổi chỗ thứ j  ( j =1, 2,…, k).

    Ví dụ:

     DAYSO.INP DAYSO.OUT DAYSO.INP DAYSO.OUT
    6

    1

    2

    3

    4

    6

    5

    1

    5 6

    4

    1

    3

    2

    5

    -1

    Bài 36:  Một nhóm gồm n bạn học sinh của một lớp tham gia một câu lạc bộ tin học vào dịp nghỉ hè. Biết rằng khoảng thời gian mà bạn thứ i có mặt tại câu lạc bộ là [ai, bi] (ai<bi tương ứng là các thời điểm đến và rời khỏi câu lạc bộ). Cô giáo chủ nhiệm lớp muốn tới thăm các bạn trong nhóm này. Hãy giúp cô giáo chủ nhiệm xác định thời điểm đến câu lạc bộ sao cho tại thời điểm đó cô giáo có thể gặp được nhiều bạn trong nhóm nhất.

    Dữ liệu: Vào từ file văn bản MEETING.INP:

    • Dòng đầu tiên ghi số nguyên dương n (n <= 1000);
    • Dòng thứ i trong số n dòng tiếp theo ghi 2 số nguyên không âm ai, bi, i = 1, 2,…, n.

    Kết quả: Ghi ra file văn bản MEETING.OUT:

    • Dòng đầu tiên ghi số nguyên dương k là số lượng bạn đang có mặt ở câu lạc bộ tại thời điểm cô giáo đến;
    • Trong k dòng tiếp theo ghi chỉ số của k bạn có mặt ở câu lạc bộ tại thời điểm cô giáo đến, mỗi dòng ghi một chỉ số của một bạn.

    Ví dụ:

     MEETING.INP MEETING.OUT MEETING.INP MEETING.OUT
    6

    1  2

    2  3

    2  5

    5  7

    6  7

    9 11

    3

    1

    2

    3

    5

    1 2

    3 5

    7 9

    11 15

    17 21

    1

    1

    Bài 37:  Ứng với mỗi số tự nhiên x, ta có số tự nhiên f(x) bằng tổng bình phương các chữ số của x. Từ x ta xây dựng dãy (Xn) như sau:

    X1 = x ; X2 = f(X1) ; X3 = f(X2) ; …; Xi = f(Xi – 1)    với   1 <= I <= n

    Ví dụ:

    x = 12 ta có dãy: 12; 5; 25; 29; 85; 89; 145; 42; 20; 4; 16; 37; 58; 89

    x = 4 ta có dãy: 4; 16; 37; 58; 89; 145; 42; 20; 4

    Viết chương trình nhập vào từ bàn phím số tự nhiên x và in ra màn hình dãy (Xn)

    Dữ liệu vào: Số tự nhiên x.

    Dữ liệu ra: In ra màn hình dãy (Xn)

    Bài 38:  Tạo một dãy gồm n (3 < n < 20) số nguyên nhận các giá trị ngẫu nhiên từ 1 đến 99.  Xuất dãy  và xuất ra vị trí các số nguyên tố của dãy.

    Dữ liệu vào: Số nguyên n có giới hạn theo đề.

    Kết quả ra: Mảng a ngẫu nhiên và vị trí các số nguyên tố trong mảng.

    Ví dụ:

    Dữ liệu vào Dữ liệu ra
    19

     

    So phan tu cua mang: 19

    Mang a la:

    74 98 69 94  5 11 11 50 21 61 89 73 14 19 55 31 71 50  1

    Vi tri cac so nguyen to co trong a la:  5  6  7 10 11 12 14 16 17

    Lưu ý: số 1 không phải là số nguyên tố

    Bài 39:  Viết chương trình in ra màn hình các số từ x đến y là số chẵn và chia hết cho 3. với x, y nhập từ bàn phím? Đếm xem có tất cả bao nhiêu số?

    Dữ liệu vào: Số nguyên x và y (x < y).

    Kết quả ra: Các số chẵn chia hết cho 3 trong phạm vi từ x đến y và đếm có bao nhiêu số.

    Ví dụ:

    Dữ liệu vào Dữ liệu ra
    3

    40

    12  18  24  30  36

    Co tat ca: 6 so

    Các bài từ 40 đến 64 sau đây lấy từ 100 đề Toán Tin (Tin học &#038; Nhà trường)

    Bài 65: Bạn Huy không tập trung tư tưởng trong giờ toán vì vậy thầy giáo cho thêm bài tập về nhà rèn luyện khả năng tập trung tư tưởng và tính cẩn thận chu đáo. Nội dung bài tập là cho n xâu chỉ bao gồm các ký tự la tinh thường và chữ số. Đoạn các ký tự số liên tục tạo thành một số nguyên. Ở mỗi đoạn ký tự số liên tục Huy phải trích ra số lớn nhất có thể, sắp xếp các số nhận được từ các xâu đã cho và đưa ra theo thứ tự không giảm, mỗi số được đưa ra dưới dạng không có các số 0 không có nghĩa.

    Ví dụ, với n = 1 và xâu là 01a2b3456cde478 dãy số cần đưa ra là 1, 2, 478, 3456.

    Yêu cầu: Cho số nguyên n (1 ≤ n ≤ 100) và n xâu, mỗi xâu có độ dài không quá 100. Hãy đưa ra dãy số nhận được đã sắp xếp theo thứ tự không giảm, mỗi số trên một dòng.

    Dữ liệu: Vào từ file văn bản numbers.inp:

    Dòng đầu tiên chứa số nguyên n,

    Mỗi dòng trong n dòng sau chứa một xâu chỉ gồm các ký tự la tinh thường và số.

    Dữ liệu đảm bảo có không quá 500 số được tách ra.

    Kết quả: Đưa ra file văn bản NUMBERS.OUT dãy số nhận được đã sắp xếp theo thứ tự không giảm, mỗi số trên một dòng.

    Ví dụ:

    numbers.inp numbers.out
    4

    43silos0

    zita002

    le2sim

    231233

    0

    2

    2

    43

    231233

    Bài 66: Hãy viết chương trình đổi tờ giấy bạc có mệnh giá n (Việt Nam đồng) ra ba loại giấy bạc có mệnh giá 500, 200, 100 (Việt Nam đồng) sao cho số tờ gấy bạc phải sử dụng là ít nhất (n được nhập từ bàn phím).

    Bài 67: Tuổi của cha hiện nay là b tuổi, tuổi của con là c tuổi (b-c > 0 và b, c là các số nguyên dương). Hãy viết chương trình (với b, c được nhập từ bàn phím) để kiểm tra xem tuổi cha có gấp đôi tuổi con hay không? Nếu đúng thì đưa ra màn hình thông báo “hiện nay tuổi cha gấp đôi tuổi con”; trường hợp ngược lại, hãy tính số năm n (trước đó hoặc sau đó) tuổi cha gấp đôi tuổi con và đưa ra màn hình thông báo “n năm trước đây tuổi cha gấp đôi tuổi con” hay “sau n năm tuổi cha sẽ gấp đôi tuổi con”.

    Bài 68: Hàng tháng, các hộ dân sử dụng điện đều nhận được một hóa đơn thanh toán tiền điện. Giá tiền điện phải trả được tính như sau:

    • 100 số đầu tiên, mỗi số phải trả 550 đồng,
    • Từ số 101 đến số 150, mỗi số phải trả 1100 đồng,
    • Từ số 151 đến số 200, mỗi số phải trả 1470 đồng,
    • Từ số 201 trở đi, mỗi số phải trả 1600 đồng.

    Số tiền điện mà mỗi hộ dân phải trả ở hóa đơn là tổng số tiền điện mà người đó đã sử dụng với 10% thuế VAT.     Hãy viết chương trình tính số tiền điện mà người tiêu dùng phải trả trong tháng với a là số KW điện mà người tiêu dùng đã sử dụng và được nhập từ bàn phím.

    Bài 69: Nhập vào số tự nhiên n (0 < n < 10) và hai mảng số nguyên A, B có n phần tử đại diện cho hai tập hợp theo yêu cầu không có hai phần tử trùng nhau trong cùng một tập hợp. (Do đó, trong quá trình nhập nếu phần tử vừa nhập vào đã có trong mảng thì không bổ sung vào mảng). In ra màn hình tập hợp A, tập hợp B và các phần tử là giao của hai tập hợp A và B.

    Bài 70:

    1. Nhập một dãy số nguyên có n phần tử (0< n <= 100)
    2. Sắp xếp dãy vừa nhập theo thứ tự tăng dần, in ra màn hình dãy đã sắp thứ tự
    3. Tìm trên dãy đã sắp xếp có phần tử x hay không, với x được nhập từ bàn phím.

    Bài 71: Cho đa thức bậc n:

    A = anxn + an-1xn-1+…+ a1x + a0

    Trong đó an, an-1,…a1,a0 là các hệ số nguyên có giá trị tuyệt đối không quá 100.

    Biết rằng phương trình A = 0 nếu có nghiệm nguyên thì nghiệm nguyên đó chỉ có thể là ước số của hệ số a0.

    Yêu cầu: Hãy tìm tất cả các nghiệm nguyên (nếu có) của phương trình A = 0.

    Bài 72: Kỳ thi học sinh giỏi năm học 2008-2009 của tỉnh Bà Rịa-Vũng Tàu có 8 đội tuyển dự thi đến từ các huyện (TX, TP), số thứ tự các huyện được đánh số lần lượt từ 1 đến 8 là Vũng Tàu, Bà Rịa, Tân Thành, Châu Đức, Xuyên Mộc, Đất Đỏ, Long Điền, Côn Đảo. Mỗi thí sinh dự thi có một số báo danh duy nhất (là một số nguyên dương), mỗi đội tuyển của huyện tối đa 90 thí sinh. Sau khi thi xong Sở Giáo dục- Đào tạo tổ chức cho các thí sinh  giao lưu với nhau, Ban tổ chức sắp xếp các thí sinh đứng thành một vòng tròn, để tạo điều kiện cho các thí sinh trong tỉnh được giao lưu với nhau Ban tổ chức yêu cầu các thí sinh cùng huyện không đứng gần nhau, các thí sinh thuộc 2 huyện có số thứ tự liền kề cũng không được đứng gần nhau.

    Yêu cầu: Hãy giúp Ban tổ chức chỉ ra một cách xếp thỏa mãn yêu cầu trên

    Dữ liệu vào: file ‘pupil.inp’

    Gồm có 8 dòng, dòng thứ i chứa các số báo danh của các thí sinh huyện thứ i, các số báo danh cách nhau ít nhất một dấu cách.

    Dữ liệu ra: file ‘pupil.out’

    (Mô tả cách xếp n thí sinh theo yêu cầu trên một vòng tròn, ta có thể mô tả trên một đường thẳng, trong đó thí sinh đầu và thí sinh cuối đứng gần nhau trên vòng tròn)

    Gồm n dòng (n là tổng số thí sinh), mỗi dòng là số báo danh của thí sinh. Trong trường hợp không có cách nào thỏa mãn yêu cầu thì ghi là -1

    Ví dụ

    Pupil.inp Pupil.out
    1 2 3

    4 5 6

    7 8 9

    10 11 12

    13 14 15

    16 17 18

    19 20 21

    22 23

    1

    22

    16

    7

    17

    23

    2

    18

    8

    3

    9

    10

    4

    11

    5

    12

    6

    13

    19

    14

    20

    15

    21

    Bài 73: Nhập vào một số tự nhiên N với (0 < N ≤ 65535). Hãy cho biết chữ số lớn nhất của số tự nhiên vừa nhập. Hãy in đảo ngược số N.

    Ví dụ: N=6548. Chữ số lớn nhất là: 8. Số in ngược là: 8456.

    Bài 74: Nhập vào một số tự nhiên N với (0 < N ≤ 65535), phân tích số vừa nhập thành các thừa số nguyên tố, nếu số vừa nhập là số nguyên tố thì chỉ thông báo ra màn hình đây là số nguyên tố.

    Ví dụ:

    • Nếu số vừa nhập là 300, thì in ra màn hình 300 = 2. 2. 3. 5. 5
    • Nếu số vừa nhập là 307, thì in ra màn hình “307 là số nguyên tố”

    Bài 75: Tìm tất cả các số nguyên dương x, y, z  thỏa mãn phương trình: ax + by + cz = n; trong đó a, b, c, n là các số nguyên dương (a, b, c ≤ 65535; n ≤ 2.147.483.647)

    Yêu cầu kỹ thuật:

    1. Kiểm tra việc nhập dữ liệu thỏa mãn yêu cầu của đề bài. Nếu người sử dụng nhập sai thì thông báo nhập sai và hỏi người dùng có muốn nhập lại hay không, nếu không thì kết thúc chương trình.
    2. Không được dùng quá 2 vòng lặp lồng nhau và điều kiện dừng của mỗi vòng lặp không được vượt quá ngưỡng mà từ đó ta biết chắc chắn phương trình không có nghiệm.
    3. Nếu phương trình có nghiệm thì liệt kê có thứ tự các bộ nghiệm của phương trình theo dạng sau:

    Giả sử phương trình có dạng 15x + 28y + 24z = 454, ta in ra màn hình như sau:

    STT     x          y          x

    1          10        10        1

    2          14        7          2

    Ngược lại không thì thông báo phương trình không có nghiệm.

    Bài 76: Một số có tổng các ước nhỏ hơn nó bằng chính nó được gọi là số hoàn chỉnh.

    Ví dụ: 6 có các ước nhỏ hơn nó là 1, 2, 3. Tổng là 1 + 2 + 3 = 6.

    Viết chương trình xét xem một số n được nhập từ bàn phím có phải là số hoàn chỉnh không.

    Bài 77: Viết chương trình tìm các số hoàn chỉnh nhỏ hơn n (Với n được nhập từ bàn phím).

    Bài 78: Dãy Fibonacy có hai phần tử đầu là 1, 1. Các phần tử sau bằng tổng hai phần tử đứng ngay trước nó:

    1, 1, 2, 3, 5, 8, 13, 21,…

    Viết chương trình in ra dãy Fibonacy có phần tử lớn nhất nhỏ hơn n?

    Bài 79: Viết chương trình nhập n số, xoá số thứ k trong n số vừa nhập. In ra n-1 số còn lại.

    Bài 80: Viết chương trình cho phép nhập một dãy gồm n số nguyên. Nhập thêm một số và chèn thêm vào dãy sau phần tử k.

    Bài 81: Viết chương trình in ra màn hình tam giác Pascal. Ví dụ, với n=4 sẽ in ra hình sau:

    1          1
    
    1          2          1
    
    1          3          3          1
    
    1          4          6          4          1

    Hàng thứ n được xác định từ hàng n-1:

    • Phần tử đầu tiên và phần tử cuối cùng đều bằng 1.
    • Phần tử thứ 2 là tổng của phần tử thứ nhất và thứ 2 của hàng n-1
    • Phần tử thứ k của hàng thứ n là tổng của phần tử thứ k-1 và k của hàng thứ n-1.

    Bài 82: Viết chương trình tính giai thừa của số n (Viết là n!). Với yêu cầu:

    • Nếu người dùng nhập số n < 0 thì yêu cầu nhập lại.
    • Sử dụng chương trình con để tính giai thừa của một số.

    Bài 83: Viết chương trình cho phép cộng hai phân số.

    Bài 84: Nhập vào một số nguyên dương n. Hãy in ra số nguyên tố nhỏ nhất lớn hơn n. VD: Nhập n = 10. Kết quả in ra số 11.

    Bài 85: Tìm các số tự nhiên nhỏ hơn hoặc bằng n mà sau khi làm phép phân tích ra thừa số nguyên tố có nhiều nhân tử nhất. Ví dụ n=9. Các số có nhiều nhân tử nhất sau khi làm phép phân tích là: 8 = 2.2.2

    Viết chương trình cho phép phân tích một số ra thừa số nguyên tố và ghi kết quả dưới dạng tích các lũy thừa. Ví dụ: 300 = 2^2.3.5^2

    Bài 86: Mọi số tự nhiên đều có thể viết được dưới dạng tổng của hai số nguyên tố. Viết chương trình thực hiện tách một số tự nhiên thành tổng của hai số nguyên tố.

    Bài 87: Hai số tự nhiên A, B được coi là hữu nghị nếu như số này bằng tổng các ước số của số kia và ngược lại. Lập trình tìm và in ra màn hình các cặp số hữu nghị trong phạm vi từ 1 đến 10000. (Lưu ý, số 1 được coi là ước số của mọi số còn mỗi số không được coi là ước số của chính nó).

    Bài 88: Cho dãy số gồm n số. Tìm dãy con lớn nhất các phần tử tăng (giảm) dần.

    Bài 89: Cho dãy số gồm n số. Tìm dãy con lớn nhất các phần tử có cùng dấu, (đan dấu).

    Bài 90: Cho dãy gồm n số. Tìm dãy con lớn nhất đơn điệu (liên tục tăng, giảm hoặc giảm, tăng).

    Bài 91:  Cho dãy số gồm n số nguyên. Tìm dãy con có tổng lớn nhất

    Hướng dẫn. Sử dụng kỹ thuật vét cạn các dãy con, dùng hàm tính tổng dãy con để kiểm tra.

    Bài 92: Gọi abcd là một số có 4 chữ số. Hãy lập chương trình tìm tất cả các số có 4 chữ số thỏa mãn biểu thức: abcd=(ab + cd)^2. Ví dụ 2025=(20 + 25)^2.

    Bài 93:  Viết chương trình cho nhập hai số tự nhiên Nk. Hãy cho biết chữ số thứ k tính từ trái sang phải trong số N là chữ số nào? Nếu k lớn hơn độ dài của N hoặc k bằng 0 thì thông báo không tìm được.

    Bài 94:  Một số được gọi là số bậc thang nếu biểu diễn thập phân của nó có nhiều hơn một chữ số đồng thời theo chiều từ trái qua phải, chữ số đứng sau không nhỏ hơn chữ số đứng trước. Viết chương trình in ra các số bậc thang trong đoạn [n1, n2] với n1, n2 được nhập từ bàn phím.

    Bài 95: Viết chương trình cho phép đổi một số từ cơ số 10 sang cơ số bất kỳ.

    Thuật toán:

    • Dùng mảng CS để lưu các chữ số.
    • Lặp khi n <> việc: Chia n cho s lấy phần dư. Lấy phần dư làm chỉ số để lấy và lưu chữ số. Gán n = n div s.

    Chú ý chữ số lấy sau sẽ nằm trước.

    Bài 96: Viết chương trình cho phép đổi một số từ cơ số bất kỳ sang cơ số 10.

    Bài 97: Năm 1973, nhà Toán học Neil Sloan đưa ra khái niệm độ bền của một số nguyên không âm N như sau:

    • Nếu N có một chữ số thì độ bền của N bằng 0.
    • Nếu N có từ hai chữ số trở lên thì độ bền của N bằng độ bền của số nguyên là tích các chữ số của N cộng 1.

    Cho N từ 0  đến 2.000.000.000, tìm số bé hơn N có độ bền lớn nhất.

    Ví dụ

    Persist.inp Persist.out Giải thích
    100 77 Doben(77)=Doben(49)+1=Doben(36)+1+1=Doben(18)+1+1+1=Doben(8)+1+1+1+1=0+1+1+1+1=4

    Hướng dẫn.

    • Để tìm độ bền một số cần một hàm TICH(n) tính tích các chữ số của n.
    • Cho d = 0. Lặp lại điều kiện n >9 việc tăng d lên 1 thay n = TICH(n).
  • 100+ Bài tập Python cơ bản có lời giải

    100+ Bài tập Python cơ bản có lời giải

    Mời bạn xem phiên bản đầy đủ tại đây https://divin.dev/python/2022/03/14/20-bai-tap-python.html

    Mời bạn xem thêm Bài tập Python cơ bản lớp 10 được chia theo từng chủ đề.

    Bài tập Python cơ bản

    Bài 1. In toàn bộ các số chẵn từ 1000 đến 2000.

    even_numbers=[]
    
    for i in range(1000, 2001):
        if (i%2=0):
            even_numbers.append(str(i))
    print (','.join(even_numbers))

    Bài 2. Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 20003200 (tính cả 20003200). Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy.

    j=[] for i in range(2000, 3201):
      if (i%7==0) and (i%5!=0):
        j.append(str(i))
    print (','.join(j))

    Nếu chỉ cần in ra màn hình kết quả, chúng ta có thể không cần sử dụng List.

    for i in range(2000, 3201):
        if (i % 7 == 0) and (i % 5 != 0):
            print(i, end=' ')

    Bài 3. Viết một chương trình có thể tính giai thừa của một số cho trước. Kết quả được in thành chuỗi trên một dòng, phân tách bởi dấu phẩy. Ví dụ, số cho trước là 8 thì kết quả đầu ra phải là 40320.

    n = int(input("Nhập số cần tính giai thừa:")) 
    def fact(n):
        if n==0:
            return 1
        else:
            return n*fact(n-1)
    print(fact(n))

    Nếu chỉ sử dụng vòng lặp, không sử dụng hàm và lời gọi đệ quy, ta có thể làm như sau:

    n = int(input('Enter a number '))
    factorial = 1
    for i in range(1,n+1):
        factorial *= i
    print(factorial)

    Bài 4. Với số nguyên n nhất định, hãy viết chương trình để tạo ra một dictionary chứa (i, i*i) như là số nguyên từ 1 đến n (bao gồm cả 1n) sau đó in ra dictionary này. Ví dụ: Giả sử số n8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}.

    n = int(input('Enter a number '))
    d = dict()
    for i in range(1, n+1):
        d[i] = i*i
    print(d)

    Bài 5. Viết chương trình chấp nhận một chuỗi số, phân tách bằng dấu phẩy từ giao diện điều khiển, tạo ra một List  và một tuple chứa mọi số.

    Ví dụ: Đầu vào được cung cấp là 34,67,55,33,12,98 thì đầu ra là:

    ['34', '67', '55', '33', '12', '98']
    ('34', '67', '55', '33', '12', '98')

    Chương trình này chỉ đơn giản là sử dụng hàm split() và chuyển một List sang một tuple.

    values=input("Nhập vào các giá trị:") 
    l=values.split(",") 
    t=tuple(l) 
    print (l) 
    print (t)

    Bài 6. Viết một hàm tính giá trị bình phương của một số.

    # square of a number
    x = int(input("Enter a number: "))
    def square(x):
        return x * x

    Bài 7. Viết chương trình tính số Fibonacci thứ n, với n nhập vào từ bàn phím.

    # find fibonacci number
    n = int(input("Enter a number: "))
    def fibonacci(n):
        if n == 0:
            return 0
        elif n == 1:
            return 1
        else:
            return fibonacci(n-1) + fibonacci(n-2)

    Bài 8. Viết một chương trình nhập vào một danh sách các số và tạo một danh sách mới chỉ gồm phần tử đầu tiên và cuối cùng của danh sách đó. Viết chương trình sử dụng hàm.

    Ví dụ, nhập vào danh sách [5, 10, 15, 20, 25] thì kết quả trả về là danh sách [5, 25]

    def list_ends(a_list):
        return [a_list[0], a_list[len(a_list)-1]]

    Bài 9. Viết một hàm nhận vào ba số thực và trả về số lớn nhất trong ba số. Lưu ý, không sử dụng hàm max() của Python.

    # max of three numbers
    def max_of_three(a, b, c):
        if a > b:
            if a > c:
                return a
            else:
                return c
        else:
            if b > c:
                return b
            else:
                return c

    Bài 10. Viết chương trình yêu cầu người dùng nhập vào một chuỗi và in ra màn hình thông báo chuỗi đó có phải là chuỗi palindrome hay không. (Chuỗi Palindrome là một chuỗi mà đọc xuôi và ngược đều như nhau, ví dụ ABCDCBA.)

    Cách giải thứ nhất, sử dụng cách đảo ngược xâu:

    wrd=input("Please enter a word")
    wrd=str(wrd)
    rvs=wrd[::-1]
    print(rvs)
    if wrd == rvs:
        print("This word is a palindrome")
    else:
        print("This word is not a palindrome")

    Cách thứ hai, sử dụng vòng lặp for

    def reverse(word):
       x = ''
       for i in range(len(word)):
          x += word[len(word)-1-i]
       return x
    
    word = input('give me a word:\n')
    x = reverse(word)
    if x == word:
       print('This is a Palindrome')
    else:
       print('This is NOT a Palindrome')

    Bài 11. Viết chương trình hỏi người dùng một số tự nhiên n và in ra tất cả ước số của con số đó.

    n = int(input("Enter a number: "))
    for i in range(1, n + 1):
        if n % i == 0:
            print(i)

    Bài 12. Viết một chương trình (sử dụng các hàm) yêu cầu người dùng nhập một chuỗi dài gồm nhiều từ. In lại cho người dùng một chuỗi mới với thứ tự từ ngữ được đảo ngược lại với thứ tự ban đầu. Ví dụ, khi người dùng nhập chuỗi: Toi la Phuong thì in ra màn hình Phuong la Toi

    sentense = input("Enter a sentence: ")
    words = sentence.split()
    words.reverse()
    sentence = " ".join(words)
    print(sentence)

    Bài 13. Viết chương trình kiểm tra xem số n có là số nguyên tố hay không.

    # check prime number
    n = int(input("Enter a number: "))
    for i in range(2, n):
        if n % i == 0:
            print("Not a prime number")
            break
    else:
        print("Prime number")

    Bài 14. Viết một chương trình nhập vào hai số tự nhiên m, n. In ra màn hình mảng hai chiều mà phần tử trong hàng thứ i và cột thứ j của mảng là i*j.

    Ví dụ: Giá trị m, n nhập vào là 35 thì đầu ra là: [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]

    m, n = map(int, input('Enter two numbers: ').split())
    array2 = [[0 for i in range(n)] for j in range(m)]
    for row in range(m):
        for col in range(n):
            array2[row][col] = row * col
    print(array2)

    Bài 15. Viết một chương trình nhận chuỗi từ do người dùng nhập vào, phân tách nhau bởi dấu phẩy và in những từ đó thành chuỗi theo thứ tự bảng chữ cái, phân tách nhau bằng dấu phẩy.

    Giả sử đầu vào được nhập là: without,hello,bag,world thì đầu ra sẽ là bag,hello,without,world.

    items=[x for x in input("Nhập một chuỗi: ").split(',')]
    items.sort()
    print (','.join(items))

    Bài 16. Viết chương trình giải phương trình bậc hai $ax^2+bx+c=0$ với a, b, c là số nguyên và được nhập vào từ bàn phím.

    a, b, c = map(int, input('Nhập a, b, c cách nhau bằng dấu cách: ').split())
    if a == 0:
        if b == 0:
            if c == 0:
                print("Phương trình có vô số nghiệm")
            else:
                print("Phương trình vô nghiệm")
        else:
            print("Phương trình có một nghiệm x =", -c/b)
    else:
        delta = b**2 - 4*a*c
        if delta < 0:
            print("Phương trình vô nghiệm")
        elif delta == 0:
            print("Phương trình có nghiệm kép x1 = x2 =", -b/(2*a))
        else:
            print("Phương trình có 2 nghiệm phân biệt x1 =", (-b + delta**0.5)/(2*a), "và x2 =", (-b - delta**0.5)/(2*a))

    Bài 17. Viết chương trình tính tổng của các chữ số của môt số nguyên dương n trong Python. Số nguyên dương n được nhập từ bàn phím.

    def totalDigitsOfNumber(n):
        total = 0;
        while (n > 0):
            total = total + n % 10;
            n = int(n / 10);
        return total;
     
    n = int(input("Nhập số nguyên dương n = "));
    print("Tổng các chữ số của", n , "là", totalDigitsOfNumber(n));

    Bài 18. Viết chương trình sinh các xâu nhị phân có độ dài n.

    Xem lời giải tại đây Thuật toán sinh các dãy nhị phân có độ dài n

    Bài 19. Viết chương trình giải bài toán Bài toán Tháp Hà Nội (Tower of Hanoi)

    Bài 20. Viết chương trình phân tích số nguyên dương n thành thừa số nguyên tố.

    def phanTichSoNguyen(n):
        i = 2;
        listNumbers = [];
        # phân tích
        while (n > 1):
            if (n % i == 0):
                n = int(n / i);
                listNumbers.append(i);
            else:
                i = i + 1;
        # nếu listNumbers trống thì add n vào listNumbers
        if (len(listNumbers) == 0):
            listNumbers.append(n);
        return listNumbers;
     
    n = int(input("Nhập số nguyên dương n = "));
    
    listNumbers = phanTichSoNguyen(n);
    size = len(listNumbers);
    sb = "";
    for i in range(0, size - 1):
        sb = sb + str(listNumbers[i]) + " x ";
    sb = sb + str(listNumbers[size-1]);
    # in kết quả ra màn hình
    print("Kết quả:", n, "=", sb);

    Bài 21. Định nghĩa một class có ít nhất 2 method:

    • getString: để nhận một chuỗi do người dùng nhập vào từ giao diện điều khiển.
    • printString: in chuỗi vừa nhập sang chữ hoa.

    Thêm vào các hàm hiểm tra đơn giản để kiểm tra method của class.

    Ví dụ: Chuỗi nhập vào là o2.edu.vn thì đầu ra phải là O2.EDU.VN

    class InputOutString(object):
       def __init__(self):
           self.s = ""
    
       def getString(self):
           self.s = input("Nhập chuỗi:")
       def printString(self):
           print (self.s.upper())
    
    strObj = InputOutString()
    strObj.getString()
    strObj.printString()
    

    Bài 22. Viết chương trình Python tính tổng các phần tử của một danh sách.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    for i in range(0,n): print(a[i],' ',end='')
    print()
    
    tong=0
    for i in range(0,n):
        tong+=a[i]
    print('Tổng =',tong)
    

    Bài 23. Viết chương trình Python đếm số lượng các số hạng dương và tổng của các số hạng dương.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    dem=0
    tongd=0
    for i in range(0,n):
        if a[i]>0:
           dem+=1
           tongd+=a[i]
    print('Số hạng dương:',dem)
    print('Tổng số dương:',tongd)

    Hoặc có thể sử dụng hàm:

    def count_positive_numbers_and_sum(numbers):
        count = 0
        sum = 0
        for number in numbers:
            if number > 0:
                count += 1
                sum += number
        return count, sum
    
    # Sử dụng hàm trên với một danh sách các số nguyên bất kỳ
    numbers = [1, 2, 3, -4, -5, 6, 7, -8, 9]
    count, sum = count_positive_numbers_and_sum(numbers)
    
    print("Số lượng các số hạng dương là:", count)
    print("Tổng các số hạng dương là:", sum)
    

    Bài 24. Viết chương trình Python tính trung bình cộng của cả danh sách, trung bình cộng các phần tử dương trong danh sách.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    for i in range(0,n):tong+=a[i]
    print('Trung bình cộng của danh sách:',tong)
    dem=0
    tongd=0
    for i in range(0,n):
        if a[i]>0:
           dem+=1
           tongd+=a[i]
    print('Trung bình cộng các số dương:',tongd/dem)

    Bài 25. Viết chương trình Python tìm vị trí của phần tử âm đầu tiên trong danh sách.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    i=0
    while a[i]>=0:
        i+=1
        if i==n:
           break
    if i==n:
        print('Không có phần tử âm')
    else:
        print('Vị trí phần tử âm đầu tiên:',i+1)

    Bài 26. Viết chương trình Python tìm vị trí của phần tử dương cuối cùng trong danh sách.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    i=n-1
    while a[i]<=0:
       i-=1
       if i==-1:
          break
    if i==-1:
        print('Không có phần tử dương')
    else:
        print('Vị trí phần tử dương cuối cùng:',i+1)

    Bài 27. Viết chương trình Python tìm phần tử lớn nhất của danh sách và vị trí phần tử lớn nhất cuối cùng.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    max=a[0]
    vt=0
    for i in range(1,n-1):
        if a[i]>max:
            max=a[i]
            vt=i
    print('Số lớn nhất là',max,'tại vị trí',vt+1)

    Bài 28. Viết chương trình Python tìm phần tử lớn thứ nhì của danh sách và các vị trí của các phần tử đạt giá trị lớn nhì.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    B=a.copy()
    m=max(B)
    i=0
    while i<len(B):
        if B[i]==m:
            B.remove(B[i])
            i-=1
        i+=1
    if len(B)==0:
        print("Khong co so lon nhi")
    else:
        m=max(B)
        print("So lon nhi la",m,"tai vi tri",end=" ")
        for i in range(len(a)):
            if a[i]==m:
                print(i+1,end=", ")

    Bài 29. Viết chương trình Python tính số lượng các số dương liên tiếp nhiều nhất.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    d=len(a)
    i=0
    maxd=0
    while i<d:
        while a[i]<=0:
            i+=1
            if i==d:break
        if i<d:
            max1=0
            j=i
            while a[j]>0:
                max1+=1
                j+=1
                if j==d: break
            if max1>maxd: 
                maxd=max1
            i=j
        i+=1
    print('So duong lien tiep dai nhat =',maxd)

    Bài 30. Viết chương trình Python tính số lượng các số dương liên tiếp có tổng lớn nhất.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    d=len(a)
    i=0
    sumd=0
    while i<d:
        while a[i]<=0:
            i+=1
            if i==d:break
        if i<d:
            sum1=0
            j=i
            while a[j]>0:
                sum1+=a[j]
                j+=1
                if j==d: break
            if sum1>sumd: 
                sumd=sum1
            i=j
        i+=1
    print('Tong so duong lien tiep dai nhat =',sumd)
    

    Bài 31. Viết chương trình Python tính số lượng các phần tử liên tiếp đan dấu nhiều nhất (dãy phần tử liên tiếp được gọi là đan dấu nếu tích hai phần tử liên tiếp âm).

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    d=len(a)
    i=0
    maxdd=0
    for i in range(d-1):
        max1=0
        while a[i]*a[i+1]<0:
            max1+=1
            i+=1
            if i==d-1:break
        if max1>maxdd: maxdd=max1
    if maxdd>0: maxdd+=1
    print('Day so dan dau dai nhat =',maxdd)

    Bài 32. Viết chương trình Python tính số lượng các phần tử không tăng nhiều nhất.

    Bài 33. Viết chương trình Python tìm vị trí bắt đầu đoạn con dương liên tiếp có nhiều phần tử nhất.

    Bài 34. Viết chương trình Python tìm đoạn con có các số hạng dương liên tiếp có tổng lớn nhất. (Nếu có nhiều đoạn con thoả mãn thì đưa ra màn hình: Số đoạn con thoả mãn và các đoạn con đó).

    Bài 35. Viết chương trình Python đếm số lượng các phần tử bằng giá trị x nhập từ bàn phím.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    x=float(input('Nhập 1 số từ bàn phím: '))
    dem=0
    for i in range(0,n):
        if a[i]==x:
            dem=dem+1
    print('Số lượng phần tử bằng',x,':',dem)

    Bài 36. Viết chương trình Python chuyển các phần tử dương của danh sách lên đầu danh sách và in danh sách ra màn hình.

    Bài 37. Viết chương trình Python tìm số phần tử là dương và là số nguyên tố của danh sách và vị trí của nó trong danh sách.

    Bài 38. Viết chương trình Python chèn một số m (m nhập vào từ bàn phím ) vào đầu danh sách, cuối danh sách và vị trí thứ 5 của danh sách.

    Bài 39. Viết chương trình Python chèn danh sách [1,2,3] vào vị trí đầu, cuối và thứ 5 của danh sách.

    Bài 40. Viết chương trình Python xóa phần tử thứ k (k nhập từ bàn phím) trong danh sách.

    Bài 41. Viết chương trình Python sắp xếp danh sách theo thứ tự tăng dần, giảm dần.

    n=10
    a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8]
    
    x=float(input('Nhập 1 số từ bàn phím: '))
    dem=0
    for i in range(0,n):
        if a[i]==x:
            dem=dem+1
    print('Số lượng phần tử bằng',x,':',dem)
    #--------------------------------------------------------
    # Bài 41. Sắp xếp danh sách tăng dần, giảm dần
    #Sắp xếp danh sách tăng
    for i in range(0,n-1):
       for j in range(i+1,n):
          if a[i]>a[j]:
             t=a[i]
             a[i]=a[j]
             a[j]=t
    print('Danh sách đã sắp xếp tăng:')
    print(a)
    #Sắp xếp danh sách giảm
    for i in range(0,n-1):
       for j in range(i+1,n):
          if a[i]<a[j]:
             t=a[i]
             a[i]=a[j]
             a[j]=t
    print('Danh sách đã sắp xếp giảm:')
    print(a)
    

    (Còn tiếp)

  • Sàng số nguyên tố (Sàng Eratosthenes)

    Sàng số nguyên tố (Sàng Eratosthenes)

    Sàng số nguyên tố (Sàng Eratosthenes)

    Bài toán liệt kê các số nguyên tố nhỏ hơn số n cho trước là một bài toán quan trọng trong Toán học và Tin học.

    Phương pháp đơn giản nhất là chúng ta duyệt qua các số tự nhiên nhỏ hơn n, và lần lượt kiểm tra tính nguyên tố của từng số này. Tuy nhiên, việc kiểm tra tính nguyên tố của một số tự nhiên n có độ phức tạp là $O(\sqrt{n})$, do đó duyệt qua n số này sẽ có độ phức tạp $O(\sqrt{1}+\sqrt{2}+\sqrt{3}+…+\sqrt{n})$.

    Cách làm dưới đây sẽ giúp giảm độ phức tạp của chương trình đi rất nhiều.

    Sàng Eratosthenes là gì?

    Sàng Eratosthenes là một thuật giải toán cổ xưa để tìm các số nguyên tố nhỏ hơn 100. Thuật toán này do nhà toán học cổ Hy Lạp là Eratosthenes (Ơ-ra-tô-xten) “phát minh” ra.

    Ban đầu, nhà toán học Eratosthenes sau khi tìm ra thuật toán, đã lấy lá cọ và ghi tất cả các số từ 2 cho đến 100. Ông đã chọc thủng các hợp số và giữ nguyên các số nguyên tố. Bảng số nguyên tố còn lại trông rất giống một cái sàng. Do đó, nó có tên là sàng Eratosthenes.

    Bạn có thể xem trong hình dưới đây, các số tô màu giống nhau là bội của nhau số cùng màu nhưng được tô đậm hơn.

    sàng số nguyên tố Sàng Eratosthenes

    Thuật toán sàng số nguyên tố

    Để tìm các số nguyên tố nhỏ hơn hoặc bằng số tự nhiên N bằng sàng Eratosthenes, ta làm như sau:

    • Bước 1: Tạo 1 danh sách (List trong Python, Dart hoặc array trong C)các số tự nhiên liên tiếp từ 2 đến n: [2, 3, 4,..., n].
    • Bước 2: Giả sử tất cả các số trong danh sách đều là số nguyên tố. Trong đó, p = 2 là số nguyên tố đầu tiên.
    • Bước 3: Tất cả các bội số của p: 2p, 3p, 4p,… sẽ bị đánh dấu vì không phải là số nguyên tố.
    • Bước 4: Tìm các số còn lại trong danh sách mà chưa bị đánh dấu và phải lớn hơn p và nhỏ hơn hoặc bằng căn bậc 2 của n . Nếu không còn số nào, dừng tìm kiếm. Ngược lại, gán cho p giá trị bằng số nguyên tố tiếp theo và quay lại bước 3.

    Khi giải thuật kết thúc, tất các số chưa bị đánh dấu trong danh sách là các số nguyên tố cần tìm.

    Thay vì phải đánh dấu, chúng ta có thể xóa phần tử không là số nguyên tố của danh sách thì cuối cùng sẽ còn lại là các số nguyên tố.

    Mời bạn tham khảo mã nguồn chương trình bằng Python:

    def SieveOfEratosthenes(n):
       
       # Create a boolean array "prime[0..n]" and initialize
       # all entries it as true. A value in prime[i] will
       # finally be false if i is Not a prime, else true.
       prime = [True for i in range(n + 1)]
       p = 2
       while (p * p <= n):
          
          # If prime[p] is not changed, then it is a prime
          if (prime[p] == True):
             
             # Update all multiples of p
             for i in range(p ** 2, n + 1, p):
                prime[i] = False
          p += 1
       prime[0]= False
       prime[1]= False
       # Print all prime numbers
       for p in range(n + 1):
          if prime[p]:
             print(p)
    if __name__=='__main__':
       n = 30
       print("Following are the prime numbers smaller than or equal to", n)
       SieveOfEratosthenes(n)
    
  • Thuật toán kiểm tra Số Nguyên Tố

    Thuật toán kiểm tra Số Nguyên Tố

    Thuật toán kiểm tra Số Nguyên Tố

    Thuật toán kiểm tra Số Nguyên Tố của một số nguyên dương, cùng với thuật toán tìm UCLN của hai số tự nhiên là những bài toán quan trọng trong Lập trình.

    Kiểm tra tính nguyên tố là bài toán kiểm tra xem một số tự nhiên n có phải là số nguyên tố hay không. Bài toán này đặc biệt trở nên quan trọng khi các hệ mật mã khoá công khai ra đời.

    1. Số nguyên tố là gì?

    Số nguyên tố (prime) là số tự nhiên lớn hơn 1, chỉ có hai ước số là 1 và chính nó. Theo định nghĩa này thì các số 2, 3, 5, 7, 11,… là các số nguyên tố, trong đó số 2 là số nguyên tố chẵn duy nhất.

    số nguyên tố là gì

    Ví dụ: 7 là số nguyên tố vì trong khoảng từ 2 đến 6 không tồn tại số nào mà 7 chia hết cả.

    2. Các Thuật toán kiểm tra Số Nguyên Tố Đơn Giản

    Phương pháp đơn giản nhất để kiểm tra một số n có là số nguyên tố không là kiểm tra xem nó có chia hết cho các số m nằm trong khoảng 2 đến n-1 hay không.

    Nếu n chia hết cho một trong các số m nào đó thì n không là số nguyên tố (còn được gọi là hợp số composite). Ngược lại, nếu n không chia hết cho bất kì số m nào thì kết lianaj n là số nguyên tố.

    Thực ra việc kiểm tra với m từ 2 đến n-1 là không cần thiết, mà chỉ cần kiểm tra đến $\sqrt{n}$ là đủ. Vì nếu n là hợp số thì nó chắc chắn có ước số không vượt quá sqrt(n).

    Lặp từng phần tử với bước nhảy 1 đến n-1

    Giả sử cần kiểm tra số n có phải là số nguyên tố hay không thì các bước thực hiện như sau:

    • Bước 1: Nhập vào n
    • Bước 2: Kiểm tra nếu n < 2 thì kết luận n không phải là số nguyên tố
    • Bước 3: Lặp từ 2 tới (n-1), nếu trong khoảng này tồn tại số mà n chia hết thì kết luận n không phải là số nguyên tố, ngược lại n là số nguyên tố.

    Độ phức tạp của thuật toán trên là $O(n)$.

    Lặp từng phần tử với bước nhảy 2

    Theo định nghĩa thì số 2 là số nguyên tố chẵn duy nhất, vì vậy ta sẽ loại 2 ra khỏi vòng lặp và trong thân vòng lặp chỉ kiểm tra các số lẻ mà thôi, cách này sẽ tối ưu hơn cách 1 rất nhiều.

    • Bước 1: Nhập vào n;
    • Bước 2: Kiểm tra nếu n < 2 thì kết luận n không phải là số nguyên tố;
    • Bước 3: Kiểm tra nếu n = 2 thì kết luận n là số nguyên tố;
    • Bước 4: Kiểm tra nếu n > 2 và chẵn thì kết luận n không phải là số nguyên tố;
    • Bước 5. Lặp từ 3 tới (n-1), bước nhảy là 2 nếu trong khoảng này tồn tại số mà n chia hết thì kết luận n không phải là số nguyên tố, ngược lại n là số nguyên tố.

    Lặp từng phần tử đến $\sqrt{n}$

    Để tối ưu hơn, thay vì lặp tới n-1, chúng ta chỉ cần lặp các số từ 2 đến sqrt(n), nếu n chia hết cho một trong những số đó thì n không phải là số nguyên tố. Ngược lại thì n là số nguyên tố.

    Độ phức tạp của thuật toán trên là $O(\sqrt{n})$.

    Xem mã nguồn viết bằng ngôn ngữ Dart tại đây https://divin.dev/dart/2021/10/14/bai-tap-dart-17.html

    3. Tối ưu thuật toán kiểm tra số nguyên tố

    Chúng ta có thể tối ưu thuật toán trên bằng cách chỉ ra n không chia hết cho những số nguyên tố nhỏ hơn nó. Tuy nhiên, chúng ta lại chưa biết được các số nguyên tố nhỏ hơn nó là những số nào (Bạn có thể sử dụng phương pháp sàng số nguyên tố – Sàng Eratosthenes để tìm ra các số nguyên tố nhỏ hơn số n cho trước). Nên ta sử dụng kết quả sau đây:

    Tất cả những số nguyên tố lớn hơn 3 đều có dạng 6k ± 1 (vì 6k, 6k ± 2, là những số chẵn; 6k + 3 thì chia hết cho 3).

    Do đó, chúng ta chỉ cần kiểm tra các số có dạng 6k ± 1 từ 2 đến √n, nếu n chia hết cho một trong những số đó thì n không phải là số nguyên tố. Ngược lại thì n là số nguyên tố.

    def is_prime(n: int) -> bool:
        """Primality test using 6k+-1 optimization."""
        if n <= 3:
            return n > 1
        if n % 2 == 0 or n % 3 == 0:
            return False
        i = 5
        while i ** 2 <= n:
            if n % i == 0 or n % (i + 2) == 0:
                return False
            i += 6
        return True

    4. Các Thuật toán kiểm tra Số Nguyên Tố Nâng Cao

    Các cách kiểm tra số nguyên tố kể trên có độ chính xác tuyệt đối nhưng khối lượng tính toán rất lớn. Theo Wiki thì chúng ta còn có những cách khác để kiểm tra tính nguyên tố của một số với một độ chính xác cho trước.

    Kiểm tra theo xác suất

    Các phép kiểm tra tính nguyên tố hay dùng nhất là các thuật toán ngẫu nhiên.

    Giả sử có một mệnh đề Q(p,a) nào đó đúng với mọi số nguyên tố p và một số tự nhiên a <= p. Nếu n là một số tự nhiên lẻ và mệnh đề Q(n,a) đúng với một a<= n được lấy ngẫu nhiên, khi đó a có khả năng là một số nguyên tố.

    Ta đưa ra một thuật toán, kết luận rằng n là số nguyên tố. Nó là một thuật toán ngẫu nhiên hay thuật toán xác suất. Trong các thuật toán loại này, dùng một kiểm tra ngẫu nhiên sẽ không bao giờ kết luận một số nguyên tố là hợp số nhưng lại có thể kết luận một hợp số là số nguyên tố. Do đó, phương pháp này không chính xác một cách tuyệt đối.

    Xác suất sai của phép kiểm tra có thể giảm xuống nhờ việc chọn một dãy độc lập các số a; nếu với mỗi số a xác suất để thuật toán kết luận một hợp số là số nguyên tố là nhỏ hơn một nửa thì sau k lần thử độc lập, xác suất sai là nhỏ hơn 2^k, độ tin cậy của thuật toán sẽ tăng lên theo k.

    Cấu trúc cơ bản của một phép kiểm tra ngẫu nhiên là:

    • Chọn một số ngẫu nhiên a.
    • Kiểm tra một hệ thức nào đó giữa số a và số n đã cho. Nếu hệ thức sai thì chắc chắn n là một hợp số (số a là “bằng chứng” chứng tỏ n là hợp số) và dừng thuật toán.
    • Nếu hệ thức đúng, chúng ta lặp lại hai bước trên cho đến khi đạt được một số lần định trước hoặc gặp trường hợp dừng thuật toán.

    Sau nhiều lần thử, nếu hệ thức đúng với nhiều giá trị của a, ta có thể nói rằng n “có khả năng cao” là số nguyên tố chứ không thể chắc chắn n là số nguyên tố. Tất nhiên là chúng ta sẽ tìm cách tăng “khả năng” này lên bằng cách thực hiện nhiều tính toán hơn.

    Các hệ thức thường sử dụng

    Nếu p là một số nguyên tố thì

    • 2p - 1 ≡ 1 (mod p) (đây là nội dung của định lí Fermat nhỏ)
    • fp + 1 ≡ 0 (mod p) (với fp + 1 là số Fibonacci thứ p + 1 và p có dạng 5k ± 2)
    • (p - 1)! ≡ -1 (mod p) khi và chỉ khi p nguyên tố. Đây là nội dung của định lí Wilson, nhưng việc tính toán biểu thức (n - 1)! % n sẽ có độ phức tạp lớn hơn log n.

    Các phép kiểm tra tính nguyên tố ngẫu nhiên là:

    • Phép kiểm tra tính nguyên tố của Fermat (kiểm tra Fermat). Đây là phép thử heuristic; tuy nhiên ít người sử dung phép thử này.
    • Kiểm tra Miller-Rabin và Kiểm tra Solovay-Strassen. Với mỗi hợp số n, ít nhất 3/4 (với kiểm tra Miller-Rabin) hoặc 1/2 (Với kiểm tra Solovay-Strassen) các số a là bằng chứng chứng tỏ n là hợp số).

    thuật toán kiểm tra số nguyên tố

    Các phép kiểm tra tất định

    Vào năm 2002, Manindra Agrawal, Nitin Saxena và Neeraj Kayal đề xuất một giải thuật tất định kiểm tra tính nguyên tố, là kiểm tra AKS, có khả năng chạy trong O((log n)12). Trên thực tế thuật toán này chạy chậm hơn các phương pháp xác suất.

    Các phương pháp này, mời bạn đọc tham khảo thêm tại https://en.wikipedia.org/wiki/Primality_test

     

  • 50 bài tập lập trình Dart cơ bản

    50 bài tập lập trình Dart cơ bản

    50 bài tập lập trình Dart cơ bản

    50 bài tập lập trình Dart cơ bản dưới đây được chúng tôi gợi ý giải bằng ngôn ngữ Dart. Tuy nhiên, bạn hoàn toàn có thể sử dụng Python, C, C#, C++, Java hoặc các ngôn ngữ lập trình khác để giải quyết. Do đó chúng tôi tổng hợp chung lại thành một bài viết. Phần lời giải, nếu có, của từng ngôn ngữ sẽ có bài viết riêng.

    Xem thêm: Giáo trình tự học Flutter/Dart

    Playlist dạy lập trình Dart:

    1. Bài tập lập trình Dart, C, Java cơ bản sử dụng if for while

    Các bài tập này sử dụng các câu lệnh điều kiện if, câu lệnh rẽ nhánh for, while (câu lệnh điều khiển luồng chương trình).

    Bài 1. Viết chương trình hỏi người dùng họ tên và tuổi (là một số nguyên). Tính và in ra màn hình còn bao nhiêu năm nữa thì người đó mừng thọ 100 tuổi 🙂

    Xem thêm: Cách đọc input từ người dùng tại https://www.youtube.com/watch?v=UH9Hs1wiIqM

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-1.html

    Bài 2. Viết chương trình hỏi người dùng nhập vào một số nguyên. In ra màn hình số nguyên đó là số chẵn hay lẻ.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-2.html

    Bài 3. In ra màn hình tất cả các số nguyên dương lẻ nhỏ hơn 100.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-3.html

    Bài 4. Viết chương trình in ra tất cả các số lẻ nhỏ hơn 100 trừ các số 5, 7, 93.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-4.html

    Bài 5. Viết chương trình tìm số lớn nhất trong ba số thực a, b, c.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-5.html

    Bài 6. Viết chương trình kiểm tra xem hai số thực a b cho trước có cùng dấu hay không.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-6.html

    Bài 7. Viết chương trình in ra cách đọc của một số nguyên n cho trước có ba chữ số. Ví dụ với n=123 thì kết quả in ra màn hình là Một trăm hai mươi ba.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-7.html

    Bài 8. Viết chương trình sinh ra một số tự nhiên n ngẫu nhiên từ 1 đến 100. Đề nghị người dùng đoán một số và nhập vào. In ra màn hình thông báo xem số người dùng đoán đúng, lớn hơn hay nhỏ hơn số n. Nếu chưa đúng thì cho phép người dùng đoán lại hai lần nữa.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-8.html

    Bài 9. Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 10200. Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-9.html

    Bài 10. Viết chương trình nhập ngày, tháng, năm. Hãy cho biết tháng đó có bao nhiêu ngày.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-10.html

    Bài 11. Viết chương trình nhập ngày, tháng, năm. Hãy cho biết ngày đó là thứ mấy.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-11.html

    Bài 12. Viết chương trình in bảng cửu chương ra màn hình.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-12.html

    Bài 13. Hãy sử dụng vòng lặp for để in tất cả các ký tự A tới Z ra màn hình.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-13.html

    Bài 14. Viết một chương trình tính giai thừa của một số nguyên dương n. Với n được nhập từ bàn phím. Ví dụ, n = 8 thì kết quả đầu ra phải là

    1*2*3*4*5*6*7*8 = 40320

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-14.html

    Bài 15. Viết chương trình tìm ước số chung lớn nhất (UCLN) của hai số nguyên dương ab nhập từ bàn phím.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-15.html

    Bài 16. Viết chương trình tìm bội số chung nhỏ nhất (BCNN) của hai số nguyên dương ab nhập từ bàn phím.

    Bài 17. Viết chương trình kiểm tra một số nguyên dương n có phải là số nguyên tố hay không.

    Lời giải: https://divin.dev/dart/2021/10/14/bai-tap-dart-17.html

    Bài 18. Viết chương trình liệt kê n số nguyên tố đầu tiên. Số nguyên dương n được nhập từ bàn phím.

    Hướng dẫn. Bạn có thể tham khảo về sàng số nguyên tố

    Bài 19. Tìm số nguyên dương n nhỏ nhất sao cho 1 + 2 + … + n > 10000.

    Lời giải: Bài tập Dart số 19

    Bài 20. Viết chương trình liệt kê n số hạng đầu tiên của dãy Fibonacci không sử dụng hàm.

    Hướng dẫn. Nếu sử dụng hàm và lời gọi đệ qui thì bài toán khá đơn giản, xin mời xem lời giải ở bài 54. Ở đây, chúng ta sẽ sử dụng ba biến để luôn phiên thay đổi các số hạng của dãy Fibonacci và một biến đếm. 

    Lời giải: Bài tập Dart số 20-Dãy Fibonacci

    Bài 21. Viết chương trình tính tổng các giá trị lẻ nguyên dương nhỏ hơn số nguyên dương n cho trước.

    Bài 22. Viết chương trình tìm số nguyên dương m lớn nhất sao cho 1 + 2 + 3 + … + m < N.

    Bài 23. Viết chương trình liệt kê tất cả số nguyên tố có 5 chữ số.

    Bài 24. Viết chương trình phân tích số nguyên n thành các thừa số nguyên tố. Ví dụ: 100 = 2*2*5*5.

    Bài 25. Viết chương trình tính tổng của các chữ số của môt số nguyên n trong Dart. Số nguyên dương n được nhập từ bàn phím. Với n = 1234, tổng các chữ số: 1 + 2 + 3 + 4 = 10.

    Bài 26. Viết chương trình kiểm tra một số nguyên dương n có là số thuận nghịch hay không.

    Bài 27. Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n. Số nguyên dương n được nhập từ bàn phím.

    Bài 28. Liệt kê tất cả ước số của số nguyên dương n.

    Bài 29. Tính tổng tất cả ước số của số nguyên dương n.

    Bài 30. Tính tích tất cả ước số của số nguyên dương n.

    Bài 31. Đếm số lượng ước số của số nguyên dương n.

    Bài 32. Liệt kê tất cả ước số lẻ của số nguyên dương n.

    Bài 33. Cho số nguyên dương n. Tính tổng các ước số nhỏ hơn chính nó.

    Bài 34. Tìm ước số lẻ lớn nhất của số nguyên dương n. Ví dụ n = 100 ước lẻ lớn nhất của 10025.

    Bài 35. Cho số nguyên dương n. Kiểm tra số dương n có phải là số hoàn thiện (số hoàn hảo) hay không.

    Bài 36. Cho số nguyên dương n. Kiểm tra số nguyên dương n có phải là số nguyên tố hay không.

    Bài 37. Cho số nguyên dương n. Kiểm tra số nguyên dương n có phải là sốchính phương hay không.

    Bài 38. Cho n là số nguyên dương. Hãy tìm giá trị nguyên dương k lớn nhất sao cho S(k) < n. Trong đó chuỗi S(k) được định nghĩa như sau:

    S(k) = 1 + 2 + 3 + … + k

    Bài 39. Hãy đếm số lượng chữ số của số nguyên dương n.

    Bài 40. Hãy tính tổng các chữ số của số nguyên dương n.

    Bài 41. Hãy tìm chữ số đảo ngược của số nguyên dương n.

    Bài 42. Tìm chữ số nhỏ nhất của số nguyên dương n.

    Bài 43. Hãy kiểm tra số nguyên dương n có toàn chữ số lẻ hay không.

    Bài 44. Hãy kiểm tra các chữ số của số nguyên dương n có tăng dần từ trái sang phải hay không.

    Bài 45. Hãy kiểm tra các chữ số của số nguyên dương n có giảm dần từ trái sang phải hay không.

    Bài 46. Giải phương trình bậc nhất ax+b=0.

    Bài 47. Giải phương trình bậc hai ax^2+bx+c=0.

    Bài 48. Giải phương trình trùng phương ax^4+bx^2+c=0.

    Bài 49. Viết chương trình nhập 3 cạnh của một tam giác là các số nguyên dương. Hãy cho biết đó là tam giác gì.

    Bài 50. Lập chương trình giải hệ: $$\begin{cases} ax+by=c\\ dx+ey=f \end{cases}$$ Các hệ số a b c d e f nhập từ bàn phím. Yêu cầu xét tất cả các trường hợp có thể. (Gợi ý: Sử dụng định thức)

    2. Bài tập lập trình Dart, C, Java cơ bản sử dụng hàm

    Bài 51. Cần có tổng 200.000đ từ 3 loại tiền 1000đ, 2000đ, và 5000đ. Lập chương tình để tìm tất cả các phương án có thể.Tìm giá trị lớn nhất trong mảng một chiều các số thực.

    Bài 52. Viết chương trình tính tổng các số tự nhiên từ 1 tới n.

    Bài 53. Viết chương trình tính giai thừa của số tự nhiên n.

    Bài 54. Viết hàm tính số hạng thứ n của dãy Fibonacci.

    Bài 55. Viết hàm kiểm tra xem số nguyên dương n có là số nguyên tố hay không.

    Bài 56. Viết hàm tìm UCLN của hai số nguyên ab sử dụng đệ quy.

  • 15 Cuốn sách học Python miễn phí

    15 Cuốn sách học Python miễn phí

    15 Cuốn sách học Python miễn phí

    0. Python qua các ví dụ và bài tập

    • Cuốn sách chúng tôi đang viết dở dang, nếu có thời gian sẽ hoàn thiện thêm.
    • Download: Lap_trinh_Python-o2.edu.vn

    1. Hướng dẫn lập trình Python

    • Phiên bản tiếng Việt của Python Guide.
    • Cuốn sách này khá cũ, sử dụng Python 2.x nên có đôi chút khác biệt so với các phiên bản Python 3.x hiện nay.
    • Xem chi tiết trong bài: Hướng dẫn lập trình Python – Python Guide

    2. Python Basics

    3. Think Python

    các cuốn sách học Python miễn phí

    • Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.
    • Tác giả: Allen Downey
    • Số trang: 244 | Năm xuất bản: 2015 | Ngôn ngữ: Tiếng Anh
    • Bạn có thể đọc online tại đây https://greenteapress.com/wp/think-python-2e/
    • Download PDF: thinkpython2

    4. Automate Boring Stuff With Python

    15 Cuốn sách học Python miễn phí 2

    • In Automate the Boring Stuff with Python, you’ll learn how to use Python to write programs that do in minutes what would take you hours to do by hand no prior programming experience required.
    • Tác giả: Al Sweigart
    • Số trang: 479 | Năm xuất bản: 2015 | Ngôn ngữ: Tiếng Anh
    • Bạn có thể đọc miễn phí tại đây: https://automatetheboringstuff.com/#toc

    5. A byte of Python

    • This is a free book on programming using the Python language. It serves as a tutorial or guide to the Python language for a beginner audience. If all you know about computers is how to save text files, then this is the book for you.
    • Tác giả: Swaroop C H
    • Số trang: 176 | Năm xuất bản: 2014 | Ngôn ngữ: Tiếng Anh
    • Đọc online tại đây:https://python.swaroopch.com/
    • Dowload PDF: byte-of-python

    6. Learn Python The Hard Way

    • This book instructs you in Python by slowly building and establishing skills through techniques like practice and memorization, then applying them to increasingly difficult problems. By the end of the book you will have the tools needed to begin learning more complex programming topics.
    • Tác giả: Zed A. Shaw
    • Số trang: 58 | Năm xuất bản: 2014 | Ngôn ngữ: Tiếng Anh

    7. Python Practice Book

    • This book is prepared from the training notes of Anand Chitipothu.
    • Tác giả: Anand Chitipothu
    • Số trang: 36 | Năm xuất bản: 2014 | Ngôn ngữ: Tiếng Anh

    8. Python for Everybody

    • Tác giả: Dr. Charles R. Severance
    • Số trang 247 | Ngôn ngữ: Anh, Tây Ban Nha, Bồ Đào Nha, Ý, Hy Lạp, Đức, Nga, Hàn, Trung.
    • Download: https://www.py4e.com/book
    • PDF: pythonlearn

    9. Python Cookbook

    • Author: By David Beazley and Brian K. Jones
    • Read Online: http://chimera.labs.oreilly.com/books/1230000000393
    • Giới thiệu: If you need help writing programs in Python 3 or want to update older Python 2 code, this free Python cookbook is just what the doctor ordered. This book is full of practical recipes written and tested with Python 3.3, this unique free book is for experienced Python programmers who want to focus on modern tools and idioms.
      You can also combine this book with the Introduction To Python Programming – a free Python course from Udemy which is trusted by more than 350,000 students already for better learning.

    10. Hadoop with Python

    • Author: Zachary Radtka and Donald Miner
    • Download: http://www.oreilly.com/programming/free/hadoop-with-python.csp
    • Giới thiệu: Hadoop is mostly written in Java, but that doesn’t exclude the use of other programming languages with this distributed storage and processing framework, particularly Python. Zachary Radtka and Donald Miner, author of the O’Reilly book MapReduce Design Patterns, takes you through the basic concepts behind Hadoop, MapReduce, Pig, and Spark. He is a, which is based on his experiences as a MapReduce developer.

    11. How to Make Mistakes in Python

    • Author: Mike Pirnat
    • Download: http://www.oreilly.com/programming/free/how-to-make-mistakes-in-python.csp
    • Description: Even the best programmers make mistakes, and experienced programmer Mike Pirnat has made his share during 15+ years with Python. Some have been simple and silly; others were embarrassing and downright costly. In this free Python eBook, he dissects some of his most memorable blunders, peeling them back layer-by-layer to reveal just what went wrong.

    12. Python in Education

    • Author: Nicholas Tollervey
    • Download: http://www.oreilly.com/programming/free/python-in-education.csp
    • Description: You’ve probably heard about the computing revolution in schools, and perhaps you’ve even heard of Raspberry Pi. The Python programming language is at the center of these fundamental changes in computing education. Whether you’re a programmer, teacher, student, or parent, this reports arms you with the facts and information you need to understand where Python sits within this context.

    13. Explore Flask

    • Explore Flask is a book about best practices and patterns for developing web applications with Flask.
    • Tác giả: Robert Picard
    • Số trang: 14 | Năm xuất bản: 2014 | Ngôn ngữ: Tiếng Anh

    14. Web2Py

    • Web2py is an open source python web development framework.
    • Tác giả: Massimo Di Pierro
    • Số trang: 614 | Năm xuất bản: 2013 | Ngôn ngữ: Tiếng Anh

    15. Python Data Science Handbook