Hướng dẫn use a loop to find the two largest values of 10 numbers entered python - sử dụng vòng lặp để tìm 2 giá trị lớn nhất trong 10 số đã nhập python

Bạn nên thay đổi chức năng của mình để lấy một danh sách và trả lại hai trong số đó lớn nhất. Và vì vậy, bạn nên chuyển sự sáng tạo của

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
2 ra chức năng của chính nó. Bạn cũng nên di chuyển việc in ra khỏi chức năng, và thay vào đó trả lại một danh sách hai lớn nhất. Điều này sẽ làm đổ mã của bạn để đạt được:

def getNumbers[]:
    numList = []
    num = 'holder'
    while num != '':
        num = input['Please enter a number: ']
        if num != '':
            numList.append[float[Decimal[num]]]
        else:
            break
    return numList

def twoLargest[numbers]:
    x=0
    y=0
    numbers.sort[reverse=True]
    for i in range[len[numbers]]:
        if numbers[i] > x:
            x = numbers[i]
        elif numbers[i] > y:
            y = numbers[i]

    if y > 0:
        return x, y
    if x > 0:
        return x,
    return [,]

if __name__ == '__main__':
    numbers = getNumbers[]
    largest = twoLargest[numbers]
    print[largest]

Tuy nhiên, bạn có thể cải thiện

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
3, thay vì kiểm tra để thoát khỏi vòng lặp hai lần, thay vào đó bạn có thể kiểm tra một lần. Điều này loại bỏ sự cần thiết của
def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
4 và có thể giảm số lượng dòng cần thiết.

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList

Tuy nhiên, nó có thể được đơn giản hóa hơn nữa bằng cách biến nó thành một hàm máy phát. Để làm điều này, bạn chỉ có thể

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
5 các giá trị, thay vì
def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
6 chúng.

def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]

Chuyển sang

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
7, nó không hoạt động với trình tạo, vì bạn không chuyển
def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
2 vào danh sách. Bạn cũng sử dụng sắp xếp danh sách theo thứ tự giảm dần, vì vậy thay vì sử dụng một vòng lặp để tìm hai vòng lớn nhất, thay vào đó bạn nên sử dụng cắt lát. Điều này có thể giúp bạn:

def twoLargest[numbers]:
    return sorted[numbers, reverse=True][:2]

Đi về phía trước, bạn có thể tạo ra một chức năng 'n' lớn nhất. Nhưng thay vì sử dụng

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
9 bạn có thể sử dụng;
def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
0, và
def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
1. Làm cho giao diện càng tiêu chuẩn nhất có thể bạn có thể nhận được:

from heapq import nlargest

def nLargest[numbers, n=1, key=None, sort=False]:
    kwargs = {'key': key}
    if key is None:
        del kwargs['key']
    if n == 1:
        try:
            return [max[numbers, **kwargs]]
        except ValueError: # if passed an empty iterable
            return []
    if sort:
        return sorted[numbers, reverse=True, **kwargs][:n]
    else:
        return nlargest[n, numbers, **kwargs]

Lý do cho ba phương pháp được mô tả theo

def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
2:

Hai hàm sau hoạt động tốt nhất cho các giá trị nhỏ hơn của n. Đối với các giá trị lớn hơn, việc sử dụng hàm

def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
3 hiệu quả hơn. Ngoài ra, khi
def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
4, việc sử dụng các hàm
def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
5 và
def getNumbers[]:
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        yield float[num]
6 tích hợp sẽ hiệu quả hơn. Nếu việc sử dụng lặp đi lặp lại của các chức năng này là bắt buộc, hãy xem xét việc biến số thứ có thể lặp lại thành một đống thực tế.

Vấn đề trong lớp khoa học máy tính giới thiệu của tôi yêu cầu tôi tìm thấy hai số nguyên lớn nhất trong danh sách. Danh sách chỉ được lấp đầy với các số nguyên và tôi có thể cho rằng có ít nhất 2 số nguyên trong danh sách.

Vấn đề không nêu rõ liệu số nguyên lớn nhất và lớn thứ hai phải là số nguyên duy nhất. Nói cách khác, nếu số nguyên lớn nhất trong danh sách là 34 và nó xuất hiện hai lần, tôi sẽ cho rằng 34 có thể là cả số nguyên lớn và lớn thứ hai. Vấn đề cũng không nêu rõ liệu chúng ta có thể đột biến danh sách hay không. Tôi sẽ cho rằng chúng ta có thể thực hiện các thay đổi phá hoại trong danh sách. Nói cách khác, chúng ta có thể thay đổi danh sách bằng cách thêm và xóa các mục, v.v.

Chức năng tối đa trong Python

Với những giả định này, suy nghĩ đầu tiên của tôi là hàm tối đa trong Python, sẽ trả về giá trị tối đa trong danh sách.

integers = [1, 16, 3, 39, 26, 4, 8, 16]

largest_integer = max[integers]  # 39

Max là một hàm rất tiện dụng để tìm số nguyên lớn nhất trong danh sách, nhưng tôi cũng cần tìm số nguyên lớn thứ hai. Nếu tôi loại bỏ số nguyên lớn nhất khỏi danh sách sau khi tìm thấy nó, thì số nguyên lớn thứ hai giờ phải là số nguyên mới lớn nhất. Tôi có thể gọi Max trong danh sách lần thứ hai và nhận số nguyên lớn nhất tiếp theo.

integers = [1, 16, 3, 39, 26, 4, 8, 16]

largest_integer = max[integers]  #  39
integers.remove[largest_integer]

second_largest_integer = max[integers]  # 26

Nếu đột biến danh sách không phải là một tùy chọn và giả sử đây là một danh sách nhỏ các số nguyên vì lợi ích của bộ nhớ máy tính, tôi luôn có thể sao chép danh sách và sau đó thực hiện thao tác trên danh sách mới. Điều này sẽ giữ danh sách ban đầu, số nguyên, không sửa đổi.

integers = [1, 16, 3, 39, 26, 4, 8, 16]

# clone the list by slicing
copy_of_integers = integers[:]  # [1, 16, 3, 39, 26, 4, 8, 16]

largest_integer = max[copy_of_integers]  # 39
copy_of_integers.remove[largest_integer]

second_largest_integer = max[copy_of_integers]  # 26

Sử dụng hàm tối đa để tìm các số nguyên lớn nhất và lớn thứ hai trong danh sách có vẻ như là một giải pháp lý tưởng.

Sắp xếp danh sách

Tùy chọn khác ngay lập tức xuất hiện trong tâm trí tôi là sắp xếp danh sách. Một khi danh sách các số nguyên được sắp xếp, thật dễ dàng để chọn ra các số nguyên lớn nhất và lớn thứ hai. Python có một chức năng sắp xếp tích hợp thực hiện tất cả các công việc. Nó trả về một danh sách sắp xếp mới.

integers = [1, 16, 3, 39, 26, 4, 8, 16]

sorted_integers = sorted[integers]  # [1, 3, 4, 8, 16, 16, 26, 39]

largest_integer = sorted_integers[-1]  # 39
second_largest_integer = sorted_integers[-2]  # 26

Khả năng lập chỉ mục danh sách được sắp xếp mới bằng cách sử dụng [-1] cho mục cuối cùng trong danh sách và [-2] cho mục thứ hai đến cuối cùng trong danh sách là tuyệt vời trong Python. Nếu nó có vẻ ít rõ ràng hơn để sử dụng -1 và -2, tôi có thể sắp xếp danh sách theo thứ tự giảm dần [ngược]. Khi sắp xếp ngược, các số nguyên lớn nhất và lớn thứ hai sẽ lần lượt là INDEX 0 và 1.

integers = [1, 16, 3, 39, 26, 4, 8, 16]

sorted_integers = sorted[integers, reverse=True]  # [39, 26, 16, 16, 8, 4, 3, 1]

largest_integer = sorted_integers[0]  # 39
second_largest_integer = sorted_integers[1]  # 26

Rõ ràng là có chi phí sắp xếp danh sách các số nguyên, nhưng giải pháp rất sạch sẽ và trực quan. Tôi thích nó.

Sử dụng SET để loại bỏ các bản sao

Tôi bắt đầu suy nghĩ về những gì tôi sẽ làm nếu vấn đề nói rằng cùng một số không thể là số nguyên lớn nhất và lớn thứ hai. Nói cách khác, chúng phải là giá trị duy nhất.

Người ta rõ ràng có thể chỉ lặp lại thông qua danh sách cho đến khi hai số nguyên lớn nhất được tìm thấy. Tuy nhiên, tôi ngay lập tức nghĩ đến Set in Python, được đảm bảo chỉ chứa các giá trị duy nhất. Chúng tôi có thể tạo một bộ từ danh sách, sẽ loại bỏ các bản sao. Sau đó, chúng ta có thể tìm thấy hai giá trị tối đa trong tập hợp bằng hàm tối đa.set in Python, which is guaranteed to only contain unique values. We could create a set from the list, which would remove duplicates. We could then find the two maximum values in the set using the max function.

Thông báo tôi đã thay đổi danh sách các số nguyên thành 39 hai lần, nhưng dựa trên giả định mới 39 không thể là cả số nguyên lớn và lớn thứ hai trong danh sách. Các giá trị phải là duy nhất và được đặt sẽ loại bỏ các giá trị dự phòng cho tôi.

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
0

Việc sử dụng tập hợp giải quyết vấn đề độc đáo khá độc đáo.

Heapq.nlargest

Theo tài liệu, FEAPQ cung cấp việc thực hiện thuật toán hàng đợi Heap, còn được gọi là thuật toán hàng đợi ưu tiên. Nó có một phương pháp, được gọi là nlargest, có thể được sử dụng để tìm 2 số nguyên lớn nhất.

def getNumbers[]:
    numList = []
    while True:
        num = input['Please enter a number: ']
        if num == '':
            break
        numList.append[float[num]]
    return numList
1

Sự kết luận

Tôi phải nói rằng tôi hoàn toàn thích học Python, đó là lý do tại sao tôi đánh bại vấn đề đến chết. Tôi đã không xem xét câu trả lời cho vấn đề được cung cấp bởi người hướng dẫn trong khóa học, nhưng sau đó tôi sẽ làm hôm nay :] Tôi khuyên bạn nên tận dụng khóa đào tạo trực tuyến miễn phí. Tôi đã học được rất nhiều về các thuật toán, cấu trúc dữ liệu và lập trình Python nhờ rất nhiều tài nguyên trực tuyến tuyệt vời.

Bài Viết Liên Quan

Chủ Đề