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)))
  • 相关阅读:
    命令行工具--netstat
    Man手册--nmap
    bc -l 对于 %取模计算出错
    离散对数和原根 欧拉定理证明
    bc-win32-power-echo-vim-not-work
    2010版EXCEL下方sheet工作表隐藏了
    word多出空标题,样式是列出段落
    plantuml
    久石让《龙猫》豆豆龙 钢琴视奏版
    神奇校车 = topsage
  • 原文地址:https://www.cnblogs.com/Micro0623/p/11526940.html
Copyright © 2011-2022 走看看