我写了一个将输入数乘以127的程序。输入不接受字母和数字 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,谢谢。
首先,词法比较会以字符串的形式获取数字方面的错误结果。
因此,如果您对要检查的特定类型感兴趣,则需要将int
与int
进行比较,并将str
与str
进行比较以获得正确的结果。
您可以使用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.
。
将逻辑从循环中取出,并反转成员资格检查:
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)