从包含以逗号分隔的数字的字符串创建列表;蟒蛇 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
并在测试为假时中断。您的循环在第一次迭代时返回 True
或 False
,因此您不希望循环中的两个 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 检查以逗号分隔的一串数字是不是包含数字
解析以逗号分隔的std :: string [duplicate]