Найти - Пользователи
Полная версия: Не работает программа
Начало » Центр помощи » Не работает программа
1 2
user437
Здравствуйте! не работает программа. Вот задача:

А вот мой код:
import math
b=[]
while True:
    try:
        a=input('Введите число: ')
        if a == True:
            b.append(a)
            s=int(len(b))
            z=int(b)
            summa=math.fsum(z)
            sred = z/s
            z.sort()
        else:
            print('Введенные числа:', b, "Количество чисел", s , 'Среднее число = ', sred, "Минимальное число = ", z[0], "Максимальное число = ", z[-1])
            break
    except ValueError:
        print('Неверно введено число или оно не целое')
        continue
навреное как-то с циклом налажал… не знаю…
ajib6ept
TypeError: int() argument must be a string or a number, not ‘list’

Что именно не понятно? Как список в число перевести?
Budulianin
user437
не работает программа.
Симптомы ?
user437
А у меня никаких ошибок нет при ее запуске…
Питон у меня 3.4.
После нажатия Enter должна ведь программа заканчиваться и выводить результат, а у меня она просто опять показывает – Введите число.
nokados
Ты c PHP переходишь?
  • a - строка. True == 1
    a никогда не равно True
    Лучше проверь, что длина a больше 0. (len(a) > 0) или что a != '' .
    Или вообще не проверяй, напиши a = int(input()). Если нажать Enter то выкинется исключение ValueError в котором можно вывести результат
  • Почему не создал переменные, а уже их используешь?
    print('Введенные числа:', b, “Количество чисел”, s , ‘Среднее число = ’, sred, “Минимальное число = ”, z, “Максимальное число = ”, z)
    Эти переменные даже не создадутся, когда в первой итерации провалится условие a == True
    Создай их до цикла или вообще не создавай, а перенеси в блок else: ведь только там они и нужны
  • s=int(len(b))
    Зачем превращать число (len(b)) в число, если оно и так число ?
  • z=int(b) Почему ты преобразовываешь массив в число? Как оно должно работать? Зачем тебе вообще z? Ты меня траллишь, да? Пофиг, представим, что я поддался. Еще ведь и с эксепшенами…
  • Зачем math, если есть sum()?


Проще написать рабочий код:
import math
b=[]
while True:
    try:
        a=input('Введите число: ')
        if a != '':
            b.append(int(a))
        else:
            s=len(b)
            summa = sum(b)
            sred = summa/s
            print('Введенные числа:', b,
                  "Количество чисел", s,
                  'Среднее число = ', sred,
                  "Минимальное число = ", min(b),
                  "Максимальное число = ", max(b))
            break
    except ValueError:
        print('Неверно введено число или оно не целое')
        continue
user437
спасибо)
нет, я раньше паскаль немного изучал, а сейчас питон начал изучать.
Почему не создал переменные, а уже их используешь?
print('Введенные числа:', b, “Количество чисел”, s , ‘Среднее число = ’, sred, “Минимальное число = ”, z, “Максимальное число = ”, z)
Эти переменные даже не создадутся, когда в первой итерации провалится условие a == True
Создай их до цикла или вообще не создавай, а перенеси в блок else: ведь только там они и нужны
а почему нельзя как у меня? у тебя ведь тоже они внутри цикла созданы.
Зачем math, если есть sum()?
не знал о ее существовании, как и о min и max.
Зачем превращать число (len(b)) в число, если оно и так число ?
z=int(b) Почему ты преобразовываешь массив в число?
они класс лист имеют
nokados
лист это почти массив.Пусть
L = [1,2,3]
Количество элементов в списке - len
Например:
>>> len(L)
3
>>> int(L)
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    int(L)
TypeError: int() argument must be a string or a number, not 'list'

user437
а почему нельзя как у меня? у тебя ведь тоже они внутри цикла созданы.
Питон же интерпритируемый.
Изначально у тебя нет переменных. Предположим, что пользователь сразу нажал Enter. Тогда вылезет ошибка, что такой переменной нет.

Хотя min из путого списка тоже выдаст ошибку, тогда правильнее было бы проверить длину b перед выводом. Например так:
import math
b=[]
while True:
    try:
        a=input('Введите число: ')
        if a != '':
            b.append(int(a))
        else:
            s=len(b)
            if s == 0:
                print('Ничего не передано')
                break #или continue, чтобы что-нибудь ввести
            summa = sum(b)
            sred = summa/s
            print('Введенные числа:', b,
                  "Количество чисел", s,
                  'Среднее число = ', sred,
                  "Минимальное число = ", min(b),
                  "Максимальное число = ", max(b))
            break
    except ValueError:
        print('Неверно введено число или оно не целое')
        continue

user437
Изначально у тебя нет переменных. Предположим, что пользователь сразу нажал Enter. Тогда вылезет ошибка, что такой переменной нет.
там мы же ввод записываем в ссылку а.
я читал, что переменные в любом месте можно создать.
лист это почти массив
что касаемо ссылок объектов – строковый тип только у строк, а у всех остальных - числа, списки и др. коллекции относятся к числовым?
nokados
user437
там мы же ввод записываем в ссылку а.
я читал, что переменные в любом месте можно создать
В этом то и проблема. Давай я побуду в роли интерпритатора и разберу все тобою/мною написанное по строкам, если переменные объявляются в блоке if a != '':
b=[]
Создаем пустой список c именем b.
while True:
Запускаем бесконечный цикл
    try:
Указываем, что в следующем блоке хотим отлавливать ошибки. Смотрим в except и запоминаем, какие типы ошибок хотим отлавливать.
        a=input('Введите число: ')
Выводим строку ‘Введите число: ’ и считываем что-то из стандартного потока ввода в виде строки. Считанное записываем в переменную a.
Предположим, юзер ничего не ввел и просто нажал Enter. Тогда в переменной a у нас будет пустая строка - ''
        if a != '':
Проверяем, что a не равно пустой строке. Так как на самом деле a равно пустой строке, то условие a != ‘' не выполняется, то есть a != ’' вернет ложь - False. Значит в ветвлении if идем в блок else (иначе)
      ...  
        else:
            print('Введенные числа:', b,
                  "Количество чисел", s,
                  'Среднее число = ', sred,
                  "Минимальное число = ", min(b),
                  "Максимальное число = ", max(b))
Тут нас print просит что-то вывести. Смотрим что. Ага, во-первых нужно вывести строку ‘Введенные числа:’. Окей, это можно. Нужно вывести что-то еще? Да, нужно вывести строковое представлении переменной b. Ищем эту переменную в памяти. Да, такая есть - это список. Просим его вернуть строковое представление списка. Он возвращает
'[]'
. Дописываем его к первой строке. Нужно вывести что-то еще? Да, нужно вывести строку “Количество чисел”. Это легко, дописываем ее к прошлым двум. Нужно вывести еще что-то? Да, нужно вывести строковое представление переменной s.
Ищем эту переменную в памяти. Баа! А ее там нет. Мы не знаем, что выводить. О! Надо вывести ошибку, что нет такой переменной. Только, как мы помним мы хотели обработать ошибки (try) - так что проверяем нет ли такого типа ошибок в блоке except. Его там нет, так что выводим:
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
print(s)
NameError: name 's' is not defined

user437
что касаемо ссылок объектов – строковый тип только у строк, а у всех остальных - числа, списки и др. коллекции относятся к числовым?
Я даже не понял, что значит эта фраза.
py.user.next
nokados
        else:
            s=len(b)
            summa = sum(b)
            sred = summa/s
            print('Введенные числа:', b,
                  "Количество чисел", s,
                  'Среднее число = ', sred,
                  "Минимальное число = ", min(b),
                  "Максимальное число = ", max(b))
            break

Это дело лучше на ходу вычислять. Даже среднее арифметическое ;)

Если пользователь подаст поток из 1000000 чисел, программа их прочитает, а потом будет проходить их снова и снова, чтобы вычислить сумму, минимальный, максимальный и среднее арифметическое.
А можно только прочитать и сразу выдать результат.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB