1

如果这是一个荒谬的问题,我很抱歉,但我只是在学习 python,我无法弄清楚。:)

我的程序应该打印用户输入的任何状态的首都。有时会连续工作十次,有时会连续工作三次,然后在你输入一个状态后它就会停止。如果我重新启动它并输入它停止的状态,它将正常工作....随机次数,然后它会再次停止。我究竟做错了什么?我的代码也很糟糕吗?我不知道要使用什么样的代码,所以我只是把我能做的任何事情都扔进去了。

    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. 您的意思是在一个大循环中使用多个if语句while,而不是多个while循环。在这段代码中,一旦你通过了一个 while 循环,你就再也不会回到它了。当您按字母顺序为其提供州名称时,此代码才有效。

  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('')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在给出坏资本时引发 a(如果你愿意,你可以使用try块来捕获)。

于 2012-07-24T17:31:40.653 回答
0

老实说,这比可怕的要糟糕得多。但是,您很可能是初学者,因此会发生这种情况。

对于此任务,您应该使用dict包含 country=>capital 映射的 a 并读取国家名称一次

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 回答