Thứ hai, tệp và các đối tượng khác như tệp yêu cầu bạn chạy một bộ hướng dẫn để xử lý chúng đúng cách. Ví dụ: thật dễ dàng để bạn mở một tệp giống như bạn đã làm và quên đóng nó sau đó, cũng giống như bạn đã làm. Trong trường hợp này, chúng tôi có một cơ chế xử lý đặc biệt được gọi là trình quản lý bối cảnh và chúng được sử dụng với từ khóa with trong python, những cơ chế này giúp bạn chạy các lệnh mà bạn thường quên và có thể khiến chương trình của bạn bị hỏng.
Vì vậy, đây là cách tôi đã thực hiện những gì bạn muốn làm
result = 0
file = open["n38.txt","r"]
with file: # a context manager
data = file.read[] #this returns data as a string of numbers
for num_char in data:
result += float [num_char]
#file is automatically closed after
print ["the sum is: ",result]
Tôi chưa thử nghiệm điều này, nhưng tôi chắc chắn rằng nó có thể hoạt động. Vì vậy, hãy thử điều đó, hoặc có thể lấy nó làm ví dụ
Nói chung, như bạn đã biết, không nên sử dụng các trình soạn thảo văn bản có định dạng [như Google Docs, MS Word và LibreOffice Writer] để tạo các tệp văn bản thuần túy. Thông thường, họ sẽ đi loanh quanh và làm những điều bạn không muốn. Thay vào đó, bạn nên sử dụng trình soạn thảo văn bản, tốt nhất là trình soạn thảo văn bản thực sự, như Notepad++, Sublime Text hoặc VSCode, không có nhiều hạn chế và sự cố mà Notepad tích hợp sẵn có.
Cần lưu ý, giải pháp của bạn chuyển đổi số thành int
, không phải float
, như báo cáo vấn đề ban đầu của bạn đã chỉ định. Hơn nữa, vui lòng đọc kỹ những gì người khác đã viết về các vấn đề tiềm ẩn khác với việc triển khai này, bao gồm cả việc không sử dụng trình quản lý ngữ cảnh [câu lệnh ______17_______] để đảm bảo tệp thực sự được đóng, đảm bảo chỉ định mã hóa tệp và các vấn đề khác. Bạn cũng có thể ngắn gọn hơn nhiều và thay thế bằng, chẳng hạn
with open["n38bn.txt", r, encoding="utf-8"] as file: # Open the file for the length of the width block
numbers = [float[line.strip[]] for line in file] # For each line, strip, convert to float and add to list
result = sum[numbers] # Sum the list
print["The sum is", result]
Điều này sử dụng a để tạo danh sách trong một dòng và tránh các sự cố đã xác định khác với giải pháp trước đó [để tệp mở, không chỉ định mã hóa, không chuyển đổi thành float, v.v.]
Giá trịError. không thể chuyển đổi chuỗi thành lỗi float xảy ra khi bạn cố gắng chuyển đổi một chuỗi không chứa số float thành float. Nếu chuỗi python không được định dạng dưới dạng số dấu phẩy động, thì bạn không thể chuyển đổi chuỗi thành số thực. Giá trị trăn. không thể chuyển đổi chuỗi thành float sẽ bị ném. Lỗi xảy ra do lỗi phân tích cú pháp trong hàm float[] với đối số chuỗi không thể phân tích cú pháp dưới dạng số float
Hàm float[] được sử dụng để chuyển đổi một chuỗi có giá trị float thành giá trị float. Hàm float phân tích chuỗi và chuyển đổi nó thành số float. Nếu xảy ra lỗi trong khi chuyển đổi chuỗi thành số float, trình thông dịch python sẽ đưa ra lỗi giá trị này
Chuỗi được cho là có số float hợp lệ. Nếu chuỗi trống hoặc không chứa số float hợp lệ, trình thông dịch python không thể chuyển đổi nó thành số float trong khi phân tích cú pháp chuỗi. Trong trường hợp này, lỗi “ValueError. không thể chuyển đổi chuỗi thành float. ” được ném bởi trình thông dịch python
Ngoại lệ
Lỗi “ValueError. không thể chuyển đổi chuỗi thành float. ” sẽ được hiển thị như bên dưới dấu vết ngăn xếp
Traceback [most recent call last]:
File "/Users/python/Desktop/test.py", line 1, in
print float['']
ValueError: could not convert string to float:
[Finished in 0.0s with exit code 1]
Nguyên nhân gốc rễ
Hàm float[] được dùng để chuyển đổi một chuỗi thành một số float. Chuỗi được cho là có số float hợp lệ. Nếu chuỗi hoặc trống hoặc không có số phao hợp lệ, trình thông dịch python sẽ ném một lỗi trong khi phân tích cú pháp chuỗi. Nếu giá trị float hợp lệ được chuyển đến chuỗi, vấn đề này sẽ được giải quyết
Đối số hợp lệ trong hàm float[]
Sau đây là các đối số hợp lệ cho hàm float[]. Nếu bạn sử dụng một trong các cách sau, lỗi sẽ không xảy ra
hàm float[] không có đối số – Hàm float[] mặc định không có đối số nào được truyền sẽ trả về giá trị mặc định 0. 0
print float[] # returns 0.0
hàm float[] có giá trị số nguyên – Nếu một giá trị số nguyên được truyền dưới dạng đối số trong hàm float[], thì trả về giá trị float
print float[5] # returns 5.0
Hàm float[] có chuỗi chứa giá trị số nguyên – Nếu một chuỗi có giá trị số nguyên được truyền dưới dạng đối số trong hàm float[], trả về giá trị float
print float['5'] # returns 5.0
hàm float[] có giá trị float – Nếu giá trị float được truyền dưới dạng đối số trong hàm float[], trả về giá trị float
print int[5.4] # returns 5.4
Các hàm float[] với một chuỗi chứa giá trị float – Nếu một chuỗi có giá trị float được truyền dưới dạng đối số trong hàm float[], trả về giá trị float
print float['5.4'] # returns 5.4
hàm float[] với giá trị boolean – Nếu giá trị boolean được truyền dưới dạng đối số trong hàm float[], trả về giá trị float cho giá trị boolean
________số 8_______Đối số không hợp lệ trong hàm float[]
hàm float[] có chuỗi rỗng – Không thể phân tích cú pháp chuỗi rỗng thành giá trị float
print float[''] # throws ValueError: could not convert string to float:
hàm float[] với chuỗi không float – Nếu một chuỗi chứa giá trị không float chẳng hạn như ký tự và được truyền dưới dạng đối số, hàm float[] sẽ đưa ra lỗi giá trị
print float['q'] # throws ValueError: could not convert string to float: q
Giải pháp 1
Giá trị chuỗi phải được kiểm tra xem đó có phải là số hay không bằng cách sử dụng hàm isnumic[] tích hợp. Nếu một chuỗi chứa một số, nó sẽ được truyền dưới dạng đối số trong hàm float[]. Nếu không, người dùng sẽ được hiển thị thông báo lỗi
Chương trình
x='a'
print float[x]
đầu ra
print float[] # returns 0.0
0Giải pháp
print float[] # returns 0.0
1đầu ra
print float[] # returns 0.0
2Giải pháp 2
Nếu một chuỗi đôi khi chứa một số không phải là số, thì hàm tích hợp không phải là một lựa chọn tốt. Trong trường hợp này, hãy thử phương pháp bắt sẽ giải quyết vấn đề này. Nếu chuỗi chứa số float, nó sẽ được thực thi trong khối try. Nếu không, một thông báo lỗi sẽ được hiển thị cho người dùng trong khối lỗi