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)
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)
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)
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)
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)
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()