嵌套语句Python编码

时间:2012-10-06 01:58:22

标签: python nested-loops

我需要帮助,我的编码有些不对劲,似乎无法弄清楚是什么......我确定它只是一个简单的错误,我现在似乎无法找到它

    string = raw_input("Enter String->")
    length = len(string)
    index = 0
    while index < length:
       if string(index) == 'a':
            print "Character found is a"
       index = length
       elif string(index) != 'a':
            print "Character", index"is not an a, sorry"

错误当然是“语法无效”

这是到目前为止的新代码

   string = raw_input("Enter String->")
   length = len(string)
   index = 0
   while index < length:
       if string[index] == 'a':
           print "Character found is a"
           index = length
       elif string[index] != 'a':
           print "Character", index,"is not an a, sorry"

从这里运行代码时,它无限地运行说“字符0不是”

第三次编辑

    string = raw_input("Enter String->")
    length = len(string)
    index = 0
    while index < length:
        if string[index] == 'a':
            index += 1
            print "Character found is a"
            break
        elif string[index] != 'a':
            print "Character", index, "is not an a, sorry"

6 个答案:

答案 0 :(得分:2)

index = length将直接跳到字符串的末尾。如果要检查每个字符,则需要使用index += 1

通常你会写这样的循环

string = raw_input("Enter String->")
for idx, c in enumerate(string):
   if c == 'a':
        print "Character found is a"
   else:
        print "Character", idx, "is not an a, sorry"

哪个更容易阅读并且更难以犯这样的错误

答案 1 :(得分:1)

索引访问是使用[i]完成的,而不是(i),表示函数调用。

所以你应该这样做:

if string[index] == 'a':

还要记下关于代码中其他问题的其他答案。

答案 2 :(得分:1)

你遇到了一些问题:

  • 使用方括号访问可迭代中的元素:a[1]
  • index = length向上移动一级。它会在ifelif之间打破你的循环。
  • print缺少一个逗号。

更好的方法是:

string = raw_input("Enter String->")

for index, character in enumerate(string):
   if character == 'a':
        print "Character found is a"
        break
   else:
        print "Character", index, "is not an a, sorry"

答案 3 :(得分:0)

print "Character", index"is not an a, sorry"

应该阅读

print "Character " + str(index) + " is not an a, sorry"

答案 4 :(得分:0)

你需要在每次循环后增加index,否则while循环将永远在同一个索引上运行:

string = raw_input("Enter String->")
length = len(string)
index = 0
while index < length:
    if string[index] == 'a':
       print "Character found is a"
       break
    else:
       print "Character" + str(index) + " is not an a, sorry"
       index += 1

但是,您应该研究@ gnibbler的建议,并将其用于while循环以用于此特定目的。

答案 5 :(得分:0)

首先,非常快速的建议 - 使用名称为'string'的变量会导致头痛。

所以,你写的代码告诉我你需要在第一个'a'之前看到每个字符位置而不是它的实际,你需要知道字符串中是否有'a',并且在第一个'a'之后你根本不关心任何字符。这些目标对我来说似乎不太可能,所以我怀疑你的真实问题与你提出的问题略有不同。

我真的看到两个根本问题:

<强> 1。如何找到给定字符串中第一个'a'的索引?如果这是您主要关注的问题,那么您需要做的就是

response = raw_input('Prompt: ')
index_a = response.find('a')

foo.find(bar)将为您提供bar的索引,如果它根本不在foo中,则为-1。但是,如果您甚至不关心栏的位置,只需要验证它在哪里,请改用bar in foo

<强> 2。如何检查字符串中的每个字符? Python在许多情况下不会使您构建迭代 - 它为您提供了for结构,为您完成了gruntwork。如果您确实需要,此示例将让您跟踪预匹配的字符位置,但请注意counter与流控制没有任何关系:

response = raw_input('Prompt: ')
counter = 0
for r in response:
    if r is 'a':
        print('We found it.')
        break
    else:
        print('Not ' + str(counter))
        counter += 1