记一道Python题解

前言

有同学有道题不会,便来问我。我以为会很难,就写了个开头。结果写完发现,不过如此,哎。不过开头写都写了,干脆氵完好了。

题目

题目描述

输入若干个字符,按回车键结束输入,请你采用Python语言编程完成下面需求:

  1. 统计出其中大写英文字母 A~Z 的个数为 a
  2. 统计出其中小写英文字母 a~z 的个数为 b
  3. 统计出其中数字字符 0~9 个数为 c

若以a、b、c的值作为任意的直角边和斜边方式有一种可以组成直角三角形(勾股定理),输出YES和abc的值,中间用一个空格隔开; 不能组成直角三角形,直接输出NO

题目要求

  • 输入形式 输入一行宇符串,按回车键结束

  • 输出形式 输出 YES abcNO

  • 样例输入1

    NBA Kobe Hu 824
    
  • 样例输出1

    YES 5 43
    
  • 样例输入2

    NBA Kobe Brvant 824
    
  • 样例输出2

    NO
    

{% note info:: 注意YES的情况还要求按大写字母个数、小写字母个数及数字字符个数顺序输出三边长,中间用一个空格隔开 %}

题解

思路

很简单的计数,for循环即可轻松解决。三角形的判定if应该就可以了。

代码

S = input()

Count_Up = Count_low = Count_dg = null = 0

for c in S:
    if c.isupper():
        Count_Up += 1
    elif c.islower():
        Count_low += 1
    elif c.isdigit():
        Count_dg += 1
    else:
        null += 0

if Count_Up ** 2 + Count_low ** 2 == Count_dg ** 2 or Count_low ** 2 + Count_dg ** 2 == Count_Up ** 2 or Count_dg ** 2 + Count_Up ** 2 == Count_low ** 2:
    print('YES', Count_Up, Count_low, Count_dg)
else:
    print('NO')

应该是没有大问题的,至少样例是能过的。

Licensed under CC BY-NC-SA 4.0