miusa 发表于 2020-3-10 15:21:35

第19讲课后题,求指点动动手代码问题

本帖最后由 miusa 于 2020-3-10 15:39 编辑

一共是2个问题哈~

1、编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)
我写的代码如下,可以运行,但是无论输入什么都不是回文联,是哪里出了问题呢……
def huiwen(x):
    a = len(x)
    i = 0
    for each in x:
      for every in reversed(x):
            if each == every:
                i += 1

    if i == a:
      print('是回文联')
    else:
      print('不是回文联')


2、编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数
我写的代码如下,可以运行,第一个字符串计算正确,可如果函数中有两个字符串,第二个字符串的数据会叠加第一个字符串的数据,求指点问题
def count(*x):
    n,a,b,c,d = 0,0,0,0,0
    for each in x:
      for y in each:
            y = str(y)
            if y.isalpha():
                a += 1
            elif y.isdigit():
                b += 1
            elif y.isspace():
                c += 1
            else:
                d += 1
      n += 1
      print('第%d个字符串共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个'%(n,a,b,c,d))

print(count('12345','12345'))

qiuyouzhi 发表于 2020-3-10 15:25:03

%d呢?
def count(*x):
    n,a,b,c,d = 0,0,0,0,0
    for each in x:
      for y in each:
            y = str(y)
            if y.isalpha():
                a += 1
            elif y.isdigit():   #记得用elif!!!!!而不是多个if!!!!
                b += 1
            elif y.isspace():
                c += 1
            else:
                d += 1
      n += 1
      print('第%d个字符串共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个'%(n,a,b,c,d)) # 倒数两个%d没有加d

print(count('12345','12345'))

miusa 发表于 2020-3-10 15:32:28

qiuyouzhi 发表于 2020-3-10 15:25
%d呢?

emmmmmmm……………………粗心贴错,之前是用的(‘第’,n,'个字符串共有……)这种写法写的,在做笔记时有两个d没打上去。
不过这俩d不影响结果,还是一样的问题
顺便想问帖子能修改么{:10_266:}这种粗心的错误,影响大神的思路{:10_277:}

qiuyouzhi 发表于 2020-3-10 15:35:10

miusa 发表于 2020-3-10 15:32
emmmmmmm……………………粗心贴错,之前是用的(‘第’,n,'个字符串共有……)这种写法写的,在做笔记时 ...

能的,帖子右下有一个编辑

qiuyouzhi 发表于 2020-3-10 15:38:44

先回答一个:
def huiwen(x):
    if x[::-1] == x:
      print("是回文联")
      return
    print('不是回文联')

huiwen("上海自来水来自海上")
直接列表切片就好了

qiuyouzhi 发表于 2020-3-10 15:41:31

第二个:
def count(*x):
    n,a,b,c,d = 0,0,0,0,0
    for each in x:
      for y in each:
            y = str(y)
            if y.isalpha():
                a += 1
            elif y.isdigit():   #记得用elif!!!!!而不是多个if!!!!
                b += 1
            elif y.isspace():
                c += 1
            else:
                d += 1
      n += 1
      print('第%d个字符串共有:英文字母%d个,数字%d个,空格%d个,其他字符%d个'%(n,a,b,c,d)) # 倒数两个%d没有加d
      n,a,b,c,d = 0,0,0,0,0

print(count('12345','12345'))
第一次计算完后将所有变量重置为0

miusa 发表于 2020-3-10 15:47:21

qiuyouzhi 发表于 2020-3-10 15:38
先回答一个:

直接列表切片就好了

新写法已get。可是我那个问题在哪里呢……

qiuyouzhi 发表于 2020-3-10 15:49:20

miusa 发表于 2020-3-10 15:47
新写法已get。可是我那个问题在哪里呢……

reverse返回的是reverse对象:
>>> x = "qiuyouzhi"
>>> reversed(x)
<reversed object at 0x00000226D1B56970>
>>> x
'qiuyouzhi'
>>> list(reversed(x))
['i', 'h', 'z', 'u', 'o', 'y', 'u', 'i', 'q']
页: [1]
查看完整版本: 第19讲课后题,求指点动动手代码问题