Python 练习题

1 寻找平衡点:

假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点


numbers = [1,3,5,7,8,25,4,20,29];
sum = 0;
for num in numbers:
    sum += num;#求出数组的和

for index in range(len(numbers)):
    former = 0;
    after = 0;
    i = 0;
    for i in range(index):#求出当前循环点的前半段数据
        former += numbers[i];
    after = sum - former - numbers[index];#用和减去当前数和前半部分和
   
    if(former == after):
        print ("The balance point is:",numbers[index]);


由于是初学,所以第一个程序遇到问题是难免的,谈一下我遇到的问题:

(1)for循环中的递增迭代: for index in range(len(numbers)): 对于数组的索引迭代,需要用到len()求数组的长度,用range进行索引迭代。

 

  for i in range(index):在这句循环的时候,本来我的意思是i 递增到index 循环,但是非常不幸运,编译不过:

Traceback (most recent call last):
  File "BalancePoint.py", line 15, in <module>
    for i in index:
TypeError: 'int' object is not iterable

查了下,原来不能直接用int进行迭代,而必须加个range.

 

 

2 删除list里面的重复元素:

 

方法一:直接将list 转变为set

 

a = [1,2,3,3,4,5,1,1]
a = list(set(a))                    # ? set ?????
print (a,"/n");

 

shit,我居然还没学到set,这是在网上看到的方法。NND,我很郁闷的说!我用的是传统的方法,折腾死我了,不得不说,很久没写代码了,生疏了!

 

方法二: 就算排序,然后逐个比较,鉴于del会直接把元素删除,设置了个flag数组来标记该删除的元素:

 

NameList = ["Carol","Andy","Terry","Feng","Carol","Jie","Terry"];

NameList.sort();
Flag=[];
for index in range(len(NameList)):
    Flag.insert(index,0);# = 0;

index =0;
secondIndex=0;
for index in range(len(NameList)-1):
    inx = index+1;
    for secondIndex in NameList[index+1:]:
        if (NameList[index]== secondIndex):
            #del NameList[secondIndex];
            #Flag.insert(secondIndex,1);
            Flag[index] = 1;
        inx = inx +1;
print("/n");
print (Flag,"/n");
index = 0;
end = range(len(NameList));
for index in end:
    if (Flag[index] ==1):
        del NameList[index];
        #print (index,"/n");
   
print (NameList,"/n");

 

说一下我遇到的问题:

第一个,定义一个和原来list长度相同的全为零的数组。

Flag=[];
for index in range(len(NameList)):
    Flag.insert(index,0);# = 0;

这个写就可以了,比较郁闷的是最开始没定义Flag[].到后面使用的时候一直报错。

 

第二个: for secondIndex in NameList[index+1:]:

我最开始是这么写的 for secondIndex in NameList:,然后再这句话前头赋值 secondIndex=NameList[index+1];

然后一直就debug不对,seondIndex直接从第一个元素开始,最开始还以为是涉及全局变量和局部变量的问题,还使了global,结果根本就不是,我的理解是 secondIndex在这里直接被赋值了,因为in NameList是从最初开始循环的,my lady gaga!我很郁闷!

 

第三个: 这个不算问题,主要是还是对语法不是很熟悉,才开始学,最开始饮用list里面的元素我是这么写的NameList(index+1);

区别就在于()

 

 

 

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页