我正在做一些有趣的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))))
有什么想法吗?
答案 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