张静aa 发表于 2021-6-1 14:04:37

第19讲最后一题动动手求助

题目: 编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数。
代码:
English letters ='QWERTYUIOPASDFGHJKLZXCVBNM'
numbers = '1234567890'
blank space= ' '
others = `';.,/[]{}:""?><~!@#$%^&*()
temp = input('请输入一段话')
L1=list(temp)
for each in L1:
    letter_count=0
    numbers_count=0
    blank_count=0
    others_count=0
    if English letters in L1:
      letter_count+=1
    elif numbers in L1:
      numbers_count+=1
    elif blank space in L1:
      blank_count+=1
    else others in L1:
      others_count+=1
print('英文字母%d个,数字%d个,空格%个,其他字符%d个。%(letter_count,numbers_count,blank_count,others_count))
   

这是我编写的代码。运行出错,一直在第一行,错误提示'invalid syntax'
不知道咋改,求大神指教!谢谢啦~

灰晨 发表于 2021-6-1 14:39:58

def count(*param):
    length = len(param)
    for i in range(length):
      letters = 0
      space = 0
      digit = 0
      others = 0
      for each in 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 don't love you.", 'I love you, you love me.')

这里传入了2个参数,"I don't love you."和'I love you, you love me.'

张静aa 发表于 2021-6-1 15:00:36

灰晨 发表于 2021-6-1 14:39
这里传入了2个参数,"I don't love you."和'I love you, you love me.'

我写的代码还有改进的余地吗?{:10_250:}

灰晨 发表于 2021-6-1 15:36:37

本帖最后由 灰晨 于 2021-6-1 15:49 编辑

张静aa 发表于 2021-6-1 15:00
我写的代码还有改进的余地吗?

emmmm,你这代码错得有那么亿点点多。。
1.English letters和blank space命名就不规范,变量名除下划线不能有其他字符的(比如空格)
2.others后面也没加引号表示字符串,而且里面一堆符号还得考虑转义字符。。。
3.L1=list(temp)是把你输入的话一个字符当一个元素的,比如我输入love,L1就是['l','o','v'','e'],你后面English_letters in L1肯定是没有的啊,而且python是分大小写。。。
4.for each in L1你这个each就没见你用。。按你的思路你下面判断应该得if each in English_letters,你既然把你输入的话拆成一个一个元素,就应该判断这个元素在不在English_letters里,而不是判断English_letters在不在你这单个元素里
5.letter_count=0
numbers_count=0
blank_count=0
others_count=0
不能放循环里,不然每次循环都清0了。
6.print也少了个引号和%d的d
我帮你改了改English_letters ='QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
numbers = '1234567890'
blank_space= ' '
others = '''`';.,/[]{}:""?><~!@#$%^&*()'''
temp = input('请输入一段话')
L1=list(temp)
letter_count=0
numbers_count=0
blank_count=0
others_count=0
for each in L1:
    if each in English_letters:
      letter_count += 1
    elif each in numbers:
      numbers_count += 1
    elif each in blank_space:
      blank_count += 1
    else:
      others_count += 1
print('英文字母%d个,数字%d个,空格%d个,其他字符%d个。'%(letter_count,numbers_count,blank_count,others_count))
而且你这代码只能传一段话

张静aa 发表于 2021-6-1 19:49:30

灰晨 发表于 2021-6-1 15:36
emmmm,你这代码错得有那么亿点点多。。
1.English letters和blank space命名就不规范,变量名除下划 ...

{:10_266:}好的,谢谢了。我好好理解下答案的做法
页: [1]
查看完整版本: 第19讲最后一题动动手求助