#python #integer #valueerror
#python #целое число #ошибка значения
Вопрос:
Я пытаюсь получить среднее значение из текстового файла, который использует функцию def. Я пытаюсь преобразовать список из текстового файла в int(). Вместо преобразования он выдает ошибку: » Ошибка ValueError: недопустимый литерал для int() с базой 10: ‘5, 5, 6, 7’ «. «5, 5, 6, 7» — это тот, который я сделал из правильного файла .txt. Вот код:
def getNumberList(filename):
with open(filename,'r') as f:
lyst = f.read().split('n')
numberList = [int(num) for num in lyst]
return numberList
def getAverage(filename, func):
numbers = func(filename)
return sum(numbers)/len(numbers)
def main():
filename = input("Input the file name: ")
average = getAverage(filename, getNumberList)
print(average)
if __name__ == "__main__":
main()
Комментарии:
1. В вашем файле более одного числа в каждой строке.
2. Ошибка довольно очевидна, вы не можете перейти
'5, 5, 6, 7'
кint()
, вам нужно будет разделить это.3. Но ваш код ожидает, что это будет только одно число.
Ответ №1:
Вы разбиваете по строке, но не разделяете запятыми, поэтому вы пытаетесь преобразовать 5,5,6,7
в целое число, что невозможно. Вам также нужно разделить запятыми после разделения по строкам, а затем объединить их в один список, если вы хотите усреднить все числа в файле. Должно работать следующее:
def getNumberList(filename):
with open(filename,'r') as f:
lines = f.readlines()
numberList = [int(num) for num in line.split(',') for line in lines]
return numberList
Ответ №2:
Похоже, вам может потребоваться разделить каждый элемент с помощью lyst, используя «,» потому что прямо сейчас он пытается преобразовать каждую строку, которая имеет «1,2,3» в качестве входных данных.
Итак, измените это и попробуйте.
def getNumberList(filename):
with open(filename,'r') as f:
lyst = []
temp = f.read().strip().split('n')
for i in temp:
lyst = i.strip().split(',')
numberList = [int(num) for num in lyst]
return numberList
Комментарии:
1. Разве назначение не должно
numberList
быть после цикла?2. ДА. Ошибка форматирования. Спасибо, что указали на это.