【发布时间】:2018-02-04 09:44:26
【问题描述】:
我正在尝试制作一个阶乘计算器。
输入和预期输出::如果用户输入是正整数,我希望程序给出结果。如果用户输入不是正整数(负整数、浮点数或字符串),我希望程序再次请求输入。另外,我希望程序在用户输入为 0 时结束。
问题:由于输入始终被视为字符串数据,因此我只能根据输入类型进行编码。
如果有人能回答这个问题,那将是非常有帮助的,因为我正在自学。
【问题讨论】:
标签: python
我正在尝试制作一个阶乘计算器。
输入和预期输出::如果用户输入是正整数,我希望程序给出结果。如果用户输入不是正整数(负整数、浮点数或字符串),我希望程序再次请求输入。另外,我希望程序在用户输入为 0 时结束。
问题:由于输入始终被视为字符串数据,因此我只能根据输入类型进行编码。
如果有人能回答这个问题,那将是非常有帮助的,因为我正在自学。
【问题讨论】:
标签: python
尝试将其视为算法问题而不是 Python 问题,您可能会找到解决方案,因为通常每种语言都有其功能,并且它们几乎都相同,只是名称不同。
在 python 中,它们是一个函数调用isnumeric(),如果每个字符都是数字则返回 true,否则返回 false。
str.isnumeric()
用 if 之类的语句条件来使用它
if str.isnumeric()==true // so it's numeric
// what to do!!!!!
使用 while 和 if 的最佳选择
while true
//read data as string
if str.isnumeric()==true
break; // this to break the while loop
希望对你有帮助
【讨论】:
#,“真正”布尔值的 Python 文字是 True,您需要在缩进之前使用 :,而不是检查if condition==true,你可以使用if condition。
如果你想确保它是一个正整数,并且如果你想继续要求你的问题中指定的输入,你将需要更多的控制结构:
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 语句用于跳过break。 try/except 结构在它不是整数时捕获错误,或者在小于 0 时显式引发错误。它还使用 except 的 as 特性来打印更好的错误指示。它被封装在一个函数中,让事情变得更简单——我发现factorial(get_input()) 非常有表现力,而且更易于重用。
当用户输入为0 时,这目前不会结束,因为0 是factorial 的完全有效输入,尽管使用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 工作——它只是尝试转换为整数,并处理失败。这比首先尝试确定它是否可以是整数 (LBYL) 更符合 Python 的习惯。
如果您使用的是 Python 2,则需要将 input 更改为 raw_input。
【讨论】:
Check if input is positive integer 检查此链接以及上面用户@cricket_007 提供的链接。将这两个信息结合起来应该会让您朝着正确的方向前进。
【讨论】: