Task 1 ★
给定一个字符串并判断这个字符串是否是回文字符串。回文是一个向前和向后读取相同的字符串,本题
中只考虑字母和数字字符。如果是,输出 True ;否则输出 False 。
测试用例:
用例1:A man, a plan, a canal: Panama
用例2:race a car
用例3:1111111111111111111121111111111111111111
#回文字符串: 不论是从左往右,还是从右往左,字符的顺序都是一样的(如aba,abcba,abba等)
#本题中的回文字符串只考虑数字和字母(不考虑大小写),不考虑其他字符
def is_curcle(ss): #判断ss是否为回文字符串
k = 0
j = len(ss)-1
while k <= j:
key = ord(ss[k]) - ord(ss[j])
if key == 0 or key == 32 or key == -32:
k = k + 1
j = j - 1
else:
return False
return True
def num_or_char(s0): #判断s0是否为数字或字符
key = ord(s0)
if 48 <= key and key <= 57:
return True
elif 65 <= key and key <= 90:
return True
elif 97 <= key and key <= 122:
return True
else:
return False
s0 = "s0"
while s0 != "":
s0 = input()
if s0 == "":
break
s0_len = len(s0)
s1 = ""
#将s0转化为只含数字和字母的字符串并保存在s1中
for i in range(s0_len):
if num_or_char(s0[i]):
s1 = s1 + s0[i]
#print(s1)
if is_curcle(s1):
print("True")
else:
print("False")
#A man, a plan, a canal: Panama - True
#race a car - False
#1111111111111111111121111111111111111111 - False
#t1_simple
#回文字符串: 不论是从左往右,还是从右往左,字符的顺序都是一样的(如aba,abcba,abba等)
#本题中的回文字符串只考虑数字和字母(不考虑大小写???),不考虑其他字符
def is_curcle(ss): #判断ss是否为回文字符串
return ss == ss[::-1]
def num_or_char(s0): #判断s0是否为数字或字符
key = ord(s0)
if 48 <= key and key <= 57\
or 65 <= key and key <= 90\
or 97 <= key and key <= 122:
return True
else:
return False
s0 = "s0"
while s0 != "": #当输入字符串为空时停止
s0 = input()
if s0 == "":
break
s0_len = len(s0)
s1 = ""
#将s0转化为只含数字和字母的字符串并保存在s1中
for i in range(s0_len):
if num_or_char(s0[i]):
s1 = s1 + s0[i]
#print(s1)
if is_curcle(s1):
print("True")
else:
print("False")
#A man, a plan, a canal: Panama - False
#race a car - False
#1111111111111111111121111111111111111111 - False
Task 2 ★
制作一个两人石头剪刀布游戏。 (提示:使用 input 输入两个玩家的选择,比较它们,打印出祝贺获胜
者的消息,并询问玩家是否想开始新游戏,输入 y 则重新开始游戏,输入 n 退出游戏,石头:Rock,剪
刀:Scissors,布:Paper)
示例输入:
Player1 input: Rock
Player2 input: Paper
示例输出:
Congratulate Player2!
Try new game?
'''
石头:Rock,剪刀:Scissors,布:Paper)
Player1 input: Rock
Player2 input: Paper
Congratulate Player2!
Try new game?
'''
keep = True
while keep:
print("Player1 input:")
p1 = input()
print("Player2 input:")
p2 = input()
if (p1 == "Rock" and p2 == "Scissors")\
or (p1 == "Scissors" and p2 == "Paper") \
or (p1 == "Paper" and p2 == "Rock"):
print("Congratulate Player1!")
elif p1 == p2:
print("No Winner!") #两人平局
else:
print("Congratulate Player2!")
print("Try new game?")
new_game = input()
if new_game == "y":
keep = True
elif new_game == "n":
keep = False
Task 3 ★★★
实现一个可以打印出帕斯卡三角形前 n 行的函数。(帕斯卡三角形,又称杨辉三角,每个数等于它上方两数之和)
示例输入:
6
示例输出:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
#帕斯卡三角形: data_n[i] = data_n-1[i-1]+data_n-1[i] , i-1或i越过[0,n-2]的界时取0
num = int(input("Enter the number: "))
list1 = [] #an empty list
for i in range(num):
list1.append([])
list1[i].append(1)
for j in range(1, i):
list1[i].append(list1[i - 1][j - 1] + list1[i - 1][j])
if num != 0:
list1[i].append(1)
for i in range(num):
print("[1", end="")
for j in range(1, i+1):
print(", ", list1[i][j], end="", sep="")
print("]")
# better
# 帕斯卡三角形: data_n[i] = data_n-1[i-1]+data_n-1[i] , i-1或i越过[0,n-2]的界时取0
num = int(input("Enter the number: "))
list1 = [] # 空列表
for i in range(num):
list1.append([]) # 使用线性表,第i行有i个数
list1[i].append(1) # 每行第一个数为1
for j in range(1, i):
# 给每行中间非1的数赋值,i的范围为2~num-1,从第3行到最后一行,避免越界
list1[i].append(list1[i - 1][j - 1] + list1[i - 1][j])
if i != 0: # 第一行只有1个数
list1[i].append(1) # 每行最后一个为1
for i in range(num): # 输出每行
print(list1[i])
Task 4 ★★
实现一个关于列表的类 MyList,该类包括以下方法:
- 添加元素:push(args),参数元素类型为字符串或整型,将 args 添加到列表末尾;
- 获取元素:get(num),参数为整型,从列表中随机获取 num 个元素并打印;
- 获取列表长度:len(),打印列表长度;
- 删除元素:del(),删除列表第一个元素并打印;
- 清空列表:clear(),清空列表元素。
在代码中实例化类并测试每个方法,并打印每次操作后的列表。
示例:
temp_list = MyList([123, 'abc'])
temp_list.add(456)
print(temp_list.memory) # 这里假设类 MyList 有一个属性 memory 来记录列表
temp_list.get(3)
...
import copy # 用于深拷贝
class MyList:
mylist = []
def __init__(self):
self.mylist = []
def __init__(self, list00):
self.mylist = copy.deepcopy(list00)
def push(self, args):
self.mylist.append(args)
def get(self, num):
print(self.mylist[num])
def len0(self):
print(len(self.mylist))
def del0(self):
print(self.mylist.pop(0))
def clear(self):
while len(self.mylist) > 0:
self.mylist.pop()
def print0(self): # 用于输出列表
print(self.mylist)
list0 = ['sb', '2sb', '3sb'] # 以下为实例化测试
list1 = MyList(list0) # 构造函数
list1.print0() # 这里输出应为 ['sb', '2sb', '3sb']
list1.len0() # len()函数,此处输出应为3
list1.push('4sb') # push(args)函数
list1.len0() # len()函数,应输出4
list1.print0() # 这里输出应为 ['sb', '2sb', '3sb', '4sb']
list1.get(2) # get(num)函数 ,应输出第2个元素(从0开始)为 3sb
list1.del0() # del()函数 ,删除首个元素并输出,应输出 sb
list1.print0() # 应输出 ['2sb', '3sb', '4sb']
list1.clear() # clear()函数
list1.print0() # 应输出[]
list1.len0() # 应输出0