从特定点重新运行代码

时间:2014-01-14 22:05:56

标签: python

我不知道如何重新运行某段代码:

print('Welcome to your currency converter\n Please choose your starting currency from the four options:')
currency1=input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower()
if currency1!='gdp' or 'eur' or 'usd' or 'jpy':
    print('Sorry not accepted try again')

当代码打印Sorry not accepted try again时,我想再次启动代码。我该怎么做呢?

3 个答案:

答案 0 :(得分:3)

您希望使用while循环来继续运行代码“而”它无效:

while True:
    currency1 = input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower()
    if currency1 not in ('gdp', 'eur', 'usd', 'jpy'):
        print('Sorry not accepted try again')
    else:
        break

注意: currency1!='gdp'or'eur'or'usd'or'jpy'不符合您的想法。使用上面的in方法

根据abarnert的评论编辑

答案 1 :(得分:3)

官方常见问题解答包含三个选项,虽然您可能永远找不到它,因为它是在Why can't I use an assignment in an expression的问题下:


首先,有while True:

print('Welcome to your currency converter\n Please choose your starting currency from the four options:')
while True:
    currency1=input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower()
    if currency1 not in ['gdp','eur','usd','jpy']:
        print('Sorry not accepted try again')
    else:
        break        

对于顽固的C程序员来说,这可能看起来很奇怪,他们被告知break(如早期return和类似的功能)很糟糕。但是Python不是C.(更不用说现在,甚至MISRA建议在新的C99代码中使用break ...)您可以使用break并设置{{1}来避免使用while not done:而不是done = True,但没有优势,只会让你的代码变得更长,更复杂。


接下来,有break

while <condition>:

正如常见问题解答所述,这“似乎很有吸引力,但通常不那么健壮”:

  

问题在于,如果你改变主意如何获得下一行(例如你想将它改成sys.stdin.readline()),你必须记住改变程序中的两个位置 - 第二次出现隐藏在循环的底部。


最后,正如FAQ所说,“最好的方法是使用迭代器,使用print('Welcome to your currency converter\n Please choose your starting currency from the four options:') currency1 = input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower() while currency1 not in ['gdp', 'eur', 'usd', 'jpy']: print('Sorry not accepted try again') currency1 = input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower() 语句循环遍历对象。”

当你已经拥有一个迭代器,或者可以轻松地构建一个迭代器时,这很棒。但是当你不这样做时,它可能会增加比你保存更多的复杂性。我认为就是这种情况。例如,这并不比其他选项简单:

for

答案 2 :(得分:0)

比其他答案推荐的更好的方法是将条件放在while语句中,如下所示:

print('Welcome to your currency converter\n Please choose your starting currency from the four options:')
currency1 = input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower()

while currency1 not in ['gdp', 'eur', 'usd', 'jpy']:
    print('Sorry not accepted try again')
    currency1 = input('(GDP) = Pound Sterling £ \n(EUR) = Euro € \n(USD) = US Dollar ($) \n(JPY)= Japanese Yen ¥\n').lower()