python基础(4)——字符串格式化 & while

一、字符串格式化表达式

   作用:
      生成一定格式的字符串
   运算符:
      %
   语法格式:
        格式字符串  % 参数值
        或
        格式字符串  % (参数值1, 参数值2, ...)
    说明:
       % 左侧为格式字符串
       % 右侧为参数值,当有多个参数值是用括号() 括起来,并用逗号(,)分隔
       格式化字符串中以%开头的为占位符,占位符的位置将用参数值替换
    示例:
       fmt = "name: %s, age: %d"
       s = fmt % ('weimingze', 35)
       print(s)  # name: weimingze, age: 35
       "温度:__%d__" % 32

1、格式化字符串中的占位符和类型码

    %s   字符串,使用 str(x) 将x转换为字符串
    %r   字符串,使用 repr(x) 将x转换为字符串
    %c   整数转为单个字符
    %d   转为十进制整数
    %o   转为八进制整数
    %x   十六制进整数(字符a-f小写)
    %X   十六制进整数(字符A-F大写)
    %e   指数型浮点数(e小写), 如2.9e+10
    %E   指数型浮点数(E大写), 如2.9E+10
    %f, %F  浮点数(小数形式)
    %g, %G  十进制浮点数或指数浮点自动转换
    %%   等同于一个%字符

2、占位符和类型码之间的格式化语法:

   % [- + 0 宽度.精度] 类型码
     : 左对齐
   +   : 显示正号
     : 左侧空白位置补零
   宽度 : 整个字符串的字符个数
   精度 : 保留小数点后多少位(默认6位)

示例:
   "%10d"  % 123    # '       123'
   "%+10d" % 123    # '      +123'
   "%-10d" % 123    # '123       '
   "%10s"  % 'abc'  # '       abc'
   "%-5s"  % 'abc'  # 'abc  '
   "%010d" % 123    # '0000000123'
   "%7.3f" % 3.141592535897932  # '  3.141'
   "%07.2f" % 3.141592535897932  # '0003.14'

练习:
   1. 任意输入三行文字,让这三行文字依次以20个字符的宽度右对齐显示输出
     如:
       请输入第1行: hello world
       请输入第2行: abcd
       请输入第3行: a
     输出结果为:
              hello world
                     abcd
                        a
   做完上面的题后再思考:
     能否以最长字符串的长度进行右对齐显示(左侧填充空格)?

#方法1
a = input("请输入第1行: ")
b = input("请输入第2行: ")
c = input("请输入第3行: ")
print("%20s" % a)
print("%20s" % b)
print("%20s" % c)
# 做完上面的题后再思考:
#   能否以最长字符串的长度进行右对齐
#   显示(左侧填充空格)?

# 求最长的一个字符串的字符数
max_len = len(a)
if len(b) > max_len:
    max_len = len(b)
if len(c) > max_len:
    max_len = len(c)

print(" " * (max_len - len(a)) + a)
print(" " * (max_len - len(b)) + b)
print(" " * (max_len - len(c)) + c)

#方法2
a = input("请输入第1行: ")
b = input("请输入第2行: ")
c = input("请输入第3行: ")
# print("%20s" % a)
# print("%20s" % b)
# print("%20s" % c)

# 求最长的一个字符串的字符数
max_len = max(len(a), len(b), len(c))  # 29
print("最长的字符串长度是:", max_len)

fmt = "%" + str(max_len) + 's'  # "%29s"

print(fmt % a)
print(fmt % b)
print(fmt % c)
right_align.py

二、循环语句:

有两条循环语句:
      while 语句
      for 语句
问题:
    输入一个整数n,写程序打印如下n行字符串
       这是第1行
       这是第2行
       这是第3行
       这是第4行
       ...
       这是第n行
    如何让一条语句重复执行多次?
       如果i是一个变量,
       print("这是第", i, '行')

1、while 语句:

  作用:
      根据一定条件,重复的执行一条语句或多条语句

  语法:
     while 真值表达式:
         语句块1
     else:
         语句块2
   说明:
       1.先判断真值表达式,为True或False
       2. 如果为True,则执行语句块1,再回到第一步
       3. 如果为False,则执行语句块2,然后结束此while的执行
       4. else 子句部可以省略(同if类似)

#  打印20行hello!
i = 1  # i变量用于控制循环条件
while i <= 3:  # 如果条件为True
    print("hello!")
    i += 1  # 改变循环条件以便让循环终止
else:
    print("这是else子句,此时将离开while语句")
    print("此时i的值是:", i)  # 4
while1.py
# 打印 1 ~ 20的整数
i = 1
while i <= 20:
    print(i)
    i += 1
while2.py

练习:
   1. 打印 1 ~ 20 的整数,打印在一行内
       1 2 3 4 5 6 .... 18 19 20
       print(i, end=' ')

i = 1
while i <= 20:
    print(i, end=' ')
    i += 1
else:
    print()  # 换行
    # print(end='\n')  # 换行
while_1_20.py

   2. 打印 1 ~ 20 的整数,每行打印5个,打印四行,
     如:
        1 2 3 4 5
        6 7 8 9 10
        ....
     提示:
       可以将if语句嵌入到while语句中来实现换行

# 方法1:
i = 1
while i <= 20:
    print(i, end=' ')
    if i == 5:
        print()  # 换行
    if i == 10:
        print()  # 换行
    if i == 15:
        print()  # 换行
    if i == 20:
        print()  # 换行
    i += 1
else:
    print()  # 换行
    # print(end='\n')  # 换行


# 方法2:
i = 1
while i <= 20:
    print(i, end=' ')
    if i % 5 == 0:
        print()  # 换行
    i += 1
else:
    print()  # 换行
    # print(end='\n')  # 换行
while_1_20_5.py

  3. 用while语句,打印 10 ~ 1的整数
       10 9 8 7 6 5 4 3 2 1

i = 10
while i > 0:
    print(i)
    i -= 1

print("程序退出,此时i的值是:", i)
number_10_1.py

   4. 打印从零开始,的浮点数,每个数增加0.5, 打印出10以内的这样的数
     0.0
     0.5
     1.0
     1.5
     ...
     9.5

i = 0.0
while i < 10:
    print(i)
    i += 0.5
float_0_10.py

练习:
   1. 写程序,计算:
     1 + 2 + 3 + 4 + ......+ 100 的和

s = 0  # 此变量用来记录累加的个数(和)

i = 1
while i <= 100:
    # 此时的i  1 2 3 4 5 6 7 8
    s += i  # 把i放在s内进行累加
    i += 1

print("和是:", s)
sum_1_100.py

   2. 写一个程序
     输入一个开始的整数,用变量begin绑定
     输入一个结束的整数,用变量end绑定
     打印 从begin到end(不包含end) 的每个整数, 打印在一行内.
     如:
       请输入开始值: 8
       请输入结束值: 100
     打印:
       8 9 10 11 .....    99
     思考:
       如何实现每5个数打印在一行内,打印多行

#方法1
begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))

i = begin
while i < end:
    print(i, end=' ')
    i += 1
else:
    print()

#方法2
begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))
i = begin
while i < end:
    print(i, end=' ')
    if (i - begin + 1) % 5 == 0:
        print()  # print(end='\n')
    i += 1
else:
    print()

#方法3
begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))

count = 0  # 此变量用来记录已经在一行内打印多少个数字

i = begin
while i < end:
    print(i, end=' ')
    count += 1  # 打印个数+1
    if count == 5:
        print()  # 换行后
        count = 0  # 本行的个数为0
    i += 1
else:
    print()
numbers.py

1、while 语句注意事项:

   要控制循环真值表达式的值来防止死循环
   通常用真值表达式内的循环变量来控制循环条件
   通常在循环语句块内改变循环变量来控制循环次数和变量走向

2、while 语句的嵌套

   while 语句本身是语句,和其它语句一样,可以嵌套到任何复合语句中

示意:
   while 真值表达式:
       ...
       while 真值表达式2:
           ...
       else:
           ...
   else:
       ...

示例:
   # 打印 1 ~ 20 的整数,打印在一行内

# 此示例示意while语句的嵌套
# 打印 1 ~ 20 的整数,打印在一行内

j = 1
while j <= 10:
    # print('1 2 3 4 ..... 20')
    i = 1
    while i <= 20:
        print(i, end=' ')
        i += 1
    else:
        print()
    j += 1
while_embed.py

练习:
   输入一个整数代表正方形的宽度,用变量n绑定,
   打印指定宽度的正方形
   如:
     请输入: 5
   打印如下:
     1 2 3 4 5
     1 2 3 4 5
     1 2 3 4 5
     1 2 3 4 5
     1 2 3 4 5
   如:
     请输入: 3
   打印如下:
     1 2 3
     1 2 3
     1 2 3

n = int(input("请输入: "))
line = 1  # 代表当前行
while line <= n:
    # print('打印第%d行' % line)
    i = 1
    while i <= n:
        print(i, end=' ')
        i += 1
    print()  # 一行打印完,换行
    line += 1
square.py

2、break 语句

  作用:
       用于循环语句(while, for语句)中,用来终止当前循环语句的执行
  语法:
       break
  说明:
       1. 当break语句执行后,此循环语句break之后的语句将不再执行
       2. break语句通常和if语句组合使用
       3. break语句终止循环时else子句的语句将不会执行
       4. break语句只能终止当前循环语句的执行,如果有循环嵌套时,不会跳出嵌套的外重循环
  示例:

i = 1
while i <= 6:
    print('循环开始时:', i)
    if i == 3:
        break

    print('循环结束时:', i)
    i += 1

print("i 的值是", i)
print("----------程序退出--------")
break1.py
i = 1
while i <= 6:
    print('循环开始时:', i)
    if i == 3:
        break
    print('循环结束时:', i)
    i += 1
else:
    print('这是while语句的else子句')
    print('else子句会在 i<=6为False时执行')

print("i 的值是", i)
print("----------程序退出--------")
break2.py
i = 1
while i <= 10:
    j = 1
    while j <= 20:
        print(j, end=' ')
        if j == 15:
            break
        j += 1
    print()
    i += 1

print("程序结束")
break_while_embed.py

3、死循环

   死循环是指条件一直成立的循环
   死循环通常用break语句来终止循环
   死循环的else子句永远不会执行

# 此示例来示意死循环的用法

# 循环输入字符串,当输入'quit()' 结束输入
# 将每次输入的内容打印在屏幕上

while True:
    s = input("请输入:>>> ")
    if s == 'quit()':
        break
    print("您刚才输入的是:", s)
else:
    print("我是while语句的 else子句,我永远不会被执行")
print("程序结束")
death_loop.py

练习:
1、任意输入一些正整数,当输入负数时结束输入
    当输入完成后,打印您输入的这些数的和
   如:
     请输入: 1
     请输入: 2
     请输入: 3
     请输入: 4
     请输入: -1
   打印:
     您刚才输入的这些数的和是: 10

s = 0  # 用来累加数据
while True:
    x = int(input('请输入正整数: '))
    if x < 0:
        break
    s += x
    # print("s += x后的s的值是:", s)

print(s)
sum_input_integer.py

2、输入一个整数n,打印宽度为n个字符的正方形
   如:
     请输入: 4
   打印:
     ####
     #    #
     #    #
     ####
   如:
     请输入: 6
   打印:
     ######
     #        #
     #        #
     #        #
     #        #
     ######

n = int(input("请输入长方形宽度: "))

print("#" * n)  # 打印第一行
line = 1
# 打印中间的n-2行
while line <= (n - 2):
    # 此处打印中间的一行
    print('#' + ' ' * (n - 2) + '#')
    line += 1

if n != 1:
    print("#" * n)  # 打印最后一行
sharp_rectangle.py

练习:
   1. 求下列多项式的和
     1 + 1/2 + 1/4 + 1/8 + ..... + 1/2**1000 的和

s = 0  # 用于累加和
i = 0
while i <= 1000:
    s += 1 / 2 ** i
    i += 1

print(s)  # 2
练习1.py

   2. 写程序求:
     1 - 1/3 + 1/5 - 1/7 + 1/9 + .... + 1/(2*n-1)的和
     1) 求当n等于10000时,此公式的和
     2) 将上述结果乘以4后打印出来(看看这个数是什么?)

# 1 = +1/(2*1-1)

s = 0  # 用于累加
n = 1
sign = 1  # 正负号(符号)
while n <= 10000:
    s += sign * 1 / (2 * n - 1)
    n += 1
    sign *= -1  # 变换符号

print("和是:", s)

print('乘4之后的和是:', s * 4)
练习2.py

  3. 用while语句实现打印三角形,输入一个整数,表示三角形的宽度和高度,打印出相应的直角三角形
      如:
      请输入三角形的宽度: 4
      1) 打印如下三角形:
         *
         **
         ***
         ****
      2) 打印如下三角形:
            *
           **
          ***
         ****
      3) 打印如下三角形:
         ****
          ***
           **
            *
      4) 打印如下三角形:
         ****
         ***
         **
         *

w = int(input("请输入三角形的宽度: "))

# 1) 打印如下三角形:
#    *
#    **
#    ***
#    ****
line = 1
while line <= w:
    # 根据行号来打印每行星号
    print('*' * line)
    line += 1


print('------------------------')
# 2) 打印如下三角形:
#       *
#      **
#     ***
#    ****
line = 1
while line <= w:
    # 先算空格的个数
    blanks = w - line
    print(' ' * blanks + '*' * line)
    line += 1

# 3) 打印如下三角形:
#    ****
#     ***
#      **
#       *
print('================================')
stars = w  # 星号个数
while stars > 0:
    # 先算空格个数
    blanks = w - stars
    print(' ' * blanks + '*' * stars)
    stars -= 1

# 4) 打印如下三角形:
#    ****
#    ***
#    **
#    *
print('+++++++++++++++++++++++++++++')
stars = w  # 星号个数
while stars > 0:
    print('*' * stars)
    stars -= 1
练习3.py

 

posted on 2018-10-12 17:12  破天荒的谎言、谈敷衍  阅读(233)  评论(0)    收藏  举报

导航