问我的问题:
在“神话中的所有生物”一书中,侏儒是善良的,有胡子的生物,而地精往往是专横和笨笨的。地精喜欢骚扰侏儒,让它们以三个为一组排列,按胡须的长度排列。具有不同物理高度的侏儒会改变他们的安排以混淆地精。因此,地精必须以厘米为单位实际测量胡须,看看是否每个人都按顺序排列。 你的任务是编写一个函数来帮助哥布林确定侏儒是否正确排列,从最短到最长的胡须或从最长到最短。输入将来自文件gnome.txt,该文件以包含单个整数N,0< 0的行开头。 N< 30,这是要处理的组数。在此之后是N行,每行包含三个不同的正整数小于100.对于每个组,一行表示" Ordered"或"无序"应该打印: 用法:
侏儒() 有序 无序 有序
gnome.txt内部
3
40 62 77
88 62 77
91 33 18
到目前为止我的代码
def gnome():
infile = open('gnome.txt')
firstline = infile.readline()
for i in range (int(firstline)):
gnomeList = infile.readline().split()
intlist = []
for str in gnomeList:
intlist.append(int(str))
if intlist[i] > intlist[i + 1]:
print ('Unordered')
else:
print ('ordered')
错误即将
文件" C:/Users/cjakob/Desktop/homework6.py",第34行,在gnome中 如果intlist [i]> intlist [i + 1]: IndexError:列表索引超出范围
非常感谢你,我已经花了好几个小时
答案 0 :(得分:0)
您对指数的含义感到困惑。您的索引i
表示您需要处理的三个侏儒的集的数量,而不是每个集合中的侏儒数。
由于您要检查最近添加的值是否大于之前添加的值,您只需将if语句更改为if intlist[-2] > intlist[-1]:
即可。这个负索引在Python中表示从列表末尾开始倒数的元素n。
请注意,那么当列表中只有一个元素或者因为intlist[-2]
不存在而引发异常时,您需要确保没有这样做!
享受Python:)
答案 1 :(得分:0)
def gnome(gnome_list):
return gnome_list == sorted(gnome_list) or gnome_list == sorted(gnome_list, reverse=True)
if __name__ == '__main__':
with open('gnome.txt', 'r') as f:
for line in f:
if gnome(line.split()):
print('Ordered')
else:
print('Unordered')
这会将列表与自身的排序版本(升序和降序)进行比较,并返回布尔结果。
答案 2 :(得分:0)
其他方法:
f = open('gnome.txt').readlines()[1:]
def check(a):
if sorted(a) == a:
return True
for x in f:
x=x.split()
if check(x) == True:
print " ".join(x),"Ordered"
else:print " ".join(x),"Unordered"
输出:
40 62 77 Ordered
88 62 77 Unordered
91 33 18 Unordered
在上面的代码中,我有check
函数获取列表,如果list == sorted(list)
,它将返回True,表示已订购。
对于大文件,请勿使用readlines