Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/64: Рейтинг темы: голосов - 64, средняя оценка - 4.56
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18

Ограничение ввода пользователю

02.09.2020, 15:01. Показов 12788. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как ограничить ввод пользователю, так чтобы он не мог вводить ничего кроме чисел, не использую try, числа при этом любые

Добавлено через 1 минуту
Тип переменных естетсвенно float

Добавлено через 5 минут
Хотел попробовать isdigit, но он не пропускат минус
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2020, 15:01
Ответы с готовыми решениями:

Ограничение на время ввода данных
import time as t import requests from bs4 import BeautifulSoup HOST = "https://amedia.online/" URL = "https://amedia.online/" ...

Ограничение ввода в QTable
Добрый вечер,форумчане! Подскажите,пожалуйста,как можно сделать "защиту от дурака" ? Так ,чтобы в ячейки таблицы можно было ввести...

Ограничение ввода в entry
Здравствуйте.Можно ли ограничить количество знаков после запятой вводимого в поле Entry числа float? Спасибо.

17
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
02.09.2020, 15:06
Цитата Сообщение от Xolog Посмотреть сообщение
Как ограничить ввод пользователю, так чтобы он не мог вводить ничего кроме чисел, не использую try, числа при этом любые
где, в чем? в консоли -наверное никак, в ГУИ обычно можно

Цитата Сообщение от Xolog Посмотреть сообщение
Тип переменных естетсвенно float
использовать трай с попыткой приведения к флоат

если и трай нельзя, то проверяй чтобы введенное не содержало букв и знаков кроме точки и минуса (а они только в единственном числе)
1
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
02.09.2020, 15:15  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
где, в чем? в консоли -наверное никак, в ГУИ обычно можно
как раз таки через консоль
Цитата Сообщение от Welemir1 Посмотреть сообщение
если и трай нельзя, то проверяй чтобы введенное не содержало букв и знаков кроме точки и минуса (а они только в единственном числе)
попробую спасибо
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
02.09.2020, 15:33
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re
 
REX_IS_FLOAT = re.compile(r'^-?((\d+\.?\d*)|(\.\d+))$')
 
 
def is_float(value: str) -> bool:
    return re.match(REX_IS_FLOAT, value) is not None
 
 
if __name__ == '__main__':
    value = input('value = ')
    while not is_float(value):
        value = input('value = ')
    value = float(value)
    print(value, type(value))
Code
1
2
3
4
5
value = asd
value = 123..s
value = 123..3
value = -1.4
-1.4 <class 'float'>
0
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
02.09.2020, 22:11  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def enter():
  global a, b, c
  a, b, c = input('Введите коэффициенты a, b и c через пробел:').split()
 
enter()
 
def NotLetters():
  global a, b, c
  if a.isdigit() == True:
    a = float(a)
    b = float(b)
    c = float(c)
  else:
    while a.isdigit() != True:
      print('Нужно ввести числа')
      enter()
 
NotLetters()
в общем я сделал так, наличие букв проверяет, но не пропускает точку и минус
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.09.2020, 22:59
Цитата Сообщение от Xolog Посмотреть сообщение
a.isdigit() == True
Зачем так писать?
Цитата Сообщение от Xolog Посмотреть сообщение
global a, b, c
Зачем использовать global?

Чем тебя не устраивает rрегулярное выражение?

--------------------------
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> import string
>>> pred = lambda s: all(ch in string.digits + "-. " for ch in s)
>>> def check(val):
    while not pred(val):
        pass
    return val
>>>
>>> check()
>>12
'12'
>>> check()
>>1 - 2
'1 - 2'
>>> check()
>>qqer13455
>>4r4ff343
>>1.12314
'1.12314'
>>>
P.S. Как настроить данный пример под себя - придумай сам.
0
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
02.09.2020, 23:00  [ТС]
пока что я могу только так, я только начал изучать питон
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.09.2020, 07:42
Цитата Сообщение от Xolog Посмотреть сообщение
попробую спасибо
Так и не попробовали

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while True:
    try:
        a, b, c = input('Введите коэффициенты a, b и c через пробел: ').split()
    except ValueError as e:
        print(e)
        continue
    try:
        a = float(a)
        b = float(b)
        c = float(c)
    except ValueError as e:
        print(e)
        continue
    break
print(a,b,c)
Добавлено через 3 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def enter():
    while True:
        try:
            a, b, c = input('Введите коэффициенты a, b и c через пробел: ').split()
        except ValueError as e:
            print(e)
            continue
        try:
            a = float(a)
            b = float(b)
            c = float(c)
        except ValueError as e:
            print(e)
            continue
        return a, b, c
 
a, b, c = enter()
print(a,b,c)
0
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
03.09.2020, 21:30  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Так и не попробовали
нельзя использовать try

Добавлено через 41 секунду
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def enter():
  global a, b, c
  a, b, c = input('Введите коэффициенты a, b и c через пробел:').split()
 
enter()
 
def NotLetters():
  global a, b, c
  while a.isdigit() != True:
    print('Нужно ввести числа')
    enter()
  if a.isdigit() == True:
    a = float(a)
    b = float(b)
    c = float(c)
немного переработал кстати
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.09.2020, 21:37
Xolog, а если b не будет isdigit?
1
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
03.09.2020, 21:38  [ТС]
Цитата Сообщение от ioprst Посмотреть сообщение
Xolog, а если b не будет isdigit?
спасибо что сказал, а то я делал тестовый образец и забыл дописать остальные переменные
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.09.2020, 21:58
Xolog, а дробные числа получится вводить? Отрицательные?
0
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
03.09.2020, 22:03  [ТС]
нет, но я работаю сейчас над этим, думаю реализовать с помощь str.find() и условия

Добавлено через 26 секунд
в общем то получилось даже, но теперь выдаёт ошибку при вводе букв
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.09.2020, 22:39
Цитата Сообщение от Xolog Посмотреть сообщение
думаю реализовать с помощь str.find() и условия
Я же тебе написал пример предиката, которые учитывает все условия: цифры, минус, точка и пробел.
0
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
03.09.2020, 22:54  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Я же тебе написал пример предиката, которые учитывает все условия: цифры, минус, точка и пробел.
не очень хочу использовать код который не понимаю, мне его потом сдавать ещё и наверняка будут вопросы по его работе

Добавлено через 48 секунд
Куда эффективнее со стороны обучения будет использовать свой, к которому ты в итоге пришёл

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def enter():
  global a, b, c
  a, b, c = input('Введите коэффициенты a, b и c через пробел:').split()
 
enter()
 
def Checking():
  global a, b, c
  while a.isdigit() != True or b.isdigit() != True or c.isdigit() != True:
    if a.find('.') or b.find('.') or c.find('.'):
      break
    elif a.find('-') or b.find('-') or c.find('-'):
      break
    else:
      print('Нужно ввести числа')
      enter()
  if a.isdigit() == True or b.isdigit() == True or c.isdigit() == True:
    a = float(a)
    b = float(b)
    c = float(c)
      
Checking()
 
d = b**2 - 4 * a * c
в общем вот, что я сейчас делаю. вылетает ошибка при вводе букв:
Traceback (most recent call last):
File "c:\Users\Xolod\Desktop\квадратное уравнение.py", line 24, in <module>
d = b**2 - 4 * a * c
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.09.2020, 23:00
Цитата Сообщение от Xolog Посмотреть сообщение
код который не понимаю,
Прочитай в документации. Там все описано.
0
 Аватар для Xolog
2 / 2 / 0
Регистрация: 19.07.2019
Сообщений: 18
03.09.2020, 23:18  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Прочитай в документации. Там все описано.
Хорошо, но пока мне интересно почему пропускается вся функция checking после того как я добавил к ней условий в цикле. У меня совершенно нет идей что не так
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.09.2020, 05:33
omg, ну сделай так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def is_float(n: str) -> bool:
    if n[0] == '-':
        n = n[1:]
    ls = n.split('.')
    if len(ls) == 1:
        return ls[0].isdigit()
    if len(ls) == 2:
        return ls[0].isdigit() and ls[1].isdigit()
    return False
 
def enter():
    while True:
        line = input('Введите коэффициенты a, b и c через пробел: ')
        ls = line.split()
        if len(ls) != 3:
            print()
            continue
        
        if not is_float(ls[0]):
            print()
            continue
        a = float(ls[0])
        
        #...
        
        return a, b, c
 
a, b, c = enter()
print(a,b,c)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2020, 05:33
Помогаю со студенческими работами здесь

Ограничение на время ввода данных
как поставить ограничение на время ввода данных в питоне к примеру #ввод данных num = int(input()) #если пользователь не ввел...

Ограничение ввода числовым диапазоном
Добрый день! Есть код. В нем нужно ограничить ввод букв, чтобы пользователь вводил только цифры от 1 до 8. При вводе иных цифр или букв...

Ограничение ввода буквенных значений для переменных
Есть код. Нужно ограничть ввод дынных посредством try\except. a = input('Значение a: ') A = int(a) b = input('Значение b: ') ...

Переключение между полями и ограничение пользовательского ввода
Здравствуйте. Подскажите как организовать следующую задачу на примере базового фрагмента. import tkinter from tkinter import* ...

Ограничение ввода всего кроме диапазона от 0 до 360 в Line Edit
Добрый день, подскажите пожалуйста, как ограничить ввод в Line Edit всего, кроме диапазона от 0 до 360 целых чисел. Изначально Line Edit...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru