python while循环的麻烦

时间:2012-07-24 17:27:53

标签: python

如果这是一个荒谬的问题,我很抱歉,但我只是在学习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: '))'

3 个答案:

答案 0 :(得分:5)

  1. 您的意思是在一个大的if循环中使用多个while语句,而不是多个while循环。在这段代码中,一旦你过了一个while循环,你永远不会回到它。只要您按字母顺序为其提供状态名称,此代码将仅

  2. 不要这样做!使用python dictionaries有一个很多更好的方法。

    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
    
  3. 否则,如果你想覆盖所有50个州,你最终会得到50对几乎相同的线。

答案 1 :(得分:1)

我认为您不了解while循环。基本上,

while condition:
    dostuff()

在条件成立时完成。一旦条件为假,你继续前进。我认为您正在寻找的是:

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

这将永远循环,直到用户点击输入(bool('')在{python中为False

然而,更好的方法是使用字典:

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块来捕获它。)

答案 2 :(得分:0)

老实说,它比糟糕更糟糕。但是,你很可能是初学者,因此会发生这样的事情。

对于此任务,您应使用包含country =>大写映射的dict,并在时读取国家/地区名称​​:

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:块中,并在{{1}之后立即使用if not state: break如果用户没有输入任何内容,则行断开循环。