我对python的缩进语法很糟糕,我试图在循环工作时得到这个。我正在寻找的是hourly()
运行之后它将要求导出而不是y
它将导出然后询问您是否想要获得另一个城市的天气。如果他们选择是继续并运行hourly()
。
截至目前,当您对第一个问题回答是或否时,它将转到循环的开头并重新启动hourly()
。
有人可以帮我识别我的问题吗?
while True:
hourly()
while True:
export = raw_input('Would you like to export to csv? (y/n): ')
if export in ('y', 'n'):
break
print 'Invalid input.'
if export == 'y':
csv_writer(data, path)
print("Forcast export sucessful")
else:
answer = raw_input('Would you like to get weather for another city? (y/n): ')
if answer in ('y', 'n'):
break
print 'Invalid input.'
if answer == 'y':
continue
else:
print 'Goodbye'
break
答案 0 :(得分:3)
首先编写所需的代码而不进行任何循环:执行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
, nothing else:
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
答案 1 :(得分:1)
当您对第一个问题回答“是”或“否”时,它将转到循环的开头并重新启动
hourly()
那是因为当你回答是或否时,break
第二个while True
...
while True:
hourly()
while True:
export = raw_input('Would you like to export to csv? (y/n): ')
if export in ('y', 'n'):
break # <--- The problem
也许你的意思是
if export not in ('y', 'n'):
相同
if answer not in ('y', 'n'):