【问题标题】:Python While/for/if statementsPython While/for/if 语句
【发布时间】:2017-03-29 22:05:15
【问题描述】:

我编写了一个程序,将输入数字乘以 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,谢谢。

【问题讨论】:

    标签: python loops printing while-loop


    【解决方案1】:

    首先,词法比较会根据数字作为字符串获取不正确的结果。

    因此,如果您对要检查的特定类型感兴趣,则需要将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. 两次。

    【讨论】:

    • ## elif isinstance(number, str):## 让我们失望了。 “数字”来自输入,即str,因此我们无法超越这条线?谢谢。
    • 这个答案似乎使用的是 Python 2.x,因为它期望 input() 返回一个数字。
    • 已编辑以支持 Python 2 和 Python 3。我使用的是 Python 2,而您似乎使用的是 Python 3。
    • 感谢您的支持 - 完美运行。我会在 try/except 和 isinstance 上做一些练习来完全理解它们。
    • 你可以参考这个链接寻求帮助-python-reference.readthedocs.io/en/latest/docs/functions/…
    【解决方案2】:

    将逻辑排除在循环之外,并反转成员资格检查:

    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)
    

    【讨论】:

    • 假设我们有两个不同的禁止号码,9 和 1。那么我们该如何进行呢?如果我们将其恢复为 for 循环,如果我们键入 11、99 等,是否有让它停止打印两次“禁止数字”?谢谢。
    • @Ramon - 那将是banned_number not in number and other_number not in number,或更通用的not any(n in number for n in banned_numbers),或set(number) - set(banned_numbers) == set(number)。而且没有理由使用循环。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2016-02-29
    • 2014-05-28
    • 2013-07-06
    • 1970-01-01
    • 2021-10-08
    • 2015-05-19
    相关资源
    最近更新 更多