Почему функция input() не сохраняет введенные значения в списке?

Как можно вывести список товаров, средняя цена которых превышает заданный порог? <br/> Формат ввода: <br/> <pre><code>apple,100,200,150&lt;code&gt;
orange,80,90,85
70&lt;/code&gt;
При этом 70 является пороговым значением.
Формат вывода:
&lt;code&gt;apple,150.0
orange,85.0&lt;/code&gt;
Код:
&lt;code&gt;def f(s):
    res_int = ''.join(i if i.isdigit() else ' ' for i in s).split()
    average = sum(map(int, res_int)) / len(res_int)
    limit = 70
    res_str = ''
    for i in s:
        if i.isalpha():
            res_str = ''.join([res_str, i])
    if average &gt; limit:
        return f'{res_str},{average}'
    else:
        return False

lines = []
while True:
    try:
        line = input()
        if line == "":
            break
    except EOFError:
        break
    lines.append(line)
for product in f(lines):
    print(product)&lt;/code&gt;
Обратите внимание на две проблемы: input() не добавляет значения в список, а порог (limit) задан фиксировано, хотя его нужно вводить через input().</code></pre>
  • 9 декабря 2024 г. 10:03
Ответы на вопрос 2
Вы правы, в вашем коде есть проблемы, которые нужно исправить. 

1. Проблема с функцией `input()`, у вас кода `for product in f(lines):` вызывает функцию `f(lines)` с аргументом, который является списком строк (`lines`). Однако ваша функция `f` ожидает строку, а не список. 
2. Пороговое значение (`limit`) задано фиксировано. Оно должно вводиться через `input()` как последняя строка.

Вот как можно изменить ваш код, чтобы исправить эти проблемы:

```python
def f(s, limit):
    result = []
    for line in s:
        parts = line.split(',')
        product = parts[0]
        prices = list(map(int, parts[1:]))
        average = sum(prices) / len(prices)
        
        if average > limit:
            result.append(f'{product},{average:.1f}')
    
    return result

lines = []
while True:
    try:
        line = input()
        if line == "":
            break
    except EOFError:
        break
    lines.append(line)

# Получаем пороговое значение из последней строки ввода
limit = int(lines.pop(-1))

# Вызываем функцию f с введенными товарами и пороговым значением
for product in f(lines, limit):
    print(product)
```

### Как это работает:
1. Функция `f` принимает два аргумента: список строк `s` и пороговое значение `limit`.
2. Для каждой строки в списке `s` мы разбиваем строку на составляющие: имя товара и цены.
3. Мы рассчитываем среднюю цену и проверяем, превышает ли она пороговое значение.
4. Если да, добавляем строку с товаром и средней ценой в результат.
5. Пороговое значение считывается из последней строки, и оно удаляется из списка товаров.
6. Наконец, выводим все товары, средняя цена которых превышает порог.

Этот код должен работать так, как вы ожидаете.
Как-то у вас все запутано и непонятно, поэтому я просто написал свой вариант решения: <br/>
Похожие вопросы