Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2021, 15:41   #1
Prototipe
Пользователь
 
Регистрация: 12.08.2021
Сообщений: 13
Злость Генератор случайных чисел

Всем привет! Пишу программу где генерируется матрица из чисел. Пользователь сможет указать число строк и столбцов + диапазон. Написал образцовый код из книги Саммерфилда. После вывода в cmd, выходит ошибка имени "minimum". Проверил несколько раз код, не определил конкретную проблему. В чем именно состоит проблема? Почитал на сайтах причины, но не удалось серавно выявить ошибку.
Вот сам код
Код:
import random

def get_int(msg, minimun, default):
    while True:
        try:
            line = input(msg)
            if not line and default is not None:
                return default
            i = int(line)
            if i < minimum:
                print("must be >= ", minimum)
            else:
                return i
        except ValueError as err:
            print(err)

rows = get_int("rows: ", 1, None)
columns = get_int("columns: ", 1, None)
minimum = get_int("minimum(or Enter for 0): ", - 1000000, 0)

default = 1000
if default < minimum:
    default = 2 * minimum
maximum = get_int("maximum(or Enter for "+str(default)+ "): ", minimum, default)

row = 0
while row < rows:
    line = ""
    column = 0
    while column < columns:
        i = random.randint(minimum, maximum)
        s = str(i)
        while len(s) < 10:
            s = "" + s
        line += s
        column += 1
    print(line)
    row += 1
Вот вывод в cmd
Код:
D:\py3dir\свои программы>python generate.py
rows: 4
Traceback (most recent call last):
  File "D:\py3dir\свои программы\generate.py", line 17, in <module>
    rows = get_int("rows: ", 1, None)
  File "D:\py3dir\свои программы\generate.py", line 10, in get_int
    if i < minimum:
NameError: name 'minimum' is not defined
Prototipe вне форума Ответить с цитированием
Старый 18.08.2021, 15:50   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Код:
def get_int(msg, minimun, default):
Код:
            if i < minimum:
                print("must be >= ", minimum)
ForenLi вне форума Ответить с цитированием
Старый 18.08.2021, 15:57   #3
Prototipe
Пользователь
 
Регистрация: 12.08.2021
Сообщений: 13
По умолчанию

ForenLi, блин... как же я не увидел это. В самом начале. Спасибо вам! А он всё ссылает на другое. Смотрел и не увидел.
Prototipe вне форума Ответить с цитированием
Старый 18.08.2021, 16:45   #4
Prototipe
Пользователь
 
Регистрация: 12.08.2021
Сообщений: 13
По умолчанию

ForenLi, ещё такой момент. Если cmd возвращает пустую строку при выводе матрицы, то ошибка в коде получается?
Код:
d:\py3dir\свои программы>python generate.py
rows: 4
columns: 2
minimum(or Enter for 0): 10
maximum(or Enter for 1000): 20
_
Prototipe вне форума Ответить с цитированием
Старый 18.08.2021, 17:00   #5
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Так оно не возвращает, оно циклится.
Код:
        while len(s) < 10:
            s = "" + s
s же не меняется, а соотвествено и len(s)
ForenLi вне форума Ответить с цитированием
Старый 24.08.2021, 19:03   #6
Prototipe
Пользователь
 
Регистрация: 12.08.2021
Сообщений: 13
По умолчанию

ForenLi, видимо я не до конца вас понял. Ведь len(s) зависит от S, которое зависит от числа в кавычках. Условие выполняется, если оно меньше 10. Почему то у автора в книге программа запустилась с этим кодом. Или задача специально с подвохом?

Последний раз редактировалось Prototipe; 24.08.2021 в 19:07.
Prototipe вне форума Ответить с цитированием
Старый 24.08.2021, 20:14   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Prototipe
Цитата:
Ведь len(s) зависит от S, которое зависит от числа в кавычках. Условие выполняется, если оно меньше 10. Почему то у автора в книге программа запустилась с этим кодом.
Ваш код (взял немного больше чем ForenLi:
Код:
while column < columns:
        i = random.randint(minimum, maximum)
        s = str(i)
        while len(s) < 10:
            s = "" + s
        line += s
        column += 1
Во вложенном цикле while проверяется длина строки.
Если длина строки меньше 10, то выполняется тело цикла.
В теле цикла пустое значение добавляется в голову старой строки s и формируется новая строка.
У пустого значения нет длины и поэтому len(s) остаётся неизменяемой.
Это вечный цикл. Для теста вставьте, например, пробел:
Код:
s = " " + s
Тут между двойными кавычками есть символ пробела.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.08.2021, 20:54   #8
Prototipe
Пользователь
 
Регистрация: 12.08.2021
Сообщений: 13
По умолчанию

ViktorR, спасибо! В самом деле проблема была в пробеле. Этой тонкости я не заметил. Теперь буду знать.
Prototipe вне форума Ответить с цитированием
Старый 25.08.2021, 01:32   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Еще листинги часто страдают при переводе книги, но в данном случае пробел есть как в оригинале, так и в переводе. А еще совет - поставьте какую-нибудь IDE и пишите код в ней. Например, Eclipse (с установленным PyDev) мне в вашем коде сразу подчеркнул "minimun" как неиспользуемый параметр, а "minimum" как необъявленную переменную.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 25.08.2021 в 03:05.
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генератор случайных чисел Nicolas_46 Microsoft Office Excel 9 03.12.2012 14:35
генератор случайных чисел dearkato Помощь студентам 4 30.10.2011 13:16
Генератор случайных чисел Evgenii(Евгений) Помощь студентам 6 23.01.2011 22:41
Генератор случайных чисел Костян Пират Общие вопросы Delphi 8 23.01.2011 22:08
Генератор случайных чисел Creativety Фриланс 10 27.12.2010 12:33