从包含以逗号分隔的数字的字符串创建列表;蟒蛇 3

Posted

技术标签:

【中文标题】从包含以逗号分隔的数字的字符串创建列表;蟒蛇 3【英文标题】:Creating a list from a string that contains numbers separated by commas; Python 3 【发布时间】:2013-10-16 01:01:20 【问题描述】:

你好,首先我想说这是作业,所以我不想直接回答。问题是:

此任务将实现从包含以逗号分隔的数字的字符串创建列表的功能(它们之间可能有空格)。例如,字符串 "1,2,3, 4.5, 6.7, 8" 将成为列表:[1, 2, 3, 4.5, 6.7, 8]。 编写如下函数: is_numeric() - 此函数有一个字符串参数,如果字符串中的所有字符都是数字、逗号、空格或点,则返回 True。如果还有其他字符,该函数应返回 False。 string_to_list() - 此函数接受一个字符串参数并返回字符串中的数字列表。首先它应该调用 is_numeric() 函数来检查字符串是否没有坏字符(例如字母)。如果有任何坏字符,它应该返回空列表。如果没有坏字符,它应该尝试从字符串中的数据构建列表。为此,它应该查看两个连续逗号之间的每个子字符串。如果该子字符串中没有点,则应将子字符串转换为整数。如果只有一个点(不多也不少),则应将其转换为浮点数。如果两个连续逗号之间的任何子字符串不能转换为 int 或 float(例如“4.5.8”,因为它有太多点),该函数仍应返回空列表。提示:split() 方法可能对这项任务有用。 main() - main() 函数将从用户那里获取一个字符串,然后它将调用 string_to_list() 函数从用户字符串中构建一个列表,然后打印结果列表。接下来它将询问用户是否要继续。如果他们想继续,他们应该输入'y'。在这种情况下,函数(main)应该重复前面的步骤:询问用户输入,将其转换为列表,再次询问用户是否要继续。以此类推,直到用户不想继续,在这种情况下,他或她应该输入“n”。

我仅有的一段代码只检查字符串中的第一个字母,看它是数字还是字母。我需要检查是否有字母、数字、逗号、句点或空格。我真的迷失了阅读这个程序。我知道我需要从用户那里获取一个字符串,然后将该字符串放入一个列表中,前提是该字符串是可接受的输入之一(字母、数字、逗号、句点、空格) 以下是我的代码到目前为止和什么我的代码将在 shell 中读取。

s = input("Enter a set of numbers (integers or floats) separated by comma:")

def is_numeric(s):
    for char in list(s):
        if char.isdigit():
            return True
        if char.isalpha():
            return False
            break


if is_numeric(s) == True:
    print(s)
else:
    print('Error')

================================= 重启============== ===================

输入一组用逗号分隔的数字(整数或浮点数):1,2,3,4 1,2,3,4

================================= 重启============== ===================

输入一组以逗号分隔的数字(整数或浮点数):1,2,3,a 1,2,3,a

================================= 重启============== ===================

输入一组用逗号分隔的数字(整数或浮点数):a,1,2,3 错误

================================= 重启============== ===================

输入一组用逗号分隔的数字(整数或浮点数):1234a 1234a

================================= 重启============== ===================

输入一组以逗号分隔的数字(整数或浮点数):asdf3 错误

提前谢谢你!

【问题讨论】:

“我拥有的唯一一段代码只检查第一个字母”——如果您知道这一点,为什么不修复它?你甚至已经有了循环。另外,尝试编写程序的其余部分,假设is_numeric 工作正常。 删除“if char.isdigit(): return True”部分,你应该可以正确获得该功能。您只需要编写解析器来解析用逗号分隔的输入,然后检查每个分区上的 isumeric。 @Bogdan 这是我第一次使用 For 循环和定义函数,我尝试添加一个计数器来继续循环,但我没有任何运气。 我们还没有介绍解析器或解析器,所以我不知道你在说什么哈哈,但谢谢@justhalf 通过解析器,我的意思是“可以将输入字符串分隔成列表的代码行,其中包含输入字符串中以逗号分隔的元素” 【参考方案1】:

首先,您不希望循环返回 True 直到结束,但您希望它返回 False 并在测试为假时中断。您的循环在第一次迭代时返回 TrueFalse,因此您不希望循环中的两个 return 语句。其次,您可以创建一个列表或字符串,并使用它来检查每个字符是否在该列表中。在这种情况下,它将类似于",. "[",", ".", " "]

你应该这样写:

def is_numeric(s):

    for char in s:
        if not char.isdigit() and char not in [" ", ".", ","]:
            return False

    return True

这里,如果字符不是数字,或者字符不在[" ", ".", ","]列表中,函数返回False,自动结束循环。如果循环完成但没有返回值,则所有字符都符合您的条件,函数转到下一行并返回 True

编辑:

如果您想使用占位符变量,请将其设置为 True 并编写循环以将其设置为 False 如果不满足条件。如果循环不修改它,则整个字符串的条件为真,所以它仍然是True

def is_numeric(s):
    is_digit = True

    for char in s:
        if not char.isdigit() and char not in [" ", ".", ","]:
            is_digit = False
            break

    return is_digit

【讨论】:

您的代码在阅读时似乎可以运行,但是当我尝试运行它时,代码无法正常运行。 我使用了or 而不是and,但我清理并测试了它,所以应该可以。 好的,谢谢!当我第一次运行你的代码时,我会输入“a,b,c,d,e”,它会返回 a,b,c,d,e。但现在效果很好! 如果你喜欢这个答案,请选择顶部的“检查”接受它,谢谢! 再问一个问题!【参考方案2】:

你在课堂上讨论过正则表达式吗?如果是这样,您可能会使用这些。看看http://docs.python.org/2/howto/regex.html

如果不是,您可能需要将占位符变量设置为 true,循环检查每个字符,并在检测到错误字符时将占位符变量设置为 false。在遍历整个字符串之前,您不应该使用 return 语句。 (循环后)

【讨论】:

您好,我们应该制作占位符。检查是否存在错误字符,如果存在错误字符,我们将返回一个空白字符串。我们不会附加字符串以包含好的字符。 我的意思是我们不会附加列表来包含好的字符。

以上是关于从包含以逗号分隔的数字的字符串创建列表;蟒蛇 3的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 检查以逗号分隔的一串数字是不是包含数字

从逗号分隔的字符串 [XML/XSL] 创建选择下拉列表

解析以逗号分隔的std :: string [duplicate]

无法在 varchar2() 中保存逗号分隔的数字字符串

Python:试图从一个寻找可被 3 整除的数字的 for 循环中创建一个逗号分隔的列表

读取以逗号分隔的一串数字