开发者学堂课程【Python 开发基础入门:Python 字符串高级用法及实战】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/556/detail/7662
Python 字符串高级用法及实战
内容介绍:
一、 字符串练习
二、 第一题解答
三、 第二题解答
一、 字符串练习
用户输入一个数字
判断是几位数
打印每一位数字及其重复的次数
依次打印每一位数个,十,百,千,万位
输入5个数字,打印每个数字的位数,将这些数字排序打印,要求升序打印
实例1:
#柱子14:15:03
n=input ( '>>>')
length=len(n)
for i in range (10) :
//找字符串0有没有在z出现过
z
=n.count (str (i) )
#n*
10
print (z)
//效率较高
//考虑到了整数的情况
print (length)
lst=list(n)
//套用了两层循环,依次打印
for x in range ( length) :
for y in range ( length-1-x):
if lst[y]>lst[y+1]:
lst[y] ,lst[y+1]=lst[y+1],lst[y]
print (lst)
实例2:
12-郭星池14:15:24
//str强转可以不要
str1 = input (">>>please input a integer: ")
//直接取长度
length = len(str1)
print (length)
//遍历字符串所有元素
for i in range (1, length+1) :
//本身就是字符串,没有必要str
//count查看元素有多少个
//每执行依次像当于遍历一次字符串
time = str1.count (str1[-i]
)
print(str1[-i],time)
实例3:
#47刘凯14:15:20
//不用浪费时间在强制转换上
a=str (int (input('>>>')))
//如果是-号开头,就减去-
if a.startswith('-') :
lena=len(a)-1
else:
"lena=len(a)
print('数字({}是{}位数,' . format (a, lena))
fori in a:
if i=='-':
continue
"print('数字(}重复{}次'. format (i,a.count(i)))
//字符串中开始迭代
for i in reversed(a) :
"print(i)
实例4:
陌生人
14:13:13
num=input("<<<")
length=len (num)
/
/
初始化一个lst
10
lst=[False]*10//
false等效于0
/
/
长度打印
print ("length: {}" . format (length))
for i in range (1, length+1) :
/
/
从
-1
开始打印
print (num[-i],end='')
lst [int (num[-i])]+=1
print ()
for j in range(10) :
if lst[j] :
print ("{}????:{:3}". format(j,lst[j]))
实例5:
08魏宇彤14:13:04
val = input('>>> ')
//拿到字符串进行打印 长度与字符串拼接也出来了
print('val='+val +’lenth='+str (len(val)))
//这叫惰性求值,发起请求后才开始进行处理,什么时候要,什么时候做
//list 立即出现一个列表
lst=list (reversed (val))
title = ('个',十", '百,'千','万", '十万", '百万')
//拿到列表进行遍历
for i in range(len(lst)) :
print('{:>2}: {}
num={}'. format (title[i],lst[i],lst.count(lst[i]) ))
实例5改进:
val = input('>>> ' )
print('val='+val + ' lenth='+str (len (val)))
//循环和长度相关
for i in range (len(val)) :
//format函数使用
print(' {}num={}'. format (val [len (val)-i-1],val. count (val[len(val)-i-1]) ))
要学会这么分析,怎么简化问题
列表可以巧妙使用索引,索引统一为字典中的key
二、 第一题解答
num = ""
#数字输入的简单判断
while True:
//用户输入字符串
num = input( "Input a positive number >>>').strip().1strip( '0')
//简单判断函数是否有用
if num.isdigit():
break
print( "The length of is {}.".format(num,len(num) ))
#倒序打印1
//函数len(num)求值时只算一次
for i in range(len(num),0,-1):
print(num[i-1], end=" ')
print()
可迭代这种懒加载方式是有好处的
#倒序打印2
不套用list有助于提高效率
for i in reversed(num):
print(i,end=' ')
print()
#负索引方式打印
//最好是使用负索引方式打印
for i in range( len(num)):
print(num[-i-1],end=' ')
print()
#判断0-9的数字在字符串中出现的次数,每一次迭代都是用count,都是o(n)问题
counter =[0]*18
//借用了index的方法特点
for i in range(10): # 10*n
counter[i] = num.count(str(i))
if counter[i]:
print("The count of {} is }".format(i,counter[i]))
再次提高效率
print( '~"*20)
#迭代字符串本身的字符
counter = [0]*10
//for循环,找到索引值,进行计数,用本身进行迭代
for x in num: # unique(n) *n ,unique(n)取值[1,10]
i = int(x)
if counter[i] == :
//count函数的使用,count一定会从头到尾遍历一遍才会知道有几个,规模有多大就会走多大
counter[i] = num.count(x)
print("The count of fis {f}".Format(x,counter[1]))
print(' ~"*20)
#迭代字符串本身的字符
counter = [0]*10
for x in num: # n
i = int(x)
//从自身开始增加
counter[i] += 1
这个比上面更加简单有效
for i in range( len(counter)) :
if counter[i]:
print("The count of is {}".format(i,counter[i]))
在工作中,一定要善于分析,可能算法不是最优,能实践出来,大家都能实现,复杂度没那么高,才是最优
三、 第二题解答
输入5个数字,打印每个数字的位数,将这些数字排序打印,要求升序打印
实例1:
#柱子15:36:12
//添加一个列表
lst=[]
//for循环午五次
for i in range (5) :
//每次拿到数字取整
n=int (input('>>>'))
//打印出来
print (n)
//把数字追加到列表中
lst.append (n)
//打印出列表长度
length=len(lst)
for s in range (length) :
for j in range (length-1-s) :
if lst[j]>lst[j+1] :
lst[j],lst[j+1]=lst[j+1],lst[j]
print (lst)
运行:sorted
(‘abcd’)
结果:[
‘a’,’b’,’c’,’d’]
立即返回一个列表
实例2:
#47刘凯15:36:26
//首先输入五个数字添加到列表
lst=[]
for i in range(5) :
a=str (int (input('>>>')))
lst . append (a)
for i in lst:
if i.startswith('-') :
/
/
负数长度要
-
1
leni=len(i)-1
else:
leni=len(i)
print('数字{}是{}位数, ' . format (i, leni))
/
/
判断数字是正数还是负数
a=lst
lena=len(a)
for i in range (lena-1) :
/
/
每循环一次添加一个标记,进行了优化
flag=False
for j in range (lena-1-i) :
if a[j]>a[j+1] :
a[j],a[j+1]=a[j+1],a[j]
flag=True
if not flag:
break
print('输入元素升序排列结果为:',a)
实例3:
//先创建一个列表
lst = [0]*5
//输入1-6
for i in range(1,6) :
//输入5次
val = input('>>> ')
//进行赋值
lst[i-1] = val
print (' length='+str (len(val)) )
//用给定的函数进行排序
print (sorted(Ist,key=int) )
正确参考:
nums = []
while 1en(nums) < 5:
num = input("Please input a number: ").strip().1strip('e')
if not num.isdigit():
continue
print( 'The length of fis f}'.format(num,1en(num)))
/
/
把满足要求的进行写入
nums.append(int(num))
print(nums)
#sort方法排序
//拷贝一份
lst = nums.copy()
lst.sort()# 就地修改
print(lst)
)
#冒泡法
for i in range( len(nums)):
flag = False
for j in range(len(nums )-i-1):
if nums[j]> nums[j+1]:
tmp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = tmp
flag = True
if not flag:
break
print(nums)