Python习题

Posted 芒果侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python习题相关的知识,希望对你有一定的参考价值。


1.用算法判断某?一个字符串串是否是?小数

s17 = "-123.12"
s17 = s17.replace("-", "") #替换掉负号
if s17.isdigit():
    print("是整数")
else:
    if s17.count(".") == 1 and not s17.startswith(".") and not s17.endswith("."):
        print("是?数")
    else:
        print("不不是?小数")


2.循环删除列列表中的每?一个元素

   分析: for的运?行行过程. 会有?一个指针来记录当前循环的元素是哪?一个, ?一开始这个指针指向第0 个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第?一个的元素会?自动的变成 第0个. 然后指针向后移动?一次, 指向1元素.  这时原来的1已经变成了了0, 也就不会被删除了;循环删除都不行. 不论是?用del还是?用remove.pop都不行.

li = [11, 22, 33, 44]
for e in li:
    li.remove(e)
print(li)
li = [11, 22, 33, 44]
for el in li:
    li.pop()    # pop也不不?行行
print(li)
li = [11, 22, 33, 44]
for i in range(0, len(li)):
    del li[i]
print(li)
# i= 0, 1, 2  删除的时候li[0] 被删除之后. 后?面?一个就变成了了第0个. 
# 以此类推. 当i = 2的时候. list中只有?一个元素. 但是这个时候删除的是第2个 肯定报错啊

结果[22,44]

li = [11, 22, 33, 44]
for i in range(0,len(li)):   # 循环len(li)次, 然后从后往前删除
    li.pop()
print(li)
 或者使用whlie循环,由于删除元素会导致元素的索引改变, 所以容易易出现问题. 尽量量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另?一个集合中然后再批量量删除. 
.
count = len(li)
while count > 0:
    count = count - 1 #倒着删除
    del li[count]

print(li)


3.fromkeys与append连续使用时的错误
   分析:代码中只是更更改了了jay那个列列表. 但是由于jay和JJ?用的是同?一个列列表. 所以. 前?面那个改了了. 后 ?面那个也会跟着改
dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
print(dic)
lst = dic.get(jay).append("湖大")
print(dic)

结果:
{jay: [周杰伦, 麻花藤], JJ: [周杰伦, 麻花藤]}
{jay: [周杰伦, 麻花藤, 湖大], JJ: [周杰伦, 麻花藤, 湖大]}

    假设开始定义了dic 则不会出现这个错误,

dic = {jay: [周杰伦, 麻花藤], JJ: [周杰伦, 麻花藤]}
print(dic)
lst = dic.get(jay).append("湖大")
print(dic)

结果:
{jay: [周杰伦, 麻花藤], JJ: [周杰伦, 麻花藤]}
{jay: [周杰伦, 麻花藤, 湖大], JJ: [周杰伦, 麻花藤]}

4. 循环删除字典的元素

dict中的元素在迭代过程中是不允许进?行行删除的,把要删除的元素暂时先保存在?一个list中, 然后循环list, 再删除

dic = {k1: alex, k2: wusir, s1: ?金金?老老板}
# 删除key中带有‘k‘的元素
for k in dic:
    if k in k:
        del dic[k]
# 在循环迭 代的时候不不允许进?行行删除操作
print(dic)

把要删除的元素暂时先保存在?一个list中, 然后循环list, 再删除

dic = {k1: alex, k2: wusir, s1: ?金金?老老板}
dic_del_list = []
# 删除key中带有‘k‘的元素
for k in dic:
    if k in k:
        dic_del_list.append(k)
for el in dic_del_list:
    del dic[el]
print(dic)

5. set 元素变更 无法直接修改,只能结合remove和add  使用

6  对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量量. 并不是复制?一份内容. 所以. lst1的内存指向和lst2是?一样的. lst1改变了了, lst2也发?生了了改变

lst1 = ["?金金?毛狮王", "紫衫?龙王", "?白眉鹰王", "?青翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("杨逍")
print(lst1)
print(lst2)

dic1 = {"id": 123, "name": "谢逊"}
dic2 = dic1
print(dic1)
print(dic2)
dic1[name] = "范瑶"
print(dic1)
print(dic2)

结果如下:
[?金金?毛狮王, 紫衫?龙王, ?白眉鹰王, ?青翼蝠王]
[?金金?毛狮王, 紫衫?龙王, ?白眉鹰王, ?青翼蝠王]
[?金金?毛狮王, 紫衫?龙王, ?白眉鹰王, ?青翼蝠王, 杨逍]
[?金金?毛狮王, 紫衫?龙王, ?白眉鹰王, ?青翼蝠王, 杨逍]
{id: 123, name: 谢逊}
{id: 123, name: 谢逊}
{id: 123, name: 范瑶}
{id: 123, name: 范瑶}

    尝试 copy[浅拷?. 只会拷贝第?层. 第?层(也就是嵌套的列表元素)的内容不会拷贝. 所以被称为浅拷?贝,简单说 嵌套的改变,那也会一起改变]和deepcopy[不会因任何改变而改变]

lst1 = ["何炅", "杜海?涛","周渝?民"]
lst2 = lst1.copy()
lst1.append("李李嘉诚")
print(lst1)
print(lst2)
print(id(lst1),id(lst2))
结果如下:
[何炅, 杜海?涛, 周渝?民, 李李嘉诚]
[何炅, 杜海?涛, 周渝?民]
1793001742920 1793001742984
                                                                         

































































































































































以上是关于Python习题的主要内容,如果未能解决你的问题,请参考以下文章

商品房数据统计Python习题(保姆级图文+实现代码)

笨办法学 Python(第三版)习题 18: 命名变量代码函数

笨办法学 Python(第三版)习题 18: 命名变量代码函数

Think python(第二版)习题代码

Python 新手入门习题及代码

python程序设计教程(第2版)习题3-习题5代码答案