【问题标题】:Extract numbers from a string in python without the use of isdigit or re. tools在不使用 isdigit 或 re 的情况下从 python 中的字符串中提取数字。工具
【发布时间】:2020-01-22 01:14:33
【问题描述】:

假设我有一个由用户输入生成的整数字符串,其中每个整数用空格分隔(例如下面的代码)...

如何搜索该字符串并分别存储每个整数以供以后在程序中使用? (即,将每个整数分配给自己的变量)我不能使用 isdigit 也不能​​使用 re 工具,也不能将整数存储到列表中。

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

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

允许我使用的东西:字符串方法、索引查找/搜索方法、for 循环、if 语句、while 循环。

【问题讨论】:

  • 将整数存储在列表中。
  • 我也不允许使用列表。更新帖子以反映该规范。
  • 您不再使用上一个问题中的列表。如果将来用户必须输入大约 100 华氏度,您是否打算使用 100 个变量?
  • 你可以使用字典吗?
  • 不用isdigit,你可以看看是in "0123456789"还是in {"0", "1", ...}

标签: python string input int


【解决方案1】:

我不确定您的用例是什么,而且我想不出一种方法可以将数字分配给循环中的变量,如果不允许使用循环,您必须这样做。我能想到的唯一方法是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

您可以将 print 替换为您真正想做的任何事情。 如果允许使用字典、集合或元组,这完全是徒劳的。

【讨论】:

    【解决方案2】:

    这样的东西会使用切片将字符串解析为空格分隔的字符串...(我注意到第一个答案是在我处理这个问题时出现的,但这有点不同,所以...)

    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
    

    这更像是一种 C 方法,非常不符合 Python 风格,但却是标准的编程方式。如果您只有 5 个用户条目,这也许是可以管理的。如果您不能使用这些变量的列表,或者如果您有未知数量的用户条目,或者如果您必须检查以确保用户实际输入的是数字而不是字母,则需要做更多的工作,但是这是基本的 C 字符串解析器。我想知道你是否想深入研究 Python 内部结构很有用。

    如果您需要将每个提取的字符串转换为 int,并且允许异常,请将其放在 if 语句中以检查类型正确性:

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

    请注意,如果您绝对不能使用列表(如上述答案中的 * 或 exec),那么唯一可能的选择是继续切掉字符串的末尾,即您必须在在每个 if 语句的结尾,然后再写 4 次 for 循环,每次手动更改变量名。

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

    如果您有可变数量的用户条目,这当然行不通。而且非常乏味......我怀疑教练可能有不同的意图。请注意,所有这一切的真实过程只是:

    result = [int(x) for x in mystr.split(' ') if x.isdigit()]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2020-05-19
      • 2022-09-27
      • 1970-01-01
      • 2018-06-06
      • 2014-04-23
      • 2022-01-22
      相关资源
      最近更新 更多