如果这是一个荒谬的问题,我很抱歉,但我只是在学习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: '))'
答案 0 :(得分:5)
您的意思是在一个大的if
循环中使用多个while
语句,而不是多个while
循环。在这段代码中,一旦你过了一个while循环,你永远不会回到它。只要您按字母顺序为其提供状态名称,此代码将仅 。
不要这样做!使用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
否则,如果你想覆盖所有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
如果用户没有输入任何内容,则行断开循环。