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
Đoạn code về list các số bị lỗi
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)
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.
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
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
Mình hiểu rồi, tks bạn nhiều nha