found = False
position = 0
while not found and position < len(inputString):
if inputString[position].isdigit():
found = True
else:
position += 1
if found:
print('first digit is at position', position)
else:
print('There are no digits in the string')
这是我发现的一个简单程序,用于查找输入字符串中的第一个数字。我无法理解的是...
if inputString[position].isdigit():
found = True
此表达式确切说明了什么,特别是inputString[position]
部分。我们在寻找第一个数字的位置/索引值,然后将循环分成下面的打印语句吗?
答案 0 :(得分:1)
position
是您的迭代变量,就像在for
循环中一样。因此,每次找不到数字时,您就转到字符串中的下一个字符。
inputString[position]
读取position
在字符串中的位置。因此,如果您的字符串为abcdefg
,则为inputString[2]= c
(不是b
,因为python从0开始计数。)
然后.isdigit()
会检查此位置是否为数字。如果是数字,则found = True
,while循环停止。 (否则它将继续。)
循环结束后,该函数将根据inputString
中是否存在数字来打印两个消息之一。
答案 1 :(得分:1)
您正在寻找inputString
位置上的position
的值。 position
首先被初始化为零,然后它同时循环每个位置(注意position += 1
)以查看是否.isdigit()
。
答案 2 :(得分:1)
我们在寻找第一位数的位置/索引值吗? 然后将循环破坏到下面的打印语句中?
是的,是的。之所以中断,是因为一旦找到一个数字,在下一次迭代中,while not found
条件将给出while False
并中断while
循环。值得注意的是and
发生了短路,因此第二个条件甚至都没有评估。
如果未找到数字,则position
递增直到等于len(inputString)
,此时while
循环通过第二个条件(即position < len(inputString)
)中断。
编写while
循环的一种更Python化/惯用的方法是通过for
循环和enumerate
:
for idx, val in enumerate(inputString, 1):
if val.isdigit():
position = idx
break
else:
position = 0
if position:
print('first digit is at position', position)
else:
print('There are no digits in the string')
请注意,在此解决方案中,由于我们从1开始计数,因此我们可以利用以下事实:如果找到一个数字,则该数字必须为“ Truthy”,即非零。因此,我们不需要额外的found
变量。
答案 3 :(得分:0)
inputString[position]
给出输入字符串中位置的字符。例如,如果inputString =“ Foobar”且position = 3,则inputString [position] =“ b”。
当我们以这种方式找到一个数字时,found变为True,而while的评估条件变为False。该程序将退出循环并打印。
答案 4 :(得分:0)
收集所有可能数字的索引,如果列表不为空,则打印0
索引,否则,如果列表为空,则打印no digits语句。
lst = [i for i, v in enumerate(s) if v.isdigit()]
if len(lst):
print(f'First digit is at postion {lst[0]}')
else:
print('There are no digits in the string.')
答案 5 :(得分:-1)
python中的字符串可以用作序列,这意味着您可以使用索引来访问其元素。例如:
"Victor"[0]
是V。
因此,在您的示例中,您正在检索字符串的元素(字符)之一。函数isdigit()
是一个字符串方法,可以检查该字符是否为数字。