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ではありません」と言って無限に実行されます

3回目の編集

    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

いくつかの問題があります。

  • 角括弧を使用して iterable 内の要素にアクセスします: a[1],
  • 1 つ上のレベルに移動index = lengthします。ifと の間にあることでループを壊していますelif
  • printカンマが 1 つありません。

それを行うより良い方法は次のようになります。

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

まず、非常に簡単なアドバイスです。'string' のような名前の変数を使用すると頭痛の種になります。

したがって、あなたが書いたコードは、最初の「a」の前の各文字位置を確認する必要があるが、実際のではないこと、「a」が文字列内にあるかどうかを知る必要があること、およびそうでないことを示しています最初の 'a' の後のすべての文字を気にします。これらの目標は私には少しありそうにないように見えるので、あなたの本当の質問は、あなたが尋ねた方法とは少し異なると思います.

ここで 2 つの根本的な質問が見られます。

1. 特定の文字列の最初の 'a' のインデックスを見つけるにはどうすればよいですか? これがあなたの主な関心事である場合、あなたがする必要があるのは

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

foo.find(bar)bar のインデックス、または-1foo にまったく含まれていない場合は、インデックスが表示されます。ただし、 bar がどこにあるのかさえ気にせず、そこにあることを確認する必要がある場合は、bar in foo代わりに使用してください。

2. 文字列内の各文字を調べるにはどうすればよいですか? 多くの場合、Python では繰り返しをビルドする必要はありませんfor。Python は構造を提供し、面倒な作業を自動的に行います。この例では、本当に必要な場合は事前に一致した文字の位置を追跡できますが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

各ループの後に atをインクリメントする必要があり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、この特定の目的のためにループの代わりに使用する必要があります。

于 2012-10-06T02:23:03.650 に答える