我正在编写一个函数来检查整数数组是否按递增顺序排序,如果是,则返回True。我必须至少用输入文件中的4个数组来测试它。输入文件包括: 11、22、33、10、1999、89(第1行) 22、77、88(第2行) 22、33、44、66(第3行) 33、44、55、66(第4行)。 下面是我的代码:
import sys
file_name = sys.argv[1]
file = open(file_name, 'r')
for line in file.readlines():
curr_arr = []
for i in line.split(','):
curr_arr += [int(i)]
def is_sorted(curr_arr):
if(len(curr_arr) < 1):
return True
if (len(curr_arr) > 2):
curr_min = curr_arr[0]
for curr_element in curr_arr:
if curr_element >= curr_min:
curr_min == curr_element
else:
return False
return True
print '\nArrays of integers in {} are sorted in an increasing fashion: {}'.format(curr_arr, is_sorted(curr_arr))
当我尝试运行代码时,得到ValueError:invalid literal for int(),base 10:“”位于第9行,当我尝试使用包含4个数组的文件对其进行测试时,代码只返回1个数组。你知道吗
这是我的输出:
[9,10,11,12]中的整数数组按递增方式排序:True
确保在
split()
输入之前.strip()
输入行。以下是一些读取数据并检查是否使用列表理解进行排序的方法:正如我所说,我无法重现
ValueError
问题。这是我用于测试的输入文件:之所以只处理最后一行,是因为代码开头的
for
循环一直在为处理的每一行重新初始化curr_arr
列表,因此只有最后一行处理的值最终才在其中。你知道吗下面是代码的一个修改版本,它仍然可以这样做,但是只有在将当前行中的值附加到一个名为
arrays
的新列表变量之后,我才添加了这个变量,我认为这是您想要的(或者非常接近它):输出:
发生错误的原因是
i
取空字符串''
的值(如果仔细查看,请参阅错误消息的最后一段)。因此,line.split(',')
返回了一个包含''
的列表,如果line
本身是空字符串(但这不应该是readlines()
的可能结果),或者如果其中一行以,
开头或结尾,就会发生这种情况。您应该尝试打印出line.split(',')
的结果,如另一方面,如果数组的长度为2,则
is_sorted
函数不会返回任何内容(也就是说,它默认返回None
),因为您的条件不能捕获这种情况。要解决此问题,请将if (len(curr_arr) > 2):
替换为if (len(curr_arr) >= 2):
。你知道吗相关问题 更多 >
编程相关推荐