我写了一个将输入数字乘以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和elif都过时吗?
感谢您的耐心等待,因为我上周才开始使用Python,谢谢。
发布于 2017-03-30 06:30:47
首先,词法比较将以字符串形式获取不正确的数字结果。
因此,如果您对要检查的特定类型感兴趣,则需要将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.两次。
发布于 2017-03-30 06:08:00
将逻辑从循环中去掉,并反转成员检查:
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)https://stackoverflow.com/questions/43105005
复制相似问题