Liệt kê các số nhị phân có n chữ số

Mấy bạn ơi, mik viết code như thế này, nhưng nó cứ báo lỗi, mà mik đã sửa nhiều lần rồi, mà mik vẫn thấy nó báo lỗi. các bạn giúp mik với

n = 5
i=0
l=0
dem=1
switch=1
switch2=1
kq=[]
sonhiphan=0 
while ('i' * n) not in kq:
    if switch == 1:
        if i>=2:
                if switch2==1:
                    sonhiphan='0'*(n-l*i-1)+str(int(kq[i-2])+10)
                if len(sonhiphan)<n:
					print(len(sonhiphan))
					ChieuDaiCuaNhungSoThieu = n - len(sonhiphan)
					sonhiphan = '0'*ChieuDaiCuaNhungSoThieu + sonhiphan
					kq.append(sonhiphan)
				else:
					kq.append(sonhiphan)
					
				switch2 = 2
			elif switch2 == 2:
				kq.append('0'*(n-l-i) + str(int(kq[i-2]) * 10))
				switch2 = 1
				
		else:
			kq.append('0'*n)
			
		l += 1
		i += 1
		switch = 2
	elif switch == 2:
		chieudai = len(kq[i-1])
		kq.append(kq[i-1][0:chieudai-1] + str(int(kq[i-1]) % 10 + 1))
		i += 1
		switch = 1
print(kq)

Bạn bảo là “báo lỗi”, thế thì thông báo lỗi đâu.

2 Likes

Chữ i (không phải số 1) rất khó hiểu đấy.

2 Likes

Quá cồng kềnh vì dùng string. Bài này dùng generator chứa list và yield string sẽ dễ thao tác hơn.

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