1

これがばかげた質問であれば申し訳ありませんが、私はPythonを学んでいるだけで、これを理解することはできません. :)

私のプログラムは、ユーザーが入力した州の首都を出力することになっています。10 回連続して動作する場合もあれば、3 回連続して動作する場合もあり、状態を入力すると停止します。再起動して、停止した状態で入力すると、問題なく動作します....ランダムな回数だけ、再び停止します。私は何を間違っていますか?また、私のコードはひどいですか?これにどのような種類のコードを使用すればよいかわからなかったので、機能させることができるものは何でも入れました。

    x = str(raw_input('Please enter a sate: ' ))
    while x == 'Alabama':
        print 'Montgomery is the capital of', x
        x = str(raw_input('Please enter a state: '))
    while x ==  'Alaska':
        print 'Juneau is the capital of', x
        x = str(raw_input('Please enter a state: '))                  
    while x == 'Arizona':
        print 'Phoenix is the capital of', x
        x = str(raw_input('Please enter a state: ' ))
    while x == 'Arkansas':
        print 'Little Rock is the capital of', x
        x = str(raw_input('Please enter a state: '))'
4

3 に答える 3

5
  1. 複数のループではなく、if1つの大きなループ内で複数のステートメントを使用することを意味します。このコードでは、whileループを通過すると、そのループに戻ることはありません。このコードは、アルファベット順に状態名を付けている場合にのみ機能します。whilewhile

  2. このようにしないでください!Python辞書を使用してそれを行うためのはるかに良い方法があります。

    capitals = {"Alabama": "Montgomery", "Alaska": "Juneau", "Arizona": "Phoenix", "Arkansas": "Little Rock"}
    while True:
        x = str(raw_input('Please enter a state: ' ))
        if x in capitals:
            print capitals[x], "is the capital of", x
    

そうしないと、50の州すべてをカバーしたい場合、ほぼ同一の行が50ペアになることになります。

于 2012-07-24T17:31:31.957 に答える
1

while私はあなたがループを理解していないと思います。基本的に、

while condition:
    dostuff()

条件が真である間、何かをします。条件が偽になるとすぐに先に進みます。私はあなたが探しているものは次のようなものだと思います:

x=True
while x 
   x=raw_input('please enter a state'):
   if x == 'Alabama':
      ...
   elif x == 'Alaska':
      ... 

bool('')これは、ユーザーがEnterキーを押すまで永久ループします(FalsePythonの場合)

ただし、それを行うためのはるかに優れた方法は、辞書を使用することです。

state_capitals={'Alabama':'Montgomery', 'Alaska':'Juneau'}
x=True
while x 
   x=raw_input('please enter a state'):
   print '{0} is the capital of {1}'.format(state_capitals[x],x)

このようにするとKeyError、悪い資本が与えられたときにそれが発生します(必要tryに応じてブロックを使用してキャッチすることができます)。

于 2012-07-24T17:31:40.653 に答える
0

正直なところ、それはひどいものではありません。ただし、初心者である可能性が高いため、そのようなことが起こります。

このタスクdictでは、country=>capital マッピングを含む を使用し、国名を1 回読み取る必要があります。

capitals = {'Alabama': 'Montgomery',
            'Alaska': 'Juneau',
          ...}
state = raw_input('Please enter a state: ')
if(state in capitals):
    print '{0} is the capital of {1}'.format(capitals[state], state)
else:
    print 'Sorry, but I do not recognize {0}'.format(state)

whileユーザーが複数の状態に入ることができるようにループを使用する場合は、コード全体をwhile True:ブロックでラップしif not state: break、行の直後に使用raw_inputして、ユーザーが何も入力しない場合にループを中断することができます。

于 2012-07-24T17:33:43.737 に答える