读取文件并查看lst中的数字是否为数字

2024-04-30 02:58:34 发布

您现在位置:Python中文网/ 问答频道 /正文

问我的问题:

在《神话中的所有生物》一书中,侏儒是善良的,有胡须的生物,而地精则倾向于专横和头脑简单。地精喜欢骚扰侏儒,让他们按胡子的长度排列成三人一组。由于侏儒的身高不同,他们会改变自己的布局来迷惑地精。因此,地精们必须以厘米为单位测量胡须,看看每个人是否排列整齐。 你的任务是编写一个函数来帮助地精们判断侏儒们是否正确排列,从最短到最长或者从最长到最短。输入将来自文件gnome.txt文件它从一行开始,该行包含一个整数N,0<;N<;30,这是要处理的组数。下面是N行,每行包含三个小于100的不同正整数。对于每组,应打印一行“已订购”或“未订购”: 用法:

gnome() Ordered Unordered Ordered

内部gnome.txt文件

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]: 索引器错误:列表索引超出范围

非常感谢大家我已经为此工作了几个小时


Tags: 文件inlttxtforreadline生物infile
3条回答

其他方法:

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

你把你的指数搞糊涂了。索引i表示需要处理的三个侏儒的集数,而不是每个集的侏儒数。你知道吗

因为您要检查最近添加的值是否大于两天前添加的值,所以可以将if语句更改为if intlist[-2] > intlist[-1]:。在Python中,这个负索引表示从列表末尾开始倒数的元素n。 请注意,如果列表中只有一个元素,则需要确保没有执行此操作,否则它将引发异常,因为intlist[-2]将不存在!你知道吗

欣赏Python:)

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')

这将把列表与自身的排序版本(升序和降序)进行比较,并返回布尔结果。你知道吗

相关问题 更多 >