2016-09-25 79 views
-3

我想让用户输入一个三位数的数字,所以在100到999之间,然后输出个别数字是什么。如果输入不在三位数字内,则要求他们再次输入。如果我输入一个三位数的数字,并且对于一个字符串,重复询问可以工作,但它不起作用。相反,它会打印单词FALSE的前三个索引。我该如何改变这一点?在一个范围内打印一个数字的个别数字

while True: 

    try: 
    number=int(input("Enter a three digit number:")) in range(99,1000) 

    break   
except ValueError: 

    print("Enter a three digit number:") 
    continue 
number=str(number) 

print("Your digits are: " ,number[0] ,number[1] ,number[2]) 
+0

1.您的压痕关闭。 2.您将'in'操作的结果分配给'number',而不是**''input'。让它成为一个单独的步骤。 – jonrsharpe

+0

@jonrsharpe对这类东西来说很新,你能解释一下如何让它成为一个单独的步骤吗? – Ashley

+4

那么,你看到你是如何在同一行?相反,以不同的方式进行操作。 – jonrsharpe

回答

1

这是你在找什么?

while True: 
    try: 
     number=int(input("Enter a three digit number:")) 
     number=str(number) 
    except ValueError: 
     print("Please only enter in numbers.") 
     continue 
    if len(number)!=3: 
     print("Not a three digit number.") 
    else: 
     print("Your digits are: " ,number[0] ,number[1] ,number[2]) 
     break 
+0

是的,实际上使用Mr.goosberry的答案,它比我的要干净得多。但是,您需要将> 3更改为!= 3。这意味着它只能接受3个数字的长度。 –

0

首先,您的代码中有一些错误/错误。

  • 你应该把in range(99, 999)一个单独的行
  • 你为什么你的输入转换为数字,然后将其转换回一个字符串?把它保持为一个字符串。

解决了这些错误之后,下面是我所做的修复代码的方法。

  • 我从周围的input()功能删除int()功能。根据需要使用int()

  • 我删除了in range(99, 999),因为这是无关紧要的。

  • 我也删除了try/except块,因为这是不必要的。

  • 代替try/except块我使用if语句。 if语句会测试输入是否为整数,然后测试它是否为三位整数。

这里是你的代码我的修改后:

while True: 
    number=input("Enter a three digit number:") 
    if not (number.isdigit() and 99 < int(number) < 1000): 
     print("Please Enter a three digit number.") 
     continue 
    break   
print("Your digits are: " ,number[0] ,number[1] ,number[2]) 
+0

看起来像OP只需要一个3位数的数字,因此检查应该是'len(number)!= 3',同时'isdigit'将无法过滤像“001”这样的零开始输入数字。 OP有正确的想法,但实现它的方式是错误的... – Copperfield

+0

你也可以使用'not(99 Copperfield

+0

@Copperfield优点,谢谢。我将编辑它们。我完全忘记了Python已经链接了比较。 –