Извлечение чисел из строки в Python без использования isdigit или re.инструменты - PullRequest
0 голосов
/ 21 сентября 2019

Допустим, у меня есть строка целых чисел, сгенерированная пользовательским вводом, где каждое целое число разделено пробелом (например, код ниже) ...

Как я могу искать в этой строке и сохранять каждое целое числоотдельно для использования в дальнейшем в программе?(IE присваивает каждому целому числу свою собственную переменную) Я не могу использовать isdigit и не могу использовать инструменты re, и я не могу сохранить целые числа в списке.

 userEntry = input("Please enter a Fahrenheit temperature: ")

for i in range(4):
    userEntry += " " + input("Please enter another fahrenheit:")

Вещи, которые мне разрешено использовать:строковые методы, методы поиска / поиска по индексу, для циклов, операторов if, циклов while.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Примерно так будет разбирать строку на строки, разделенные пробелами, используя кусочки ... (Я заметил, что первый ответ пришел, когда я работал над этим, но это немного отличается, так что ...)

def extractor(mystr):
    start = 0
    for a in range(len(mystr)):
        if mystr[a] == ' ' or mystr[a] == len(mystr) - 1:
            temp = mystr[start:a]
            print(temp)
            start = a + 1

Это больше похоже на подход на языке Си, очень непифонический, но стандартный тариф программирования.Если у вас будет только 5 пользовательских записей, это возможно.Если вы не можете использовать список этих переменных, или если у вас есть неизвестное количество записей пользователя, или если вам нужно проверить, чтобы убедиться, что пользователь фактически ввел цифру, а не букву, то требуется дополнительная работа, ноэто основной синтаксический анализатор C-строки.Полезно знать, если вы когда-нибудь захотите погрузиться во внутренности Python, я полагаю.

Если вам нужно преобразовать каждую извлеченную строку в int, и исключения допускаются, поместите это в оператор if, чтобы проверить правильность типа:

try:
    myvar1 = int(temp)
except ValueError:
    print("Not an int")

Обратите внимание, что если вы абсолютно не можете использовать списки (* или exec, как в приведенном выше ответе), то единственно вероятный вариант - продолжать вырезать конец строки, то есть вам придетсясделайте что-то вроде следующего в конце каждого оператора if, затем напишите, что цикл for повторяется еще 4 раза, изменяя имя переменной каждый раз вручную.

mystr = mystr[start:len(mystr)]
break

Это, конечно, не будет работать, если у вас естьпеременное количество записей пользователя.И это невероятно утомительно ... Я подозреваю, что инструктор мог задумать что-то другое.Обратите внимание, что реальный процесс для всего, что просто:

result = [int(x) for x in mystr.split(' ') if x.isdigit()]
0 голосов
/ 21 сентября 2019

Я не уверен, каков ваш вариант использования, и я не могу придумать способ, которым вы можете присвоить числа переменной в цикле, что вы должны сделать, если вам не разрешено использовать цикл.Я могу думать только о exec, и я не чувствую, что это разрешено для вашей задачи.Независимо от того, я публикую ответ, если он пригоден для использования:

last_space_index = 0
characters_checked = 0
var_num = 1
userEntry = "12.8 -15.8 125.9 0 -40.0"
for character in userEntry:
    characters_checked += 1
    if character == ' ':
        number = float(userEntry[last_space_index:characters_checked])
        var_name = 'var'+str(var_num)
        var_num += 1
        expression = var_name + ' = number'
        # expression becomes 'var1 = number'
        exec(expression)
        last_space_index = characters_checked
last_number = float(userEntry[last_space_index:])
var_name = 'var'+str(var_num)
expression = var_name + ' = last_number'
exec(expression)
# if you know the number of variables you are going to get
print(var1, var2, var3, var4, var5)
# else:
# for i in range(1,var_num+1):
#    var_name = 'var'+str(i)
#    command = 'print('+var_name+')'
#    exec(command)

Вывод:

>>> 12.8  -15.8  125.9  0  -40.0

Вы можете заменить печать тем, что действительно хотите сделать.И это совершенно бесполезно, если вам разрешено использовать словарь, наборы или кортеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...