In [1]:
#练习一:实现reverse(s)函数,功能与s.reverse()相同。

import copy

def reverse(List):
    numbers = copy.deepcopy(List)
    for i in range(len(List)):
        numbers[len(List)-1-i] = List[i]
    return numbers
    
numbers = [1,2,3,4,5]
#numbers.reverse()
print(reverse(numbers))
numbers.reverse()
print(numbers)


[5, 4, 3, 2, 1]
[5, 4, 3, 2, 1]

In [2]:
#练习二:写函数,根据给定符号(此处输入的符号受限,要是全角的才行)和行数,打印相应直角三角形,等腰三角形及其他形式的三角形。

def triangles(mark,line_number):
    print ('等腰直角三角形:')
    for i in range(1,line_number+1):
        print(mark*i)
    print()
    print ('一般的直角三角形:')
    for i in range(1,line_number+1):
        print(mark*(2*i-1))
    print()
    print ('等腰三角形:')
    for i in range(1,line_number+1):
        print(' '*(line_number-i) + mark*i)
    print()
    print ('任意三角形:')
    for i in range(1,line_number+1):
        print(' '*(line_number-i) + mark*(2*i-1))
        
    
mark = input('请输入一个你想用来组成三角形的符号:')
line_number = int(input('请输入你想构造的三角形的行数:'))
triangles(mark,line_number)


请输入一个你想用来组成三角形的符号:¥
请输入你想构造的三角形的行数:5
等腰直角三角形:
¥
¥¥
¥¥¥
¥¥¥¥
¥¥¥¥¥

一般的直角三角形:
¥
¥¥¥
¥¥¥¥¥
¥¥¥¥¥¥¥
¥¥¥¥¥¥¥¥¥

等腰三角形:
    ¥
   ¥¥
  ¥¥¥
 ¥¥¥¥
¥¥¥¥¥

任意三角形:
    ¥
   ¥¥¥
  ¥¥¥¥¥
 ¥¥¥¥¥¥¥
¥¥¥¥¥¥¥¥¥

In [3]:
#练习三:将任务4中的英语动词变复数的函数,完整实现。

def sgv_to_plv (sgword):
    if sgword.endswith('ies'):
        plword=sgword[:-3]+'y'
        print ('该动词的复数形式为:',plword)
    elif sgword.endswith('es'):
        plword = sgword[:-2]
        print ('该动词的复数形式为:',plword)
    elif sgword.endswith('s'):
        plword = sgword[:-1]
        print ('该动词的复数形式为:',plword)
    
sgword=input('请输入一个英文动词的第三人称单数形式:')
sgv_to_plv(sgword)


请输入一个英文动词的第三人称单数形式:does
该动词的复数形式为: do

In [5]:
#练习四:写函数,根据给定符号,上底、下底、高,打印各种梯形。

def trapezoidals(mark,top,bottom,height):
    print('直角梯形:')  
    if bottom-top < top:    
        shang,yushu = divmod(height,(bottom-top+1))
     #print('直角梯形:')
        i = 1
        times = 0
        while i < height+1:  #控制循环行数
            if i <= (shang+1)*yushu:   #看当前行数是否在重复次数多的范围内
                count = shang +1 #每组内符号相同时应当重复的次数
                #times = 0
                for j in range(1,count+1):   #重复打印
                    print(mark*(top+times))   #这里有问题:如何控制使输出符号个数变化???
                #times += 1
            else:
                count = shang
                for j in range(1,count+1):   #重复打印
                    print(mark*(top+times))   #这里有问题:如何控制使输出符号个数变化???
                #times += 1
                
            times += 1
            i = i+count
    else:   #问题在于:当高过大时,输出混乱
        #j = 1
        if height < bottom-top:
            j = 1
            for i in range(1,height+1):
                if i == 1 :
                    print(mark*(top))
                elif i == height:
                    print(mark*(bottom))
                else:
                    ternal = ((bottom-top)//(height-2+1))
                    print(mark*(top+ternal*j))
                    j += 1
        else:
            shang,yushu = divmod(height,(bottom-top+1))
            i = 1
            times = 0
            while i < height+1:  #控制循环行数
                if i <= (shang+1)*yushu:   #看当前行数是否在重复次数多的范围内
                    count = shang +1 #每组内符号相同时应当重复的次数
                
                    for j in range(1,count+1):   #重复打印
                        print(mark*(top+times))   #这里有问题:如何控制使输出符号个数变化???
                
                else:
                    count = shang
                    for j in range(1,count+1):   #重复打印
                        print(mark*(top+times))   #这里有问题:如何控制使输出符号个数变化???
                
                
                times += 1
                i = i+count
  
       
   
   
mark = input('请输入一个你想用来组成梯形的符号:')
top = int(input('请输入你想要的梯形上底:'))
bottom = int(input('请输入你想要的梯形下底:'))
height = int(input('请输入你想构造的梯形的行数:'))
trapezoidals(mark,top,bottom,height)


请输入一个你想用来组成三角形的符号:¥
请输入你想要的梯形上底:3
请输入你想要的梯形下底:7
请输入你想构造的三角形的行数:5
直角梯形:
¥¥¥
¥¥¥¥
¥¥¥¥¥
¥¥¥¥¥¥
¥¥¥¥¥¥¥

In [6]:
#练习五:写函数,根据给定符号,打印各种菱形。

def diamonds(mark,edge):
    print('任意菱形:')
    for i in range(1,2*edge+1):
        if i < edge+1:
            print(' '*(edge-i) + mark*i)
        else:
            print(' '*(i-edge) + mark*(2*edge-i))
    print() 
    
    
mark = input('请输入一个你想用来组成菱形的符号:')
edge = int(input('请输入你想要的菱形的边长:'))
diamonds(mark,edge)


请输入一个你想用来组成菱形的符号:¥
请输入你想要的菱形的边长:7
任意菱形:
      ¥
     ¥¥
    ¥¥¥
   ¥¥¥¥
  ¥¥¥¥¥
 ¥¥¥¥¥¥
¥¥¥¥¥¥¥
 ¥¥¥¥¥¥
  ¥¥¥¥¥
   ¥¥¥¥
    ¥¥¥
     ¥¥
      ¥
       


In [7]:
#练习六:与本小节任务基本相同,但要求打印回文字符倒三角形


def plalindrome(line):
    for i in range(1,len(line)*2+1):
        if i == len(line)*2:
            print(' '*(i) + line[0])
        elif i%2 == 0:
            print(' '*(i) + line[:(2*len(line)-i+1)//2] + line[(2*len(line)-i+1)//2] + line[(2*len(line)-i+1)//2-1::-1])
        else:
            print(' '*(i) + line[:(2*len(line)-i+1)//2] + line[(2*len(line)-i+1)//2-1::-1])
            
def main():
    text = '赏花归去马如飞'
    plalindrome(text)
    
if __name__ == '__main__':
    main()


 赏花归去马如飞飞如马去归花赏
  赏花归去马如飞如马去归花赏
   赏花归去马如如马去归花赏
    赏花归去马如马去归花赏
     赏花归去马马去归花赏
      赏花归去马去归花赏
       赏花归去去归花赏
        赏花归去归花赏
         赏花归归花赏
          赏花归花赏
           赏花花赏
            赏花赏
             赏赏
              赏