55、2-字符串习题讲解

作者: BeautifulSoulpy | 来源:发表于2019-05-28 17:46 被阅读2次
使你痛苦者,必使你强大!
Jupyter notebook 使用

Python·Jupyter Notebook各种使用方法记录·持续更新
https://blog.csdn.net/tina_ttl/article/details/51031113

Jupyter Notebook的27个窍门,技巧和快捷键
https://www.weixin765.com/doc/kbrtriqf.html
{}位数!'.format(n))

1. 函数与方法优缺点:
+   #字符串拼接不推荐使用,拼接会出现一个新的字符串;format不会出现一个新str;
reversed()    #不推荐使用,
range()    #正反没有差异,无非就是+1的问题;
count() #count() 是O(n),一定是遍历完才知道结果;
sort()  #就地排序
sorted()    #生成一个新的列表;

类型转换函数:(#强制类型转换浪费时间;不推荐遍历('_','+')方法O(n);)
list()
int()
str()

习题1. 用户输入一个数字:判断是几位数;打印每一位数字及其重要的次数;打印每一位数字,顺序个、十、百、千、万...;

# 方法1:不适用list,字典、str索引的方式,
a=(input('请输入一个数字:'))
n=len(a)
# 打印几位数
print('这是一个{}'.format(n))

# 打印每一位数字及其重复的次数;
c=0
b=int(a)
for i in range(1,n+1):
    c=b%10  #余数
    b=b//10  #整数
    print(c)
    print(a.count(str(c)))    #count 函数里面有一层 for 循环;
    if b>0:
        continue
    else:
        break
#for循坏取值的效率比较低,取位数可以使用 list/str 的索引取数;reversed()方法;
#变量取名原则:按照意义取名,不要按照数据类型取名字;

#方法2:索引的使用
val=input('>>> ')
print('val='+val+' lenth='+str(len(val)))   # 字符串拼接 生成一个新的list;
lst=list(reversed(val))   # reversed() 函数是O(n)问题;
title=('个','十','百','千','万','十万','百万')
for i in range(len(lst)):
    print('{:>2}: {} num={}'.format(title[i],lst[i],lst.count(lst[i])))
---------------------------------------------
>>> 456789
val=456789 lenth=6
9 num=1
8 num=1
7 num=1
6 num=1
5 num=1
4 num=1

# 方法2 改进版:
val=input('>>> ')
print('val='+val+' lenth='+str(len(val)))   # 字符串拼接 生成一个新的list;

for i in range(len(val)):
    print('{} num={}'.format(val[len(val)-i-1],val.count(val[len(val)-i-1])))
--------------------------------------------------
>>> 456789
val=456789 lenth=6
9 num=1
8 num=1
7 num=1
6 num=1
5 num=1
4 num=1

# 方法3:字符串的索引新变化;
#索引的用法(索引本身是数字;本身就是key)

num=input(">>>")
length=len(num)
print("length:{}".format(length))

lst=[0]*10  #0
for i in range(1,length+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]))
----------------------------------------------------
>>>455678
length:6
876554
4?????:  1
5?????:  2
6?????:  1
7?????:  1
8?????:  1

# 方法4:使用字符串方法,
num=''
#数字输入的简单判断;
while True:
    num=input('Input a positive number >>> ').strip().lstrip('0') # 解决高位为0的情况;
    if num.isdigit():
        break
print("The length of {} is {}.".format(num,len(num)))

# 1 倒序打印
for i in range(len(num),0,-1):  #range()正反序都无所谓;
    print(num[i-1],end=' ')
print()

# 2 倒序打印
# 要的时候反着拿一个;推荐使用这种方法;( Python的惰性 )
for i in reversed(num):
    print(i,end=' ')
print()

# 3 负索引方式打印;
for i in range(len(num)):
    print(num[-i-1],end=' ')   #直接取负索引的方式;
print()

# 判断0-9在字符串中出现的次数;每一次迭代都是使用count(O(n)) ;
counter=[0]*10
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 x in num:     #取本身出现的字符奇数(10n-n)
    i=int(x)
    if counter[i]==0:
        counter[i]=num.count(x)
        print("The count of {} is {}".format(x,counter[i]))
print('-'*20)

counter=[0]*10
for x in num:     #取本身出现的字符奇数(10n-n)
    i=int(x)
    counter[i]+=1
for i in range(len(counter)):
    if counter[i]:
        print("The count of {} is {}".format(x,counter[i]))
-------------------------------------------------------------------------
Input a positive number >>> 546723
The length of 546723 is 6.
3 2 7 6 4 5 
3 2 7 6 4 5 
3 2 7 6 4 5 
The count of 2 is 1
The count of 3 is 1
The count of 4 is 1
The count of 5 is 1
The count of 6 is 1
The count of 7 is 1
--------------------
The count of 5 is 1
The count of 4 is 1
The count of 6 is 1
The count of 7 is 1
The count of 2 is 1
The count of 3 is 1
--------------------
The count of 3 is 1
The count of 3 is 1
The count of 3 is 1
The count of 3 is 1
The count of 3 is 1
The count of 3 is 1
#强制类型转换浪费时间;不推荐遍历('_','+')方法O(n);

习题2. 输入5个数字,打印每个数字的位数吗,将这些数字升序打印;

# 方法1 
nums=[]
while len(nums)<5:
    num=input("Please input a number:").strip().lstrip('0')
    if not num.isdigit():
        continue
    print('The length of {} is {}'.format(num,len(sum)))
    nums.append(int(num))
print(nums)

# sort方法排序;
lst=nums.copy()
lst.copy() #就地修改
print(lst)

# 冒泡法;
for i in range(len(nums)):
    flag=False
    for j in range(len(nums)-i-1):
        if nums[j]>nums[j+1]:
            nums[j],nums[j+1]=nums[j+1],num[j]
            flag=True
    if not flag:
        break
print(nums)

方法2:sorted排序;
lst=[0]*5
for i in range(1,6):
    val=input('>>>')
    lst[i-1]=val
    print('length='+str(len(val)))
print(sorted(lst,key=int))
-------------------------------------
>>>1
length=1
>>>5
length=1
>>>6
length=1
>>>9
length=1
>>>8
length=1
['1', '5', '6', '8', '9']


总结:
1. 负索引的新玩法:lst[int(num[-i])]+=1
2. lst、字符串的方法更加的复杂,有趣,

相关文章

  • 55、2-字符串习题讲解

    Jupyter notebook 使用 Python·Jupyter Notebook各种使用方法记录·持续更新h...

  • 3.27

    剩: 英语10-15 数学10 讲解+习题讲解 11讲解+习题讲解 逻辑04论证 证券 初级

  • 10.2-字符串习题讲解

    使你痛苦者,必使你强大!生活不是等着暴风雨过去,而是学会在风雨中跳舞。 1. 函数与方法优缺点: 习题1. 用户输...

  • 《工程数学》作业列表

    《工程数学》上机1(习题).ipynb 《工程数学》上机2-牛顿法(习题).ipynb 《工程数学》上机3 - 矩...

  • 2018-05-30

    多个课上讲解的练习题就不发了! 文件复制 Fscanf测试 Fprintf测试 结构体录入 文件操作 字符串读写函...

  • 2019-04-15字符串

    字符串截取 练习题 字符串之split

  • 习题讲解思考

    如何能让学生在学习数学的过程中获得深度学习的体验。 措施一:动画效果与语言表达一致。 措施二:教师思维与学生思维同步。

  • 10月17日-4期C语言学习总结

    总结:今天延续昨天的PPT,老师接着第二章的内容讲了字符串。老师讲解很透彻,下午助教接着带领我们练习昨天的习题。我...

  • 数据库语言杂记

    MySQL ORDER BY 排序 IF 及 IN 字符串连接函数concat() MySQL练习题:练习题一 ...

  • python 学习笔记5 2018-4-10

    一,习题讲解 ``` - (instancetype)initWithFrame:(CGRect)frame{se...

网友评论

    本文标题:55、2-字符串习题讲解

    本文链接:https://www.haomeiwen.com/subject/zphdtctx.html