我在python中遇到了elif语句和else语句及字典的问题



代码

men = {1111111111: 'Amal', 2222222222: 'Mohammed', 3333333333: 'Khadijah', 4444444444: 'Abdullah', 5555555555: 'Rawan',
6666666666: 'Faisal', 7777777777: 'Layla'}

def mo():
r1 = input('Please Enter The Number: ')
r = int(r1)
if r in men:
print(men[r])
elif len(str(r)) > 10:
print('This is invalid number')
elif len(str(r)) < 10:
print('This is invalid number')
elif r not in men:
print('Sorry, the number is not found')
else:
print('This is invalid number')

我想要的是,如果我在控制台中输入了除整数以外的任何数据类型,但错误显示在控制台页面中,控制台会打印"这是无效的数字">

输出

Please Enter The Number: d
Traceback (most recent call last):
File "C:UserswaleePycharmProjectspythonProjectmain.py", line 19, in <module>
mo()
File "C:UserswaleePycharmProjectspythonProjectmain.py", line 7, in mo
r = int(r1)
ValueError: invalid literal for int() with base 10: 'd'
Process finished with exit code 1

第一张屏幕截图第二张截图

您可以在这里使用try-catch块来捕获错误。如果无效,您将希望获得不同的用户输入,或者直接退出程序。

try:
r = int(r1)
except:
print("This is invalid number")

我会使用str.isdigit()来完成此操作。此函数返回一个布尔值,当字符串仅由数字组成时为True,否则为False。这是代码:

def mo():
r1 = input('Please Enter The Number: ')
if not r1.isdigit():
print("This is invalid number")
else:
r = int(r1)
if r in men:
print(men[r])
elif len(str(r)) > 10:
print('This is invalid number')
elif len(str(r)) < 10:
print('This is invalid number')
elif r not in men:
print('Sorry, the number is not found')
else:
print('This is invalid number')

因此,首先检查输入是否为数字。如果不是,打印输入无效并停止执行代码,以防止程序崩溃。如果它是一个数字,请继续执行代码的其余部分。

然而,我注意到您的代码可以简化为以下内容:

def mo():
r1 = input('Please Enter The Number: ')
if not r1.isdigit() or len(r1)!=10:
print('This is invalid number')
else:
r = int(r1)
if r in men:
print(men[r])
else:
print('Sorry, the number is not found')

此代码的工作方式如下:

首先,它检查输入是否是一个数字,其长度是否等于10(或者,其长度不大于且不小于10(。然后,它将输入转换为数字,并检查该数字是否在字典中。

while True循环中包装输入语句。如果他们输入一个数字,就跳出循环。

while True:
r1 = input("Enter the number: ")
if r1.isdigit():
break
else:
print("Invalid number, please try again")
r1 = int(r1)
# ... continue with rest of the code

最新更新