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

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

02.09.2020, 15:01. Показов 12678. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru