開始寫你想,沒有任何的循環代碼:執行hourly
一次,然後導出爲CSV文件(或沒有):
hourly()
export = raw_input('Export to csv? (y/n): ')
if export == 'y':
csv_writer(data, path)
print("Forecast export successful")
在每以下,我們將逐步添加一些功能。前面的代碼塊的每個添加將標記爲# new
。
現在讓我們添加第一個循環。如果用戶在回答問題時沒有輸入「y」或「n」怎麼辦?然後,我們希望這一呼籲重複,以raw_input
,並沒有別的:
hourly()
while True: # new
export = raw_input('Export to csv? (y/n): ')
if export in ('y', 'n'): # new
break # new
if export == 'y':
csv_writer(data, path)
print("Forecast export successful")
接下來,讓我們添加一個循環,這樣就可以永遠運行hourly
。
while True: # new
hourly()
while True:
export = raw_input('Export to csv? (y/n): ')
if export in ('y', 'n'):
break
if export == 'y':
csv_writer(data, path)
print("Forecast export successful")
永遠是一段很長的時間;讓我們給用戶通過外環每次退出選項:
while True:
hourly()
while True:
export = raw_input('Export to csv? (y/n): ')
if export in ('y', 'n'):
break
if export == 'y':
csv_writer(data, path)
print("Forecast export successful")
answer = raw_input('Another city? (y/n): ') # new
if answer == 'n': # new
break # new
請注意,我們沒有明確繼續對y
答案現在;我們可以假設除了n
之外的任何答案都意味着重複,所以我們可以簡單地通過無所事事返回到循環的頂部。但是,讓我們假設你想強制一個y/n的答案。然後我們添加另一個循環,就像之前我們詢問輸出結果時那樣。
while True:
hourly()
while True:
export = raw_input('Export to csv? (y/n): ')
if export in ('y', 'n'):
break
if export == 'y':
csv_writer(data, path)
print("Forecast export successful")
while True: # new
answer = raw_input('Another city? (y/n): ')
if answer in ('y', 'n'): # new
break # new
if answer == 'n':
break
現在,任何回答以外y
或n
會詢問再次獲得天氣。一旦我們跳出內部循環,我們檢查answer
的值;如果它是n
,我們打破外部循環,否則(意味着answer == 'y'
),我們隱式地回到外部循環的頂部。
最後一個注意事項:您可能會注意到代碼中的某些相似之處以獲得答案。我們可以將它重構爲保證Y/N答案的函數。
def get_yes_no(prompt):
while True:
response = raw_input(prompt)
if response in ('y', 'n'):
return response
這裏,return
語句採用break
聲明的地方;從函數返回隱式地跳出循環。我們的功能可以在我們的代碼中使用兩次:
while True:
hourly()
export = get_yes_no('Export to csv ? (y/n): ')
if export == 'y':
csv_writer(data, path)
print("Forecast export successful")
answer = get_yes_no('Another city? (y/n): ')
if answer == 'n':
break
我不確定爲什麼'y'和'n'是無效輸入。 –
「打印」之前的「break」也會導致打印不成功。 – poke