01/10/2018, 09:58

Cho mình hỏi lỗi trong đoạn code này với

num = []
n = 0
print "Go~ 'done' de ket thuc nhe!"
while True:
	n = raw_input("Nhap vao so tiep theo :")
	if n == "done" :
		break
	n1 = int(n)

	num.append(n1)
	
print "Ban da nhap xong"
print "Cac so ca nhap la:", num
num2= num
	
tieptuc = raw_input("Nhan Enter de tiep tuc")


while len(num) > 1:
	i = 0
	m = 0
	while i < len(num):
		m = m + num[i]
		i= i + 1
	tb = m/len(num)
	print "gia tri tb la:", tb
	tieptuc2 = raw_input("Nhan Enter de tiep tuc")
	for j in range(0 , len(num)-1):
		if num[j] <= tb :
			print j
			num.pop(j)
print "Gia tri lon nhat la` :",num[0]
print "Trong cac so :",num2
Henry viết 12:01 ngày 01/10/2018

num2= num

Khi bạn làm thao tác này có nghĩa là num2 và num đều lấy giá trị từ một vùng nhớ. Do đó bạn thay đổi num => bạn cũng gián tiếp thay đổi num2

a = [1, 2]
b = a
b[0] = 2
=> a = [2, 2]

do đó muốn copy mảng ta phải

num2 = []
for item in num: num2.append(item)
Michael viết 12:08 ngày 01/10/2018

Mình bị lỗi như này khi chạy. Mọi người xem chỉ giúp mình với

Henry viết 12:10 ngày 01/10/2018

Khi bạn pop các phần tử của mảng đồng nghĩa với việc mảng bị thay đổi đột ngột. Mà khi bạn chạy for bạn lại set cho nó chạy từ khoảng cách mảng đầu tiên

a = [1, 2, 3] #for mặc định lặp 3 lần
a.pop() #mất đi một phần tử
a[0] = 1
a[1] = 2
a[2] = lỗi, vì đã pop

vậy a còn 2 phần tử thôi nhưng for vẫn lặp 3 lần.

Michael viết 12:04 ngày 01/10/2018

Mình tưởng là cái range nó sẽ thay đổi qua mỗi vòng lặp. vì mình để là range( 0 , len(num) - 1)
Mình viết vòng for nằm trong vòng while, hay là nó chạy xong vòng for thì mới chạy tiếp while hả bạn

Henry viết 12:09 ngày 01/10/2018

không bạn nó chỉ quan tấm tới cái số lúc đầu thôi. Vòng lặp for nó mặc định sẵn số lần lặp ngay từ lần đầu tiên rồi. Chỉ có while bạn mới tùy chỉnh được

Michael viết 12:14 ngày 01/10/2018

Mình hiểu rồi, tks bạn nhiều nha

Bài liên quan
0