我写了一个程序,将输入数乘以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,谢谢。
答案 0 :(得分:2)
首先,词汇比较会将数字方面的错误结果作为字符串提取。
因此,如果您对要检查的特定类型感兴趣,则需要将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.
两次。
答案 1 :(得分:-3)
取出循环中的逻辑,并反转成员资格检查:
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)