小甲鱼第十九课:函数:我的地盘听我的课后总结

0. 下边程序会输入什么?

def next():
    print('我在next()函数里...')
    pre()
def pre():
    print('我在pre()函数里...')
    
next()
我在next()函数里...
我在pre()函数里...

总结:在def next里面加入了pre,而pre也在下面定义了,所以全部都会打印。

4. 目测以下程序会打印什么内容?

var = ' Hi '
def fun1():
    global var
    var = ' Baby '
    return fun2(var)
def fun2(var):
    var += 'I love you'
    fun3(var)
    return var
def fun3(var):
    var = ' 小甲鱼 '
print(fun1())

首先来1.global将var定义了一个全局变量,因此hi会被改变,若此时最后加上一行print(var)。则会打印baby。如果去掉global,加上一行后会打印hi
2.fun3并没有返回值,比如像下面这样编码:

var = 'hi'
#注意这里一定要定义!因为在函数中的为局部变量
def fun3(var):
    var = ' 小甲鱼 '
fun3(var)

以上会打印空,因为并没有值给fun3,以此类推,所以源代码fun3无效
因此最后将会打印的值为:Baby i love you

0. 编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)。

自己的答案(错误!)
def back():
    print('请输入查询:',end='')
    temp = input()
    i = 0
    z = 0
    while i < (len(temp)//2):
        temp1 = temp[i]
        if temp.find(temp1,i,i) == temp.rfind(temp1,i,i):
            z = 2
            i +=1
        else:
            z = 1
            break
    if z == 1 :
        print('不是')
    elif z == 2 :
        print('是')

back()

find,rfind用法理解错误:如下例子

str_super = "this is really a string example....wow!!!"
substr = "s"

print(str_super.rfind(substr))
print(str_super.rfind(substr, 0, 10))
print(str_super.rfind(substr, 10, 0))

print(str_super.find(substr))
print(str_super.find(substr, 0, 10))
print(str_super.find(substr, 10, 0))
————————————————
版权声明:本文为CSDN博主「追风筝的人000」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44901453/article/details/89598154
结果:
17
6
-1
3
3
-1

可以看到,rfind作用是倒着查找到第一个s,然后输出位置,而位置同样为正向数的位置
如果有大神有兴趣可以帮我改一下上面程序使得其可行。

网上答案一:https://www.jianshu.com/p/f9bb090aaf24
def palindrome(string):
    length = len(string)
    last = length-1
    length //= 2
    flag = 1
    for each in range(length)
    #注意:range一个数是从0到这个数减一,不包括它本身
        if string[each] != string[last]:
            flag = 0
        last -= 1
    if flag == 1:
        return 1
    else:
        return 0
string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')

答案二是利用了列表的reverse,因此需要提前将字符串变成列表形式

def back():
    list1 = []
    list2 = []
    print('请输入字符串:',end='')
    temp = input()
    list1 = list(temp)
    list2 = reversed(list1)

    if list1 == list(list2):
        print('是回文联')
    else:
        print('八是哦')

back()

这里要注意关于reverse的问题,在写这个代码的时候我先是用了列表的list.reverse(),然后赋值给list2.
结果发现输出list2为空,而list1被颠倒了。

def back():
    list1 = []
    list2 = []
    print('请输入字符串:',end='')
    temp = input()
    list1 = list(temp)
    list2 = list1.reverse()

    if list1 == list2:
        print('是回文联')
    else:
        print('八是哦')
back()

结果:
请输入字符串:asddddd
['d', 'd', 'd', 'd', 'd', 's', 'a']
None
八是哦

这是因为reverse是list1的内置函数,为了节省时间,所以直接对list1进行改变,返回值为空所致。
因此,这里若想赋值给list而只有采取序列操作符reversed,并且再次list,才能得到想要的值。

1. 编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数。

def number(*s):
    length = len(s)
    for z in range(length):
       i = 0
       a = 0
       b = 0
       c = 0
       for each in s[z]:
           if each.isdecimal():
               i +=1
           elif each.isalpha():
               a +=1
           elif each.isspace():
               b +=1
           else:
               c +=1
       print('第',z,'段字符含有数字:',i,'个 英文:',a,'个 空格:',b,'个 特殊字符:',c,'个')


number ('I love fish.com 123', 'I love you', 'you love 123')
    

注意!!!!!1.字符串内置函数记得打括号!!!!
2.如果用input输入’I love fish.com 123’, ‘I love you’, ‘you love 123’,则输入的默认为一个字符串,而不会像放在numer里面那样是三个字符串**(这里有待理解!)**

发布了17 篇原创文章 · 获赞 1 · 访问量 354

猜你喜欢

转载自blog.csdn.net/cccccccaaaaaaaaa/article/details/105311076
今日推荐