Python While/for/if statements



我写了一个将输入数乘以127的程序。输入不接受字母和数字 9。

除了数字 9,它不允许任何包含 9 的数字,例如 99、19 等。我们能克服这一点吗?

另外,如果我输入"99",它会打印两次"Banned number"。这与第一个陈述有关吗?

banned_number = "9"
while True:
    number = input("number ")
    for items in number:
        if items in banned_number:
            print ("Banned number.")
        elif number.isalpha():
            print ("Sorry, numbers only.")
        elif number.isdigit():
            a = int(number)
            print(a* 127)

我知道这个程序是无用的,它显然是 - 我在锻炼循环时偏离了轨道,这是最终的形状。有没有办法使这段代码更短?我们可以用一个简单的代码使 elif 都过时吗?

感谢您的耐心等待,因为我上周才开始使用 Python,谢谢。

首先,词法比较会以字符串的形式获取数字方面的错误结果。

因此,如果您对要检查的特定类型感兴趣,则需要将intint进行比较,并将strstr进行比较以获得正确的结果。

您可以使用isinstance(a,type)来检查值的数据类型,这是执行此操作canonical way。你可以做这样的事情:

banned_number = [9, 1]
while True:
    input_num = input("number ")
    # This will work for both Python 2.x and Python 3.x
    try : 
        number = int(input_num)
    except :
        number = input_num
    if number in banned_number:
        print ("Banned number.")
    elif isinstance(number, str):
        print ("Sorry, numbers only.")
    elif (isinstance(number, int) or isinstance(number, float)):
        a = int(number)
        print(a* 127)

这将导致:

# for input 9
Banned number. 
# for input 'a'
Sorry, numbers only.
# for input 99
12573

此外,它为输入打印两次的原因'99'因为这将被视为两个字符的字符串'9' and '9',因此在循环时打印了两次Banned number.

将逻辑从循环中取出,并反转成员资格检查:

banned_number = "9"
while True:
    number = input("number ")
    if banned_number in number:
        print ("Banned number.")
    elif number.isalpha():
        print ("Sorry, numbers only.")
    elif number.isdigit():
        a = int(number)
        print(a* 127)

最新更新