|
|
发表于 2018-5-2 22:20:40
|
显示全部楼层
本帖最后由 ABC23 于 2018-5-2 22:27 编辑
反对所谓的“最佳答案” :-)
===============
a.append(int(input())),这句话本身并没有任何问题。
错在这里:if(a[i] not in a[:i]):
TraceBack:if(a[i] not in a[:i]):
^
SyntaxError: invalid syntax(语法错误)
这句话,如果不是你没有空格,就是锁进问题。这不是重点。关键是你是逻辑有问题。
与其说是语法错误,不如说楼主的【逻辑有问题】、【语法上的问题只是附属物罢了】
if a[i] not in a[:i]:这句话翻译成中华汉语就是【如果a的第i+1个元素不在a的前i个元素中】
分析:1. 【逻辑错】有两个逻辑错误。第i+1个元素,怎么可能在前i个元素中??(这将永远是个假命题,没有意义的事情还不如不做。);b.remove(a[i]),你并不才能保证a[i]在b中存在。
2. 【语法错】这要联系上下文。楼主也是在应试教育制度下生长的人,想必做了不少应付考试的阅读练习,一般看到这样的挑错题你想到的应该是“结合上下文”。结合上下文。
根据上文给出的信息:for i in range(n)是一个重要的线索。每次给出的i是严格依赖于此句给出的n之上文条件,也就是说可能回导致a[i]越界的危险,但是考虑到下一句:..input()..结合上文这两句,我们可以得出这样的结论:(极限法分析)每次循环因为a的最大下标范围(0、1、2……)和实际上由n敲定的i值的增长是一致的(0、1、2……),还好侥幸逃过一劫,这不会导致越界的语法错误。
===============
还是看本人的标准代码。
a = []
b = []
for i in range(5):
a.append(int(input('Enter ')))
if a[i] not in a[:i+1]:
print('Not found!')
print(a[:i+1])
b.append(a[i])
else:
print("Found it!")
print(a[:i+1])
b.append(a[i]+100)
print('='*12)
print(a)
print(b)
说明:按照你的意思,去掉了会引起歧义的语句(逻辑错)。如果在a中没有找到就append(a[i]),否则append(a[i]+100),作为一个标记。
输出:
Enter 1
Found it!
[1]
Enter 2
Found it!
[1, 2]
Enter 3
Found it!
[1, 2, 3]
Enter 4
Found it!
[1, 2, 3, 4]
Enter 5
Found it!
[1, 2, 3, 4, 5]
============
[1, 2, 3, 4, 5]
[101, 102, 103, 104, 105]
可以看到,全部都append了a[i]+100。这也是预料之中的事情,在写代码之前要先思考,做出恰当的预测。
看看这个例子:
a = []
n = int(input('Enter times '))
for i in range(n):
a.append(int(input('Enter ')))
if a[i] not in a[:i+1]:
print('N')
else:
print('Y')
Enter times 5
Enter 1
Y
Enter 2
Y
Enter 3
Y
Enter 4
Y
Enter 5
Y
如果把i+1改成i:
Enter times 5
Enter 1
N
Enter 2
N
Enter 3
N
Enter 4
N
Enter 5
N
最后,指出楼主代码不Pythonic的地方:1. if 语句不要写圆括号;2. Python的列表添加新元素,如果在末尾的话,使用append方法,不需要引入新的变量表示他的下标。 |
|