2017-08-26 98 views
0

我试图做一个阶乘计算器。如何确定输入的类型?

输入和预期输出::如果用户输入是正整数,我希望程序给出结果。如果用户输入不是正整数(负整数,浮点数或字符串),我希望程序再次请求输入。另外,我希望程序在用户输入为0时结束。

问题:由于输入总是被视为字符串数据,因此我根据输入类型进行编码。

如果有人能够给出解决这个问题的答案,这对我自己学习会有很大的帮助。

+0

这已在别处解答https://stackoverflow.com/a/43564344/2308683 .. https://stackoverflow.com/a/34797270/2308683 –

回答

1

如果你想确保它是一个正整数,如果你想继续要求输入在你的问题中指定,你需要一些更多的控制结构:

from math import factorial 

def get_input(): 
    while True: 
     try: 
      inp = int(input("Enter a positive integer> ")) 
      if inp < 0: 
       raise ValueError("not a positive integer") 
     except ValueError as ve: 
      print(ve) 
      continue 
     break 

    return inp 

print(factorial(get_input())) 

该作品以刚试图将输入转换为整数,如果失败则重试。 continue声明用于跳过breaktry/except结构捕获错误(如果它不是整数),或者错误明确地在小于0时引发错误。它还使用exceptas功能来更好地指示错误。它封装在一个函数中,使事情变得更加简单 - 我发现factorial(get_input())非常具有表现力,并且具有更多的可重用性。

这目前当用户输入0,作为0factorial一个完全有效的投入并没有结束,尽管它应该是很容易适应这种与if声明。

该程序可能会被这样使用:

Enter a positive integer> abc 
invalid literal for int() with base 10: 'abc' 
Enter a positive integer> 0.2 
invalid literal for int() with base 10: '0.2' 
Enter a positive integer> -5 
not a positive integer 
Enter a positive integer> 6 
720 

顺便提一下,根据EAFP此代码的工作 - 它只是试图转换为整数,并处理故障。这比Python第一次试图确定它是否是一个整数(LBYL)更为习惯。

如果您使用Python 2,则需要将input更改为raw_input

+0

谢谢!正是我在找的东西:) – Gina

0

试着把它看作是一个算法问题,而不是Python问题,你可能会找到一个解决方案,因为一般来说,每种语言都有它的功能,而且它们几乎都只是用不同的名字。 在python中,它们是函数调用isnumeric(),如果每个单个字符都是数字,则返回true,否则返回false。

str.isnumeric() 

我们它就像如果

if str.isnumeric()==true // so it's numeric 
    // what to do!!!!! 

的最佳选择是使用一段时间,如果

while true 
    //read data as string 
    if str.isnumeric()==true 
     break; // this to break the while loop 

希望这可以帮助你

+0

你的代码并不是真正的Python .. Python注释使用'#','true'布尔的Python文字是'True',你需要':'在缩进之前,而且比检查'if condition == true',你可以使用'if condition'。 –

+0

是的我知道,我不是一个Python程序员,我说这就像一个算法问题,每种语言都有它自己的功能,对于这类问题, isnumeric()它是一个python函数。他可以使用它,而如果。 python没有do..while条件,所以他需要像这样使用它... if(cindition){break:} – shadow

+0

在这种情况下,作为一种算法,这属于LBYL。在Python,AFAIK中,通常认为对这类问题使用[EAFP](https://docs.python.org/2/glossary.html#term-eafp)方法会更好,所以从某种意义上说它是'除了需要Python语法之外,还有一个Python问题,就是它的算法本质。 –

0

Check if input is positive integer检查的语句条件连同上面的user @ cricket_007提供的链接一起链接。把这两个信息结合起来应该能让你朝着正确的方向前进。