建筑兔零基础python自学记录88|time库文本进度条(下)11
练习1:采用字符串方式打印可以动态变化的文本进度条,进度条需要能在一行中逐渐变化
要求如下:
(1) 采用sleep()模拟一个持续的进度,获得文本进度条的变化时间;
(2) 通过print()函数实现单行动态刷新,在print()函数中更换参数end的默认值为'',每次使用print()函数输出时不能换行;
(3) 要能回退:打印后光标到之前的位置 \r。
答案:
建筑兔零基础python自学记录87|time库文本进度条(上)10-CSDN博客代码3 文本进度条完整实例
练习2:三次方格式化
获得用户输入的一个数字,可能是整数或浮点数,a,计算a的三次方值,并打印输出。
输出结果采用宽度20个字符、居中输出、多余字符采用减号(-)填充。
如果结果超过20个字符,则以结果宽度为准。
建筑兔零基础python自学记录86|字符串9-CSDN博客 回顾之前的内容,可以看到集中的表达
我们可以看到主要有4处错误:
1、input()和eval(input())字符串转为对象计算
input()
返回的是纯字符串,原样保留用户输入的内容eval(input())
会将输入的字符串作为代码执行,解析并执行输入的字符串,将其转换为对应的 Python 对象。- 字符串本身不能直接进行数学运算(如加减乘除),但可以通过类型转换实现与运算相关的操作。
2、要给pow赋值才能表现出计算值。Python 里如果一个表达式的结果没有被赋值给变量,那么这个结果就不会被保存或者显示出来。也就是说,pow(a, 3)
计算得到的结果会被丢弃。
3、填充号没换,:之后的是填充符
4、format(a)和format('a')
format(a)填充格式化字符串的值
format('a')填充到格式化字符串占位符中的值
例如:
代码 1:print('我叫 {},今年 {} 岁。'.format('张三', '20'))
'张三'
和 '20'
这两个参数都是字符串类型,'张三'
表示一个具体的人名,'20'
虽然看起来是数字,但它被引号包裹,所以是字符串类型。
运行结果:
我叫 张三,今年 20 岁。
代码 2:print('我叫 {},今年 {} 岁。'.format(张三, 20))
20
是整数类型,而 张三
这里没有引号,在 Python 中,没有引号包裹的内容会被当作变量名处理。如果在代码运行之前没有定义 张三
这个变量,Python 解释器会在查找该变量时找不到,从而抛出 NameError
异常。
NameError: name '张三' is not defined
正确用法如下,汉字用''(表示为字符串),数字直接输入。特例处理一些需要以文本形式存储或传输的数据时,像电话号码、身份证号码等,虽然它们看起来是数字,但本质上是一种标识符,通常会用字符串来表示。数字也要加''
print('我叫 {},今年 {} 岁。'.format('张三', 20))
正确代码:
#代码1
a=eval(input())
b=pow(a,3)
print('{:-^20}'.format(b))#代码2
a = eval(input())
print("{:-^20}".format(pow(a, 3)))
练习3:星号三角形
读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:
第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。
n = eval(input())
for i in range(1,n+1,2):print("{0:^{1}}".format('*'*i, n))
错误记录:
1、如何获取奇数?---用步长解决!
range(1, N + 1, 2)
会生成一个从 1 开始,到 N
(包含 N
)结束,步长为 2 的整数序列。
2、如何获取每行*号---个数乘以符号(符号带‘’)
'*' * i
会生成一个由 i
个星号组成的字符串。例如,当 i
为 3 时,'*' * i
就是 '***'
。
3、如何将每一行用同样规则进行居中对齐"{0:^{1}}"
"{0:^{1}}"
解读:{0}
表示 第一个参数,{1}
表示第二个参数。将 format()
方法的第一个参数(对应 {0}
)按照第二个参数(对应 {1}
)指定的宽度进行居中对齐。
4、如何理解print("{0:^{1}}".format('*' * i, N))
运行代码结果:
练习4:恺撒密码
思路是用循环+.replace()替换进行加密,但是.replace()
方法适用于简单的一对一替换,例如将字符串中的所有 'a'
替换为 'b'
。如果使用 .replace()
方法进行多次替换,会出现重复替换的问题。例如,先将 'a'
替换为 'd'
,后续可能又会把之前替换得到的 'd'
再次替换,导致结果错误。
先看答案:
s = input()
t = ""
for c in s:if 'a' <= c <= 'z': t += chr( ord('a') + ((ord(c)-ord('a')) + 3 )%26 )elif 'A' <= c <= 'Z':t += chr( ord('A') + ((ord(c)-ord('A')) + 3 )%26 )else:t += c
print(t)
解读代码:
先看t += chr( ord('a') + ((ord(c)-ord('a')) + 3 )%26 )
回顾建筑兔零基础python自学记录86|字符串9-CSDN博客
之前我们学过chr()和ord(),chr()是变字符,ord()是变编码(记忆方式是ch像汉语拼音所以能看懂是字符,反之ord读不懂是编码)
1、ord('a')
与 ord(a)的区别
ord('a')
中的'a'
是一个字符串字面量,代表单个字符a
。ord('a')
会返回字符a
对应的 ASCII 码值,也就是 97。ord(a)
里的a
是一个变量。Python 会尝试把这个变量所代表的值当作字符传入ord()
函数。若a
没有被定义,代码就会抛出NameError
异常
接着看if 'a' <= c <= 'z':
完整代码解读:
s = input()
#定义空字符串,用于存储加密后字母表
t = ""
#循环遍历
for c in s:#判断编码值是否在97-122(a-z之间)if 'a' <= c <= 'z':#获得加密后的编码值对应字母,把移位后的字母添加到结果字符串tt += chr( ord('a') + ((ord(c)-ord('a')) + 3 )%26 )#判断编码值是否在65-90(A-Z之间)elif 'A' <= c <= 'Z':t += chr( ord('A') + ((ord(c)-ord('A')) + 3 )%26 )else:# 若字符 c 既不是小写字母也不是大写字母,就直接把它添加到结果字符串 t 中(数字、标点不变)t += c
print(t)