0

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

此任务将实现从包含以逗号分隔的数字(它们之间可能有空格)的字符串创建列表的功能。例如,字符串 "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() 函数来检查字符串是否没有坏字符(例如字母)。如果有任何坏字符,它应该返回空列表。如果没有坏字符,它应该尝试从字符串中的数据构建列表。为此,它应该查看两个连续逗号之间的每个子字符串。如果该子字符串中没有点,则应将子字符串转换为整数。如果只有一个点(不多也不少),则应将其转换为浮点数。如果两个连续逗号之间的任何子字符串不能转换为整数或浮点数(例如“4.5.8”,因为它有太多点),该函数仍应返回空列表。暗示:

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
错误

先感谢您!

4

2 回答 2

1

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

你应该这样写:

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
于 2013-10-16T01:54:22.640 回答
0

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

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

于 2013-10-16T01:30:55.807 回答