python 中的 elif 语句和 else 语句和字典有问题

I have a problem with elif statement and else statement and dictionary in python

代码

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')

我想要的是控制台打印 'This is invalid number' 如果我在控制台中输入了整数以外的任何数据类型但错误显示在控制台页面中

输出

Please Enter The Number: d
Traceback (most recent call last):
  File "C:\Users\walee\PycharmProjects\pythonProject\main.py", line 19, in <module>
    mo()
  File "C:\Users\walee\PycharmProjects\pythonProject\main.py", line 7, in mo
    r = int(r1)
ValueError: invalid literal for int() with base 10: 'd'

Process finished with exit code 1

first screenshot second screenshot

您可以在此处使用 try catch 块来捕获错误。如果输入无效,您将想要获得不同的用户输入,或者只是退出程序。

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

将输入语句包装在 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

我会用 str.isdigit() 来做到这一点。此函数 returns 一个布尔值,当字符串仅由数字组成时为 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)。然后它将输入转换为数字并检查数字是否在字典中。