Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2018 23:32:01

PythonOrangutang
Зарегистрирован: 2018-04-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

В программе странно работает функция min().

 i = open('boxes.in', 'r')
line = i.read().splitlines()
n = str(line[0]).split()[0]
m = str(line[0]).split()[1]
del line[0]
print(min(line))
counter = 1
counter2 = 0
counter3 = 0
p = 0
while counter <= int(m):
	if int(n) >= counter3 + int(min(line)):
		counter3+=int(min(line))
		a = line.index(min(line))
		print(a, line[a])
		del line[a]
		counter2+=1
	counter+=1
i.close()
o = open('boxes.out', 'w')
o.write(str(counter2))
o.close()
Содержимое файла boxes.in:
20 10
3
9
4
2
5
47
2
12
9
6

Программа почему-то находит минимальным сначала число 12, а только потом 2, 4 и т. д. Как решить?

Отредактировано PythonOrangutang (Апрель 14, 2018 08:45:02)

Офлайн

#2 Апрель 13, 2018 23:57:48

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

Ты бы хоть написал что эта программа должна делать?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Апрель 14, 2018 00:15:02

PythonOrangutang
Зарегистрирован: 2018-04-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

Rodegast
Ты бы хоть написал что эта программа должна делать?
Поверь, будет сложно объяснить. Фактически мне нужно перебирать минимальные числа из файла boxes.in (не считая первой строки). Наименьшие числа складывать, пока следующее прибавление не превысит число n (в данном случае 20). И написать количество прибавленых чисел.
2+2+3+4+5=16<20
Если прибавить следующее наименьшее число (6), то выйдет больше чем 20, а такая ситуация нам не нужна.
Количество сложенных чисел 5. Значит в файл boxes.out выводим 5. Надеюсь понятно объяснил)

Офлайн

#4 Апрель 14, 2018 00:17:02

PythonOrangutang
Зарегистрирован: 2018-04-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

Ах да, использованные числа не должны повторяться и m это кол-во строк не считая первой (в данном примере 10)

Отредактировано PythonOrangutang (Апрель 14, 2018 08:09:20)

Офлайн

#5 Апрель 14, 2018 00:43:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

Вот как надо такое решать:

 >>> n = 20
>>> s = """3
... 9
... 4
... 2
... 5
... 47
... 2
... 12
... 9
... 6"""
>>> i = 0
>>> for m, x in enumerate(sorted(set(map(int, s.split())))):
...     if i >= n:
...         break
...     i += x
>>> m
5



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 14, 2018 00:45:11)

Офлайн

#6 Апрель 14, 2018 08:58:12

PythonOrangutang
Зарегистрирован: 2018-04-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

 i = open('boxes.in', 'r')
line = i.read().splitlines()
n = str(line[0]).split()[0]
del line[0]
s = """3
9
4
2
5
47
2
12
9
6"""
print(min(line))
counter = 1
counter2 = 0
counter3 = 0
p = 0
for m, x in enumerate(sorted(set(map(int, s.split())))):
	if str(counter) >= n:
		break
	counter += x
i.close()
o = open('boxes.out', 'w')
o.write(str(m))
o.close()
Не правильно работает. И еще подскажи как автоматически придать такое значение переменной s.

Офлайн

#7 Апрель 14, 2018 12:49:44

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

> Не правильно работает.

Попробуй так

 m = p = 0
for x in sorted(set(map(int, s.split()))):
	if p >= n:
		break
	p += x
        m += 1
> И еще подскажи как автоматически придать такое значение переменной s.

Что значит автоматически? Просто считываешь файл и всё.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 14, 2018 13:21:21)

Офлайн

#8 Апрель 14, 2018 13:03:09

PythonOrangutang
Зарегистрирован: 2018-04-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

Rodegast
> Не правильно работает.Попробуй так
 i = open('boxes.in', 'r')
line = i.read().splitlines()
n = str(line[0]).split()[0]
del line[0]
s = """3
9
4
2
5
47
2
12
9
6"""
print(min(line))
counter = 1
counter2 = 0
counter3 = 0
m = p = 0
for x in sorted(set(map(int, s.split()))):
	if str(counter) >= n:
		break
	counter += x
	m += 1
i.close()
o = open('boxes.out', 'w')
o.write(str(m))
o.close()
Вывод тот же. 1. Уже и не знаю что гуглить…

Офлайн

#9 Апрель 14, 2018 13:21:47

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

 if str(counter) >= n:



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#10 Апрель 14, 2018 13:47:30

PythonOrangutang
Зарегистрирован: 2018-04-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

В программе странно работает функция min()

 i = open('boxes.in', 'r')
line = i.read().splitlines()
n = str(line[0]).split()[0]
del line[0]
s = line
counter = 1
counter2 = 0
counter3 = 0
m = p = 0
for x in sorted(set(map(int, s.split()))):
	if counter >= int(n):
		break
	counter += x
	m += 1
i.close()
o = open('boxes.out', 'w')
o.write(str(m))
o.close()
Выдает ошибку:
for x in sorted(set(map(int, s.split()))):
AttributeError: ‘list’ object has no attribute ‘split’.
 s=['3', '9', '4', '2', '5', '47', '2', '12', '9', '6']
если записать s как
 s = """3
9
4
2
5
47
2
12
9
6"""
то вывод правильный. Но как исправить ошибку?

Отредактировано PythonOrangutang (Апрель 14, 2018 14:44:41)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version