如何使我的程序识别item是字符串还是intiger?

时间:2018-07-24 15:09:07

标签: python-3.x

我正在做一些有趣的python挑战,我发现了一个挑战,该挑战告诉我编写一个接受输入并在消息中打印数字的程序。 但是,当我运行该程序时,它只打印与消息中字母相同的数字[],并且不识别字母是否实际上是数字,它只是将每个字母视为字符串并打印为空正方形。

代码如下:

WORDS = []
NUMBERS = []
Sentence = input()
for item in Sentence:
    if item == str():
        WORDS.append(item)
    if item == int():
        NUMBERS.append(item)

    print(('[%s]' % ', '.join(map(str, NUMBERS)))) 

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这可能就是您的意思。您必须先拆分句子。 所有结果项均为字符串类型,因此isinstance将无济于事。

str.isdigit()检查字符串是否仅包含数字。如果是数字,则可以使用int将其转换为整数。

WORDS = []
NUMBERS = []
Sentence = input()
for item in Sentence.split(): 
    if item.isdigit():
        NUMBERS.append(int(item))
    else:
        WORDS.append(item)

    print(('[%s]' % ', '.join(map(str, NUMBERS)))) 

如果您不先进行拆分,它也可以工作,但是在WORDS列表中仅提供单个字符,而在NUMBERS列表中仅提供单个数字。

答案 1 :(得分:1)

通常使用isinstance(obj, cls)进行类型检查:

x = 42
print(isinstance(x, int))
print(isinstance(x, str))

但是在您的情况下,由于input()始终返回一个字符串(由数字字符组成的字符串仍然是字符串),因此该方法不起作用,因此正确的解决方案是检查该字符串是否仅由数字字符组成(如果需要适当的int,最终可以从中构建int)。

此外,input()返回一个字符串,并且从您的命名(WORDS)开始,我假设您要迭代不同的单词,而不是像实际那样对每个字符进行迭代:

words = []
numbers = []
sentence = input()

for item in sentence.strip().split():
    if item.isnumeric():
        numbers.append(int(item))
    else:
        words.append(item)

print(('[%s]' % ', '.join(map(str, numbers)))) 

答案 2 :(得分:-1)

使用内置的mvn clean compile -X函数:

isinstance