#python
Здравствуйте, есть файл с исходными данными:
-1 -2 -3
-4 -5 -6
-7 -8 -9
нужно сравнить числа построчно и найти меньшее:
f=open('input.txt','r')
for i in range(3):
a,b,c=f.readline().split()
print(a,' ',b,' ',c)
if a
Ответы
Ответ 1
f.readline().split() возвращает что? Правильно, список строк. Строк, вот оно и сравнивает
их в лексикографическом порядке.
Исправляем строку для инициализации a, b и c на:
a,b,c=map(int, f.readline().split())
Ответ 2
Несколько замечаний по поводу кода:
Используя for i in range(3) Вы жестко задаете количетство строк в файле. Вместо этого
можно просто пройти по файлу построчно.
Вместо того, чтобы вызывать f.close() можно воспользоваться блоком with - он автоматически
закроет объект при выходе из блока.
В Python есть встроенная функция поиска минимума min.
Также в Python есть функция str.join, которая соединит строки, используя переданный
ей разделитель.
Хорошей практикой является определение функции main, которая будет вызвана при исполнении
скрипта. Это позволит избежать ненужного исполнения кода, если Вы заходите импортировать
модуль в другой скрипт. Для этого используется условная конструкция if __name__ ==
'__main__':
Таким образом, Ваш код может быть улучшен следующим образом:
def main():
with open('input.txt', 'r') as f:
for line in f:
numbers = list(map(int, line.split()))
print(' '.join(map(str, numbers)))
print('min =', min(numbers))
if __name__ == '__main__':
main()
Ответ 3
Добавлю к ответу @soon, что основная проблема вашего кода в том, что вы сравниваете
строки, а не числа.
a, b, c = f.readline().split()
print(type(a)) #
Таким образом, минимальное, что вам нужно сделать -- это преобразовать строки в числа,
для этого используется функция int:
a, b, c = f.readline().split()
a, b, c = int(a), int(b), int(c) # эту строку достаточно добавить
После такого исправления остальная программа работает правильно.
Правда, обычно используются более удобные способы преобразования:
a, b, c = map(int, f.readline().split())
или
a, b, c = (int(value) for value in f.readline().split())
Ответ 4
Чтобы найти в каждой входной строчке самое маленькое целое цисло:
#!/usr/bin/env python
import io
with io.open('input.txt', encoding='utf-8') as file:
for line in file:
print(min(line.split(), key=int))
Предполагается, что входной файл содержит на каждой строчке целые числа, разделённые
пробелами. Это включает в себя числа состоящие из любых десятичных цифр в Юникоде,
закодированных используя utf-8 кодировку, например, если input.txt содержит тибетские
цифры:
༩ ༥ ༧
༨ ༣ ༦
༤ ༠ ༡
то на выходе будет:
༥
༣
༠
Если при чтении использовать min(map(int, line.split())), то результат:
5
3
0
В обоих случаях числа из файла сравниваются как числа.
Комментариев нет:
Отправить комментарий