有很多方法可以解决这个问题。正则表达式是工具之一。考虑到这是你的第二门编程课程,我建议不要使用正则表达式。相反,我将尝试使用更基本的 Python 工具和概念。
首先在空格处拆分字符串:
words = text.split()
这会将字符串拆分'I am a robot'
为单词列表:['I', 'am', 'a', 'robot']
. 请注意,这不会拆分标点符号。'I am a robot.'
会变成['I', 'am', 'a', 'robot.']
. 注意末尾的点'robot.'
。对于其余的答案,我将假装没有标点符号,因为这会使超出第二门编程课程范围的事情变得复杂。
现在,无论大小写如何,您都可以words
过滤'robot'
:
robots = []
for word in words:
if word.lower() == 'robot':
robots.append(word)
这个循环也可以这样写:
robots = [word for word in words if word.lower() == 'robot']
这称为列表推导,基本上只是编写循环将某些项目从列表收集到另一个列表的简洁方法。如果您还没有学习列表理解,那么请忽略这部分。
从输入开始,'I am a robot and you are a ROBOT and we are RoBoT but not strobotron'
列表robots
将是['robot', 'ROBOT', 'RoBoT']
. 'strobotron'
不在列表中,因为它不等于'robot'
。这解决了 find'robot'
但不是'strobotron'
.
如果robots
列表为空,那么您就知道根本没有机器人。如果它不是空的,那么您可以检查小型或大型或中型机器人。
if not robots:
print('No robots here.')
elif 'robot' in robots:
print('There is a small robot in the line.')
elif 'ROBOT' in robots:
print('There is a big robot in the line.')
else:
print('There is a medium sized robot in the line.')
第一个条件 ( if not robots:
) 是使用称为隐式布尔值的 Python 机制。几乎任何东西都可以在这样的 if 条件中使用,并且它将被隐式转换为布尔值。在大多数情况下,如果这个东西是“空的”,它就会被认为是假的。
注意 if else 链中条件的顺序。您必须先检查一个空列表,否则 else 部分将不起作用。逻辑是这样的:如果列表不为空并且列表中没有小型或大型机器人,那么列表中的任何机器人都必须是中等的。
您的问题描述有歧义。如果生产线上同时有小型和大型(和中型)机器人怎么办。它应该报告两者吗?如果两者都符合,则当前代码将仅报告小型机器人。这是因为它首先检查一个小型机器人,然后跳过其余的(这就是 的语义elif
)。
要报告小型和大型(和中型)机器人,您可以这样做:
smallrobots = []
largerobots = []
mediumrobots = []
for robot in robots:
if robot == 'robot':
smallrobots.append(robot)
elif robot == 'ROBOT':
largerobots.append(robot)
else:
mediumrobots.append(robot)
if not robots:
print('No robots here.')
if smallrobots:
print('There is a small robot in the line.')
if largerobots:
print('There is a big robot in the line.')
if mediumrobots:
print('There is a medium sized robot in the line.')
请注意,elif
现在仅在循环内。仅if
用于报告意味着如果找到小型机器人,它将不会跳过中型机器人。
奖励:您现在甚至可以区分是否有一个或多个小型机器人排队:
if len(smallrobots) == 1:
print('There is a small robot in the line.')
elif len(smallrobots) > 1:
print('There are small robots in the line.')