Tại sao hàm tìm giá trị nhỏ nhất luôn trả về None

Em có 1 đoạn code sau

 # chuong trinh yeu cau nhap 1 loat so sau do tra ve
 # so lon nhat, so nho nhat
 n = raw_input("Enter a number: ")
 count = 0
 total = 0
 lon = None
 nho = None
 while n != "done":
     try:
         kiemtra = int(n)
         if kiemtra > lon: # đoạn này kiếm số lớn nhất, chạy được
             lon = kiemtra
         elif kiemtra < nho: # đoạn này kiếm số nhỏ nhất, luôn trả giá trị là None
             nho = kiemtra
         n = raw_input("Enter a number: ")
     except:
         print "Wrong number"
         n = raw_input("Enter a number: ")

print lon, nho

Đoạn code dùng để kiếm số lớn nhất và nhỏ nhất trong các số đã nhập, với số lớn nhất thì đã làm ra nhưng không hiểu sao số nhỏ nhất thì lúc nào nó cũng hiện là None, em không biết mình đã sai ở đâu nữa.

Đây là màn hình lúc chạy code

Bạn phải gán lon, nho bằng 1 số nào đó chứ.

1 Like

Chắc bị lỗi so sánh với None, bạn thử bỏ phần khởi tạo giá trị ban đầu cho nó thử xem. bỏ phần
lon = None
nho = None

>>> 0 < None
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    0 < None
TypeError: unorderable types: int() < NoneType()
>>> 5 > None
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    5 > None
TypeError: unorderable types: int() > NoneType()
>>> 

sang python3 là Exception luôn nha…

Lỗi ở đó. Phải gán nho bằng 1 số cực to chứ.

1 Like

Cũng không hẳn :slight_smile: trong py không có số lớn với nhỏ nhất nên phải viết lặp code vậy :slight_smile:

Nhưng tốt nhất là gán lon và nho ban đầu là số đầu tiên đọc được thì đâu đến nỗi khổ thế này >.<

2 Likes
MAX = float('inf')
10**99 > float('inf')
False


Vậy còn nhỏ hơn thì sao bạn?

:joy: chuyển thành số âm thôi

Nếu bỏ đi thì cái bước if kia làm sao so sánh được hả bạn

None là nhỏ nhất à, sao em đọc trong các tài liệu None là trạng thái trống, kiểu như không có gì nhưng vẫn đánh dấu để đó ấy

Theo em nghĩ nếu đã gán thì phải gán số lớn nhất hoặc số nhỏ nhất thì mới được, chứ gán số bất kỳ nào cũng bỏ sót cả, nhưng em không biết cách viết số lớn nhất hay nhỏ nhất trong python

A được rồi bác ơi, chỉ cần gán biên nho là số đầu tiên nhập vào là được, tks bác nhiều

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?