Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 4, 2014 18:31:56

user437
Зарегистрирован: 2014-10-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

Здравствуйте! не работает программа. Вот задача:

А вот мой код:

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
навреное как-то с циклом налажал… не знаю…

Офлайн

#2 Окт. 4, 2014 20:13:40

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Не работает программа

TypeError: int() argument must be a string or a number, not ‘list’

Что именно не понятно? Как список в число перевести?



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Окт. 4, 2014 20:17:19

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Не работает программа

user437
не работает программа.
Симптомы ?



Офлайн

#4 Окт. 4, 2014 20:27:22

user437
Зарегистрирован: 2014-10-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

А у меня никаких ошибок нет при ее запуске…
Питон у меня 3.4.
После нажатия Enter должна ведь программа заканчиваться и выводить результат, а у меня она просто опять показывает – Введите число.

Офлайн

#5 Окт. 4, 2014 20:34:31

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

Ты 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



моя подпись

Отредактировано nokados (Окт. 4, 2014 20:36:48)

Офлайн

#6 Окт. 4, 2014 20:53:00

user437
Зарегистрирован: 2014-10-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

спасибо)
нет, я раньше паскаль немного изучал, а сейчас питон начал изучать.

Почему не создал переменные, а уже их используешь?
print('Введенные числа:', b, “Количество чисел”, s , ‘Среднее число = ’, sred, “Минимальное число = ”, z, “Максимальное число = ”, z)
Эти переменные даже не создадутся, когда в первой итерации провалится условие a == True
Создай их до цикла или вообще не создавай, а перенеси в блок else: ведь только там они и нужны
а почему нельзя как у меня? у тебя ведь тоже они внутри цикла созданы.
Зачем math, если есть sum()?
не знал о ее существовании, как и о min и max.
Зачем превращать число (len(b)) в число, если оно и так число ?
z=int(b) Почему ты преобразовываешь массив в число?
они класс лист имеют

Офлайн

#7 Окт. 4, 2014 21:13:51

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

лист это почти массив.Пусть

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



моя подпись

Отредактировано nokados (Окт. 4, 2014 21:15:00)

Офлайн

#8 Окт. 4, 2014 22:18:48

user437
Зарегистрирован: 2014-10-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

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

Офлайн

#9 Окт. 4, 2014 23:13:51

nokados
От: Ростов
Зарегистрирован: 2013-10-15
Сообщения: 52
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает программа

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
что касаемо ссылок объектов – строковый тип только у строк, а у всех остальных - числа, списки и др. коллекции относятся к числовым?
Я даже не понял, что значит эта фраза.



моя подпись

Отредактировано nokados (Окт. 4, 2014 23:16:45)

Офлайн

#10 Окт. 5, 2014 01:28:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Не работает программа

nokados
        else:
            s=len(b)
            summa = sum(b)
            sred = summa/s
            print('Введенные числа:', b,
                  "Количество чисел", s,
                  'Среднее число = ', sred,
                  "Минимальное число = ", min(b),
                  "Максимальное число = ", max(b))
            break

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

Если пользователь подаст поток из 1000000 чисел, программа их прочитает, а потом будет проходить их снова и снова, чтобы вычислить сумму, минимальный, максимальный и среднее арифметическое.
А можно только прочитать и сразу выдать результат.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version