0

我需要帮助,我的编码有问题,似乎无法弄清楚是什么..我确定这是一个简单的错误,只是我目前似乎无法找到它

    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 不是 a”

第三次编辑

    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"
4

6 回答 6

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"

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

于 2012-10-06T02:01:14.203 回答
1

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

所以你应该这样做:

if string[index] == 'a':

还要记下有关您的代码的其他问题的其余答案。

于 2012-10-06T02:01:13.883 回答
1

你有几个问题:

  • 使用方括号访问可迭代的元素: a[1],
  • 上一层index = length楼。if它在 an和 an之间打破了你的循环elif
  • 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"
于 2012-10-06T02:06:02.463 回答
0

首先,非常快速的建议 - 使用名称如“字符串”的变量会导致头痛。

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

我真的在这里看到了两个根本问题:

1.如何找到给定字符串中第一个'a'的索引?如果这是您最关心的问题,那么您需要做的就是

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

foo.find(bar)会给你 bar 的索引,或者-1如果它根本不在 foo 中。但是,如果您甚至不关心 bar 在哪里,而只需要验证它是否存在,请bar in foo改用。

2. 如何检查字符串中的每个字符?在许多情况下,Python 不会让您构建迭代——它为您提供for结构,为您完成繁重的工作。如果您确实需要,此示例将让您跟踪预先匹配的字符位置,但请注意,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
于 2012-10-06T03:49:14.847 回答
0
print "Character", index"is not an a, sorry"

应该读

print "Character " + str(index) + " is not an a, sorry"
于 2012-10-06T02:01:00.057 回答
0

您需要index在每次循环后递增 at ,否则 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循环来实现此特定目的。

于 2012-10-06T02:23:03.650 回答