【Pyhon 019讲心得体会】【回文联和统计字符串的个数】
本帖最后由 heidern0612 于 2018-12-17 09:57 编辑写的内容都是自我思考的过程,难免有疏漏,有错误的地方欢迎广大鱼油给予指正!感激不尽
1、
def next(): #定义next函数
print('我在next()函数里...')
pre() #调用pre函数,pre函数的内容是打印“我在pre()函数里...”这句话。
def pre():
print('我在pre()函数里...')
next() #调用next函数,会输出以上两句话。
2、
def hello():
print('Hello FishC!')
调用函数的话,会打印print内部的字符串,但是返回的值为空,也就是None.
3、
def fun(var全局):
var内部 = 1314
print(var内部, end='')
var全局 = 520
fun(var全局) #调用fun()函数,全局变量进入函数内部后被局部变量重新赋值了,所以调用函数打印的是1314。
print(var全局) #简单的打印全局变量520
最终输出结果是1314520 。
4、
var 全局= ' Hi '
def fun1():
global var #声明此函数内部的var是全局变量
var全局 = ' Baby ' #var重新赋值 = "Baby"
return fun2(var) #返回fun2("Baby I love you"的值给fun1("Baby"))
def fun2(var全局): #定义fun2(Baby)
var局部 += 'I love you' #全局变量进入函数内部后+=“i love you”;局部变量变成了"Baby I love you"
fun3(var) #调用fun3(Baby)无意义
return var #返回var当前的值,var当前值为“Baby I love you”
def fun3(var): #定义fun3(Baby)
var = ' 小甲鱼 ' #函数内部定义var为“小甲鱼”,出了函数无法调用。
print(fun1()) 打印fun1()函数的内容(其实就是fun2的返回值var)
假定这里打印fun2(var)和fun3(var)的话,fun2(var)的打印结果跟fun1()是一样的,fan3(var)由于没有设置返回值,所以返回的是空值,也就是None.
不要轻易使用全局变量!
不要轻易使用全局变量!
不要轻易使用全局变量!
重要的事情说三遍!
5、回文联,简单说就是顺着读和倒着读是一样的。
我比较推荐小甲鱼老师的第二种方法,第二种方法也是我最先想到的。
def palindrome(string): #定义一个函数,包含一个参数
list1 = list(string) #list1 赋值为字符串顺序排列的列表
list2 = reversed(list1) #list2 赋值为字符串逆序排列的迭代器,为什么不直接返回一个逆序排列的列表呢?请认真听小甲鱼老师的课(实际上没有返回值,只是把列表反向)……
if list1 == list(list2): #判断顺序和倒序是否相等
return '是回文联!'
else:
return '不是回文联!'
print(palindrome('上海自来水来自海上'))
另外我还自己想了另外一种方法,也比较简单:
#coding=gbk
def palindrome():
temp = input("请输入文联进行验证:")
if temp == temp[::-1]: #拿字符串 和字符串逆序进行比较(temp = temp[:],复制一个temp字符串,再把步进设置为-1,就是倒着走。)
print('是回文联!')
else:
print( '不是回文联!')
palindrome()
简单的利用切片功能实现回文联效果,也不用考虑列表,迭代子什么乱七八糟的了。
分析下老师的第一种方法:
def palindrome(string):
length = len(string) #分析字符串总长度
last = length-1 #设定last复制为总长度减1(假定字符串有9个字符,想要访问第九个字符,必须是切片的位置。)
length //= 2 #length总长度整除2得到length的重新赋值。这个整除主要是为了判断for循环需要循环几次。(假定字符串有9个字符,则只需要比较前后比较四次就可以。)
flag = 1
for each in range(length): #for循环判断(假定输入9个字符,则只需要判断range(0,4)四个范围值即可)
if string != string: #从输入字符串的开始判断,如果不等于string的位的话.(这里判断的就是字符串第一位跟最后一位是否相同);
第二次循环从字符串第二位开始,跟string的比较,不符的话.(也就是字符串的第二位和倒数第二位比较)
flag = 0 #flag赋值为0,last自身减1,返回for循环,开始第二次判断。
last -= 1
#有同学说了,卧槽我比较一次不相同,后面还用比较吗?这个for循环看着很邋遢啊。万一第一次相同,第二相同,第三次相同,第四次来个不相同呢? for循环主要就是干这个事的。
if flag == 1: #后面就不用解释了,应该都能理解了。
return 1
else:
return 0
string = input('请输入一句话:')
if palindrome(string) == 1:
print('是回文联!')
else:
print('不是回文联!')
6、统计字符串个数
先分析下老师的代码:
def count(*param): #定义函数,传入参数个数未定。
length = len(param) #统计传入参数的长度,注意:这个len的是字符串的个数,而不是单个字符串的长度。假如传入的有两个字符串,那么这个len就是2.
for i in range(length): #for循环遍历整个字符串的长度,用于指定循环的次数,假如只有两个字符串,就循环(0,2)。也就是(0)一次,(1)一次。
letters = 0
space = 0 #初始化四个统计值。
digit = 0
others = 0
for each in param: #这句应该是代码中的精华,指定循环param的第个参数,第一次是排位的字符串,下次循环就是排位的字符串。
if each.isalpha():
letters += 1
elif each.isdigit():
digit += 1
elif each == ' ':
space += 1
else:
others += 1
print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
count('I love fishc.com.', 'I love you, you love me.')
理清下思路,关于传入未知多个字符串的这种统计,分析如下:
1、用len统计字符串的个数。
2、for循环统计总共需要循环几次(根据字符串的个数来算)。
3、for循环统计某个字符在param的个数。(统计单个字符在函数位的个数。)
4、输出打印,调用函数,指定参数,程序结束。
有点难,一点点分析还算比较简单,需要记住这种算法。
牛逼 你这里写错了吧,应该是string与string[-2]进行比较 ccluo 发表于 2019-3-29 10:22
你这里写错了吧,应该是string与string[-2]进行比较
感谢提出意见。
不过我没写错,last是最后一位的话,last-1就是倒数第二位。
也就是string与string[-2]进行比较. 本帖最后由 田埂 于 2020-3-10 15:53 编辑
我懂了··· 我不懂这句“ for each in param:” ,为什么不直接 if param.isalpha() def count(*param):
length=len(param)
for i in range(length):
letters=0
space=0
digit=0
others=0
if param.isalpha():
letters+=1
elif param.isdigit():
digit+=1
elif param==" ":
space+=1
else:
others+=1
print("第%d个字符串共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个"%(i+1,letters,digit,space,others))
count("i love")
为什么这样是错的,好苦恼~ 从拍笋世界路过 发表于 2020-5-1 22:19
def count(*param):
length=len(param)
for i in range(length):
for i in range(length):,这里的i指的是单个的字符串,而不是字符串的每一个元素。
而for each in param:这里的i指的是单个字符串里的每一个元素。
所以你for循环出来的i指的是字符串,而不是字符串的单个元素,都不相等,自然算是other了。 heidern0612 发表于 2020-5-2 07:25
for i in range(length):,这里的i指的是单个的字符串,而不是字符串的每一个元素。
而for each in...
终于懂了,谢谢你呀~
刚回头看了下视频,原来小甲鱼也有说到这个问题的,原来我没认真听{:5_96:}
页:
[1]