Python while / for / if语句

时间:2017-03-29 22:05:15

标签: python loops printing while-loop

我写了一个程序,将输入数乘以127.输入不接受alpha和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,谢谢。

2 个答案:

答案 0 :(得分:2)

首先,词汇比较会将数字方面的错误结果作为字符串提取。

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

您可以使用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.两次。

答案 1 :(得分:-3)

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

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)