Python之牛客网面试题解析之Python合法标识符 代码实现

知识点1:Python 合法的标识符

参考链接:哪个不是python合法标识符

具体基础知识点如下:组合=字母+数字+下划线

  1. 第一个字符不能以数字开头。

  2. 从第二个字符开始可以是字母,数字和下划线。

  3. 大小写敏感。

  4. Python的保留关键字不能作为标识符。

具体关键字如下:
在这里插入图片描述

  1. 不建议使用python的内建名字集合当作标识符。

Python提供了keyword模块来查询关键字集合和判断一个字符串是否是python的关键字:

Python的合法标识符

下面这段代码可以让用户输入一个字符串,然后判断是否是合法的python标识符,如果不是继续输入,直到输入正确,程序退出。
主要利用知识点中的1,2,4来判断。
以下代码为python3,上述参考链接里面为python2。

import keyword
import string

def is_valid_py_name(py_name):
    py_name = py_name.strip()
    if keyword.iskeyword(py_name):#判断关键字
        print("'{0}' is a python keyword! It is a invalid letter!".format(py_name))
        return False
    
    elif py_name == "":#判断空
        print("empty input!")
        return False
    
    elif py_name[0] not in (string.ascii_letters+'_'):#判断第一个字母是否是以"-"或字母开头
        print("'{0}' not start with _ or letter!".format(py_name))
        return False

    else:
        for i in range(1,len(py_name)):#从第二字符开始,遍历字母(包括大小写)和数字
            if py_name[i] not in (string.ascii_letters+'_'+string.digits):
                print("'{0}' is invalid letter!".format(py_name[i]))
                return False
        print("'{0}' is valid py name!".format(py_name))
        return True

if __name__ == "__main__":
    #is_valid = False
    #while not is_valid:
    while True:
        print("Please enter a string:")
        py_name = input()
        is_valid = is_valid_py_name(py_name)

在这里插入图片描述
修改代码
python2 string.letters:包含所有字母(大写或小写)的字符串
Python 3中,string.ascii_letters.

例题:
在这里插入图片描述
逐个测试,测试结果如下。
在这里插入图片描述

知识点2:字典声明的办法总结

字典基本知识:

字典本身是可变数据类型,字典的键记住两点:

唯一:同一个字典中的键必须唯一,如果出现多个相同的键,则最新的键会被记住(也即值会被代替);
不可变:键是不可变数据类型,使用可以是int,string,float,tuple

Python中的数组可分为:元组tuple(a,b)不可变数据类型,列表list[a,b]可变数据类型,字典dict{a:b}值可以改变。

例题:
在这里插入图片描述

解题过程:
在这里插入图片描述

一个对象能被称为 hashable , 它必须有个 hash 值,这个值在整个生命周期都不会变化,而且必须可以进行相等比较,所以一个对象可哈希,它必须实现__hash__() 与 eq() 方法。

对于 Python 的内建类型来说,只要是创建之后无法修改的(immutable)类型都是 hashable 如字符串,可变动的都是 unhashable的比如:列表、字典、集合,他们在改变值的同时却没有改变id,无法由地址定位值的唯一性,因而无法哈希。我们自定义的类的实例对象默认也是可哈希的(hashable),而hash值也就是它们的id()。
在这里插入图片描述
在这里插入图片描述
“is测试”基于id()的值。

"==测试” 基于hash()的值。

实例:初始化字典,26个小写英文字母,从0到25.
在这里插入图片描述

知识点3:理解:if name ==‘main’:

例子:
在这里插入图片描述
运行程序,先调用,后执行后面的语句。
于是先打印出Hello World,紧接着打印出
__name__value:print_func
但是不执行main()函数
然后打印出Done!
在这里插入图片描述
当哪个模块被直接执行时,该模块“name”的值就是“main”,当被导入另一模块时,“name”的值就是模块的真实名称
修改print_module.py最后一行代码为print(’__name__value:’,name),输出如下:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值