《简明Python教程》初读笔记

花了4天时间看完了这本书,遇到了几个有趣的问题
Q1.赋值问题
在这里插入图片描述
在这里插入图片描述
4个列表值相同是意料中的,但是is判断有两个false则出乎预料
查阅资料后才明白,list0 = [‘longchaos’, ‘love’, ‘python’]这行代码创建了一个列表对象 [‘longchaos’, ‘love’, ‘python’],然后把引用(指针)赋给list0;
当执行 list1 = [‘longchaos’, ‘love’, ‘python’] 这行代码时,系统重新创建了一个列表对象[‘longchaos’, ‘love’, ‘python’],并把引用赋给list1;
所以list0和list1值虽然相同,但是他们指向的内存是不同的,
因此list0 is list1结果为false。
而list2 = list0,则是把list0的引用赋给list2,所以它们不仅值相同,引用也相同。
至于 list3 = list0[:],python是先对list0进行‘dereference’得到列表对象[‘longchaos’, ‘love’, ‘python’] ,然后执行[‘longchaos’, ‘love’, ‘python’] [:]复制得到一个新的对象,其值也是[‘longchaos’, ‘love’, ‘python’],然后把这个新的列表对象的引用赋给list3,所以list0和list3的引用也是不同的

Q2.将zip命令添加至环境变量
在做备份文件这个小练习时,涉及到让windows识别zip命令的问题
这个流程其实我是很清楚的,但是添加之后发现在pycharm的终端模式下,并不能使用python命令。
同样是上网查阅资料后,才明白环境变量设置后,只有从开始菜单或者windows+R打开的终端才能立即使用命令。其他位置比如pycharm的终端或者从文件管理器里打开的终端都是无法使用的,要等到电脑重启一次后才会生效
另附

import os
import time
import zipfile

# 1.需要备份的文件与目录将被
# 指定在一个列表中。
# 例如在Windows下:
source = r'D:\\Files\Fish'
# 又例如在Mac OS X 与 Linux下:
# source = ['/users/swa/notes']
# 在这里要注意到我们必须在字符串中使用双引号
# 用以括起其中包含空格的名称。

# 2.备份文件必须存储在
# 一个主备份目录中
# 例如在Windows下:
target_dir = r'D:\\longchaos\Practice'
# 又例如在 Mac OS X 和 Linux 下:
# target_dir = '/users/swa/backup'
# 要记得将这里的目录地址修改至你将使用的路径。

# 如果目标目录还不存在,则进行创建
if not os.path.exists(target_dir):
    os.mkdir(target_dir)    # 创建目录

# 3.备份文件将打包压缩成 zip 文件。
# 4.将当前日期作为主备份目录下的子目录名称
today = target_dir + os.sep + time.strftime('%Y%m%d')
# 将当前时间作为 zip 文件的文件名
now = time.strftime('%H%M%S')

# 添加一条来自用户的注释以创建
# zip 文件的文件名
comment = input('Enter a comment --> ')
# 检查是否有注释输入
if len(comment) == 0:
    target = today + os.sep + now + '.zip'
else:
    target = today + os.sep + now + '_' + \
             comment.replace(' ', '_') + '.zip'

# 如果子目录还不存在,说明今天还没有备份,则进行创建
if not os.path.exists(today):
    os.mkdir(today)
    print('Successfully created directory', today)

# 5.我们使用 zipfile 模块将文件打包成 zip 格式
# 创建一个 ZipFile 对象
backup_to_zip = zipfile.ZipFile(target, 'w', zipfile.ZIP_DEFLATED)

# os.walk() 得到一个三元tuple(dirpath, dirnames, filenames)
# 第一个为当前正在遍历的这个文件夹的本身的地址
# 第二个为一个 list 内容是该文件夹中所有的目录的名字(不包括子目录)
# 第三个同样是 list 内容是该文件夹中所有的文件(不包括子目录)。
for dirpath, dirnames, filenames in os.walk(source):
    for filename in filenames:
        # os.path.join() 连接2个或更多的路径名组件
        # 如果各组件名首字母不包含'/',则函数会自动加上
        # 如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
        # 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
        directory = os.path.join(dirpath, filename)
        backup_to_zip.write(directory)  # 进行备份

print(backup_to_zip.namelist())
backup_to_zip.close()

Q3.导致电脑死机的一段代码
在检查字符串是否回文的小练习里,我不小心搞错了参数和参数的位置,ctrl+shift+f10后结果电脑直接死机了(没事不要尝试)
原因我暂时也不知道,如果有大神看到望不吝赐教
没事千万别尝试
另附修改后能识别英文标点符号和空格及大小写的回文代码

import string


def reverse(text):
    return text[::-1]


def is_palindrome(text):
    # 将空格加入英文标点字符串
    # 不能过滤中文标点符号
    punctuations = string.punctuation + ' '
    for i in punctuations:
        if i in text:
            text = text.replace(i, '')

    return text.lower() == reverse(text).lower()    # 忽略大小写


something = input('Enter text: ')
if is_palindrome(something):
    print('Yes, it is a palindrome')
else:
    print('No, it is not a palindrome')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值