为什么我的程序不会退出?

时间:2013-11-28 11:15:38

标签: python function exit quit

好吧,所以我已经尝试了一段时间了,一旦它运行,我似乎找不到关闭程序的方法。

如果用户选择'no'

,我希望它能够结束该程序
elif y == 'n' or 'no':
    sys.exit(0)

然而,无论我选择什么,都会将程序返回到partOne函数。我尝试过不同的尝试来解决这个问题,比如移动

partOne()

从程序结束到两个函数之间但不起作用,因为那时PartTwo函数尚未定义。

感谢您的回复。

import hashlib
import sys

def partOne():
    x = input("\nEnter something to hash: ")
    hash_object = hashlib.sha256(x.encode())
    hex_dig = hash_object.hexdigest()
    print("\nPlain text: ")
    print(x)
    print("\nHashed text: ")
    print(hex_dig)
    print("\nYour password: ")
    print(hex_dig[::9])
    partTwo()

def partTwo():
    y = input("\nDo you want to make another password? (y/n): ")
    if y == 'y' or 'yes':
        partOne()
    elif y == 'n' or 'no':
        sys.exit(0)
    else:
        print("\nYou need to type either 'y' or 'n'.")
        partOne()

partOne()

1 个答案:

答案 0 :(得分:6)

尝试y == 'n' or y =='no'

而不是y == 'n' or 'no'

>>> y = 'anything'
>>> 
>>> bool(y == 'n' or 'no')
True

你的陈述总是返回True。如果它不是y == 'no',只检查'no',如果它不是TrueNoneFalse,那么在python中转换为bool的任何内容都是0

在字符串和其他迭代的情况下,如果它不为空,则返回True,例如''[]{}()将始终返回False

或者正如Foo Bar用户所说,if y.lower() in ('n', 'no')也会这样做。 lower()将确保匹配不区分大小写。