Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python循环中查找第一个数字索引?_Python_Loops_While Loop_Digits - Fatal编程技术网

在Python循环中查找第一个数字索引?

在Python循环中查找第一个数字索引?,python,loops,while-loop,digits,Python,Loops,While Loop,Digits,这是我发现的一个简单程序,它处理在输入字符串中查找第一个数字的问题。我很难理解的是 如果输入字符串[position].isdigit: 找到=真 这个表达式具体说明了什么,特别是inputString[position]部分。我们是在寻找第一个数字的位置/索引值,然后将循环分解为下面的print语句吗?python中的字符串可以用作序列,这意味着您可以使用索引访问其元素。例如: 维克托[0]是V 因此,在您的示例中,您正在检索字符串的一个元素字符。函数isdigit是一种字符串方法,它可以检查

这是我发现的一个简单程序,它处理在输入字符串中查找第一个数字的问题。我很难理解的是

如果输入字符串[position].isdigit: 找到=真


这个表达式具体说明了什么,特别是inputString[position]部分。我们是在寻找第一个数字的位置/索引值,然后将循环分解为下面的print语句吗?

python中的字符串可以用作序列,这意味着您可以使用索引访问其元素。例如: 维克托[0]是V

因此,在您的示例中,您正在检索字符串的一个元素字符。函数isdigit是一种字符串方法,它可以检查该字符是否为数字。

位置是迭代变量,就像for循环中一样。所以每次你找不到一个数字,你就转到字符串中的下一个字符

inputString[position]读取位置在字符串中的位置。因此,如果您的字符串是abcdefg,那么inputString[2]=c而不是b,因为python从0开始计数

.isdigit然后查看此位置是否为数字。如果是数字,则find=True,while循环停止。否则就继续下去


循环结束后,函数将根据inputString中是否有数字打印两条消息中的一条。

您正在查找位置处inputString的值。position首先初始化为零,然后在循环每个position notice position+=1时查看它是否为.isdigit

我们是否在寻找第一个数字的位置/索引值,以及 然后将循环分解为下面的print语句

是的,没错。它中断是因为一旦找到一个数字,在下一次迭代中whilenotfound条件将给出whilefalse并中断while循环。值得注意的是,存在短路,因此第二个条件甚至未进行评估

如果找不到一个数字,位置将递增,直到它等于列宁PutString,此时while循环通过第二个条件中断,即位置<列宁PutString

编写while循环的一种更具Pythonic/惯用的方法是通过for循环和枚举:

注意,在这个解决方案中,由于我们从1开始计数,我们可以利用这样一个事实:如果找到一个数字,它必须是真实的,即非零。因此,我们不需要额外找到的变量。

inputString[position]给出inputString中位置处的字符。例如,如果inputString=Foobar且position=3,则inputString[position]=b


当我们以这种方式找到一个数字时,则find变为True,while的计算条件变为False。程序离开循环并打印。

收集所有可能数字的索引,如果列表不为空,则打印0索引,否则如果列表为空,则打印无数字语句

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')

@让·弗朗索瓦·法布为什么不呢?在下一次迭代中,条件变为false,因为find变为true,循环中断,它迭代字符串,一旦得到一个数字,它就返回。correct。我没看到。这是一个红旗,表示不要使用while循环hi@VictorVasiliev,欢迎使用stackoverflow!不幸的是,你的答案有一些问题。尽管你大体上是正确的,但你误用了几个术语。我将编辑您的文本,使其在技术上更加正确。您是否认为将位置设置为1而不是0更方便,以避免混淆用户,因为编译器从0开始计数?这是一个偏好问题。您可以从1开始,然后检查位置
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')
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.')