def sorting(a, b, c):
array = [a, b, c]
newarray = array.sort()
newarray2 = array.reverse()
if newarray == array:
print ('The fish is rising')
elif newarray2 == array:
print ('The fish is decesnding')
else:
print ('No fish')
def main():
sorting((int(input('1st'))), (int(input('2nd'))), (int(input('3rd'))))
main()
基本上,输入的数字在增加,然后鱼在上升,如果数字在减少,鱼在减少。最后,如果输入的数字不是连续增加或减少,即 1、3、2,那么它应该不会输出鱼。即使可能有另一种更有效的方法,有人可以解释如何比较两个相同的列表以查看它们是否处于相同的顺序中吗?
当您使用 .sort
和 .reverse
函数时,它们会就地对数据进行排序/反转并返回None
。因此,您将None
分配给newarray
和newarray2
。然后在条件中,您正在检查是否始终True
None == None
。这就是您的代码无法正常工作的原因。
我能想到的简单而通用的方式是这样的
def sorting(*args):
sorted_list, args = sorted(args), list(args)
if sorted_list == args:
print "Rising"
elif sorted_list[::-1] == args:
print "Descending"
else:
print "No Fish"
sorting(1, 2, 3, 4) # Rising
sorting(5, 4, 3, 2, 1) # Descending
sorting(2, 1, 3, 6, 4, 5) # No Fish
为什么你的代码段不起作用:
**list.sort:**
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
>>>
排序后,它不返回任何内容,即您的 newarray 或 newarray2 没有任何内容
例:
>>> nar = [3,2,1]
>>> array = nar.sort()
>>> array
>>> nar
[1, 2, 3]
>>>
所以,请使用sorted()内置函数。
使用 numpy 数组更容易做到这一点......
import numpy as np
def abc(*args):
xx = np.array(args)
if all(xx[1:] > xx[:-1]): print 'Increasing order'
elif all(xx[1:] < xx[:-1]): print 'Decreasing order'
else: print 'Rando order'
如果您不想对列表进行排序,可以使用以下代码片段:
for i,j in zip(*(a,b)):
if i == j:
continue
else:
print 'lists are not equal'
break
这基本上是在实施乔希的建议。
快速演示:
In [7]: for i,j in zip(*(a,b)):
...: print i,j
...: if i==j:
...: continue
...: else:
...: print 'lists not equal'
...: break
...:
a a
b b
c c
In [8]: a='abd'
In [9]: for i,j in zip(*(a,b)):
print i,j
if i==j:
continue
else:
print 'lists not equal'
break
...:
a a
b b
d c
lists not equal