zoukankan      html  css  js  c++  java
  • part4-3 分支结构 、循环结构练习

    1、使用循环输出九九乘法表。输出样式结果如下:
    1 x 1 = 1
    1 x 2 = 2, 2 x 2 = 4
    ......
    1 x 9 = 9, 2 x 9 = 18, 3 x 9 = 27, ... , 9 x 9 = 81

    1 for i in range(1, 10):
    2     for j in range(1, i+1):
    3         if j == i:
    4             print("%d x %d = %-2d" % (j, i, j * i), end="")
    5         else:
    6             print("%d x %d = %-2d" % (j, i, j * i), end=", ")
    7     print()

    2、使用循环输出等腰三角形。例如给定4,输出如下结果:
       *
    ***
    *****
    *******
    1 lines = int(input("输入要打印的行数:"))
    2 for i in range(lines):
    3     for _ in range(1, lines - i):
    4         print(end=" ")
    5     for _ in range(2 * i + 1):
    6         print("*", end="")
    7     print()

    3、给定一个奇数,例如3,输出横、竖、斜的总和相等:
    08 01 06
    03 05 07
    04 09 02
    例如给出数字5,输出是:
    17 24 01 08 15
    23 05 07 14 16
    04 06 13 20 22
    10 12 19 21 03
    11 18 25 02 09

    代码示例如下:
     1 size = int(input("请输入一个奇数:"))
     2 if size % 2 != 1:
     3     exit("输入的不是奇数,程序结束!")
     4 # 创建一个长度 size * size 的二维列表
     5 array = [[0] * size]
     6 for i in range(size - 1):
     7     array += [[0] * size]
     8 row, col = 0, size // 2         # 数字 1 填在第一行的中间
     9 for i in range(1, size * size + 1):
    10     array[row][col] = i
    11     if i % size == 0:   # 能整除时,行号加1,列号不变,往下填数字
    12         row += 1
    13     elif row == 0:      # 如果行号(row)等于0,就跳转到最后一行,并且列号加 1
    14         row = size - 1
    15         col += 1
    16     elif col == size - 1:   # 如果行号不等于0,列号到达最右边,就移动上一行的最左边
    17         row -= 1
    18         col = 0
    19     else:       # 从左下角往右上角填数字
    20         row -= 1
    21         col += 1
    22 maxnum = size * size
    23 if maxnum < 100:
    24     for i in range(size):
    25         for j in range(size):
    26             print('%02d' % array[i][j], end=" ")
    27         print()
    28 else:
    29     maxnumstr = "%0" + str(len(str(maxnum))) + "d"
    30     for i in range(size):
    31         for j in range(size):
    32             print(maxnumstr % array[i][j], end=" ")
    33         print()

    4、使用循环输出菱形,例如输入7,输出如下结果,如果输入偶数提示不能打印:
       *
    ***
    *****
    *******
    *****
    ***
    *
    根据规律,菱形可从中间分开,分为上半部分和下半部分,上半部分左边的空格依次减少,星号(*)是 2 * i + 1 的规律增加。下半部分左边的空格依次增加,星号是 line - 2 - 2 * j 的规律减少。用代码实现如下:
     1 line = int(input("请输入菱形的行数,输入偶数不能打印:"))
     2 if line % 2 == 0:
     3     exit("输入的是偶数,不能打印!")
     4 half_line = line // 2 + 1       # 从中间分开,分上半部分和下半部分
     5 for i in range(half_line):
     6     # 打印上半部分
     7     print(" " * (half_line - i - 1), end="")
     8     print("*" * (2 * i + 1))
     9 for j in range(half_line - 1):
    10     # 打印下半部分
    11     print(" " * (j + 1), end="")
    12     print("*" * (line - 2 - 2 * j))

    5、使用循环输出空心菱形,提示只能输入奇数,例如输入7,输出如下结果
       *
    * *
    * *
    * *
    * *
    * *
    *
    找规律:将菱形分为上半部分和下半部分。上半部分左边的空格从上到下依次减少(half_line - i - 1),下半部分左边空格依次增多(i + 1)。上半部分星号之间的空格依次增加(2*i-1),下半部分星号之间的空格依次减少(line-4-2*i)。代码如下:
     1 line = int(input("请输入要打印的行数(奇数):"))
     2 if line % 2 == 0:
     3     exit("输入的是偶数,不能打印!")
     4 half_line = line // 2 + 1
     5 # 打印上半部分
     6 for i in range(half_line):
     7     print(" " * (half_line - i - 1), end="")
     8     if i == 0:
     9         print("*")
    10     else:
    11         print("*", end="")
    12         print(" " * (2 * i - 1), end="")
    13         print("*")
    14 # 打印下半部分
    15 for j in range(half_line - 1):
    16     print(" " * (j + 1), end="")
    17     # 判断是否到最后一行
    18     if j == half_line - 2:
    19         print("*")
    20     else:
    21         print("*", end="")
    22         print(" " * (line - 4 - 2 * j), end="")
    23         print("*")

    6、用户输入成绩,程序自动判断出成绩的类型:成绩>=90分用A表示,80~89分用B表示,70~79分用C表示,其他用D表示。
     1 while True:
     2     score = input("请输入你的成绩:")
     3     if score == 'exit' or score == 'q':
     4         exit()
     5     s = float(score)
     6     if s >= 90:
     7         print("A")
     8     elif 89 >= s >= 80:
     9         print("B")
    10     elif 79 >= s >= 70:
    11         print("C")
    12     else:
    13         print("D")

    7、判断101~200之间有多少个素数(质数),并输出所有的素数(质数)。
     1 prime_num = []
     2 start = 101
     3 end = 200
     4 for i in range(start, end):
     5     is_prime = True     # 通过使用标志位来判断是否是素数
     6     for j in range(2, int(i ** 0.5) + 1):
     7         if i % j == 0:
     8             is_prime = False
     9     if is_prime:
    10         prime_num.append(i)
    11 print(prime_num)

    8、打印水仙花数,水仙花数是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,
    153=1**3 + 5**3 + 3**3
     1 # 方法一,打印三位数中的水仙花数
     2 start = 101
     3 end = 1000
     4 for i in range(start, end):
     5     bai = i // 100      # 取百位数
     6     # 取十位数和个位数
     7     shi, ge = (i - bai * 100) // 10, i % 10
     8     if bai ** len(str(i)) + shi ** len(str(i)) + ge ** len(str(i)) == i:
     9         print(i)
    10 
    11 # 方法二:打印1~1千万个数中的水仙花数
    12 start = 1
    13 end = 10 ** 7
    14 for i in range(start, end + 1):
    15     sm = 0
    16     for j in str(i):
    17         sm += (ord(j) - 48) ** len(str(i))
    18     if sm == i:
    19         print(i)
    20 
    21 # 方法三:使用列表推导式
    22 daffo_num = [j for j in range(1, 10 ** 5)
    23              if sum([(ord(i) - 48) ** len(str(j)) for i in str(j)]) == j]
    24 print(daffo_num)

    9、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符个数。
     1 s = input("请输入一行字符:")
     2 char_num, digit_num, space_num, other_num = 0, 0, 0, 0
     3 for c in s:
     4     if c.isdigit(): digit_num += 1
     5     elif c.isalpha(): char_num += 1
     6     elif c.isspace(): space_num += 1
     7     else: other_num += 1
     8 print("字母个数:", char_num)
     9 print("数字个数:", digit_num)
    10 print("空格个数:", space_num)
    11 print("其他字符个数:", other_num)

    10、打印近似圆,只要给定不同的半径,圆的大小就会随之发生改变。
    1 raidus = int(input("请输入圆的半径:"))
    2 for i in range(2 * raidus + 1):
    3     half = round((raidus ** 2 - (raidus - i) ** 2) ** 0.5)
    4     print("  " * (raidus - half), end="")
    5     print("*", end="")
    6     print("  " * half * 2, end="")
    7     print("*")

    11、输入一半的行数,输出对称字符,例如输入3,输出:
    ----c----
    --c-b-c--
    c-b-a-b-c
    --c-b-c--
    ----c----
    代码如下:
     1 line = int(input("请输入一半的行数:"))
     2 # 打印上半部分
     3 for i in range(line):
     4     print("-" * (line * 2 - 2 - 2 * i), end="")
     5     my_list = []
     6     for j in range(i + 1):
     7         my_list.append(chr(96 + line - j))
     8     for j in range(i):
     9         my_list.append(chr(ord(my_list[-1]) + 1))
    10     print("-".join(my_list), end="")
    11     print("-" *  (line * 2 - 2 - 2 * i))
    12 # 打印下半部分
    13 for i in range(line - 1):
    14     print("-" * (2 * (i + 1)), end="")
    15     # 换一种方式初始化列表
    16     my_list = [chr(96 + line - j) for j in range(line - 1 - i)]
    17     for j in range(line - 2 - i):
    18         my_list.append(chr(ord(my_list[-1]) + 1))
    19     print("-".join(my_list), end="")
    20     print("-" * (2 * (i + 1)))
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/Micro0623/p/11526940.html
Copyright © 2011-2022 走看看