七、 循环语句
1.创建一个依次包含字符串'P'、'y'、't'、'h'、'o'和'n'的列表my_list,
使用print()语句一行打印字符串'Here is the original list:',再直接使用print()语句把刚刚创建的列表my_list整个打印出来,
输出一个换行,再使用print()语句一行打印字符串'The number that my_list has is:',
再使用len()函数获取列表my_list里面有多少个字符串,并使用print()函数一行打印该整数。
my_list = ['P','y','t','h','o','n'] print('Here is the original list:') print(my_list) print() print('The number that my_list has is:') print(len(my_list))
2.牛牛、牛妹和牛可乐都是Nowcoder的忠实用户,又到了一年一度的程序员节(10月24号),毫无疑问,他们都登录Nowcoder了,因为他们还没有刷完牛客题霸...
Nowcoder的管理员想对他们发送一些简单登录问候消息,并对他们表达了节日祝福。
请创建一个依次包含字符串 'Niuniu' 、'Niumei' 和 'Niu Ke Le' 的列表users_list,
请使用for循环遍历列表user_list,依次对列表users_list中的名字输出一行类似 'Hi, Niuniu! Welcome to Nowcoder!' 的字符串,
for循环结束后,最后输出一行字符串 "Happy Programmers' Day to everyone!"
users_list = [ 'Niuniu' ,'Niumei' , 'Niu Ke Le'] for name in users_list: print('Hi, {}! Welcome to Nowcoder!'.format(name)) print('Happy Programmers\' Day to everyone!')
3.牛牛刚学循环语句,你能教他使用for语句创建一个从10到50的数字列表吗?请输出完整列表,并输出列表的首尾元素检验是否是从10到50。
nums = [num for num in range(10,51)] print(nums) print(nums[0],nums[-1])
4.牛牛有一个列表,记录了他和同事们的年龄,你能用for循环遍历链表的每一个元素,将其累加求得他们年龄的总和与平均数吗?
num = input().split() age = [int(i) for i in num] print(sum(age),'%.1f'%(sum(age)/len(age)))
5.通过给函数 range()指定第三个参数来创建一个列表my_list,其中包含 [0, 19] 中的所有偶数;再使用一个 for 循环将这些数字都打印出来(每个数字独占一行)。
my_list = [num for num in range(0,19,2)] for x in my_list: print(x)
6.创建一个列表my_list,其中包括 [1, 50] 内全部能被5整除的数字;再使用一个 for 循环将这个列表中的数字都打印出来(每个数字独占一行)。
my_list = [num for num in range(1,51) if num%5==0] for x in my_list: print(x)
7.在Python中, * 代表乘法运算, ** 代表次方运算。请创建一个空列表my_list,使用for循环、range()函数和append()函数令列表my_list包含底数2的 [1, 10] 次方,再使用一个 for 循环将这些次方数都打印出来(每个数字独占一行)。
my_list = [] for num in range(1,11): my_list.append(2**num) for i in my_list: print(i)
8.Python支持的解析操作,可以根据某些元素创建列表。请你使用列表解析创建一个0-9的列表,并输出该列表。
num= [i for i in range(10)] print(num)
9.牛妹有一个暑期想吃的东西的清单,你可以把它视作一个Python的list,['apple', 'ice cream', 'watermelon', 'chips', 'hotdogs', 'hotpot']。牛妹决定从清单最后一种食物开始往前吃,每次吃掉一种食物就把它从list中pop掉,请使用while循环依次打印牛妹每次吃掉一种食物后剩余的清单。
name = ['apple', 'ice cream', 'watermelon', 'chips', 'hotdogs', 'hotpot'] while name: name.pop() print(name)
10.创建一个依次包含字符串'Niuniu'、'Niumei'、'HR'、'Niu Ke Le'、'GURR' 和 'LOLO' 的列表users_list,使用for循环遍历users_list,如果遍历到的用户名是 'HR' ,则使用print()语句一行打印字符串 'Hi, HR! Would you like to hire someone?',否则使用print()语句一行打印类似字符串 'Hi, Niuniu! Welcome to Nowcoder!' 的语句。
users_list = ['Niuniu', 'Niumei', 'HR', 'Niu Ke Le', 'GURR', 'LOLO'] for name in users_list: if name == 'HR': print( 'Hi, {}! Would you like to hire someone?'.format(name)) else: print('Hi, {}! Welcome to Nowcoder!'.format(name))
11.牛牛在牛客网举行抽奖游戏,他准备了一个列表的元素[3, 45, 9, 8, 12, 89, 103, 42, 54, 79],打算依次输出这些元素。他让牛妹随便猜一个数字x,在输出的时候如果输出的元素等于牛妹猜的x,就不再继续输出。请你使用Python的for循环模拟这个输出过程,并根据输入的x使用break语句提前结束循环。
name = [3, 45, 9, 8, 12, 89, 103, 42, 54, 79] x = int(input()) for i in name: if x == i: break else: print(i)
12.牛客网在玩数数字游戏,员工一致认为13是一个“不详的数字”,请你使用for循环帮他们从1数到15,并使用continue语句跳过13。
for i in range(1,16): if i == 13: continue else: print(i,end=' ')
13.牛牛正在做矩阵运算,就是将矩阵中每个位置的元素都乘上n。现有一个矩阵[[1, 2, 3], [4, 5, 6], [7, 8, 9]],请使用list记录该矩阵,对于牛牛输入的数字n,输出该矩阵乘以n的结果。
nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] num = int(input()) for x in nums: for y in range(3): x[y] = x[y] * num print(nums)
八、元组类型
1.牛客运动会上有一项双人项目,因为报名成功以后双人成员不允许被修改,因此请使用元组(tuple)进行记录。先输入两个人的名字,请输出他们报名成功以后的元组。
name1 = input() name2 = input() name = name1, name2 print(name)
2.牛牛和牛妹报名了牛客运动会的双人项目,但是由于比赛前一天牛妹身体不适,不能参加第二天的运动,于是想让牛可乐代替自己。请创建一个依次包含字符串'Niuniu'和'Niumei'的元组entry_form,并直接输出整个元组。然后尝试使用try- except代码块执行语句:entry-form[1] = 'Niukele',若是引发TypeError错误,请输出'The entry form cannot be modified!'。
entry_form = ('Niuniu', 'Niumei') print( entry_form) try: entry_form[1] = 'Niukele' except: print('The entry form cannot be modified!')
3.学校录入考试排名信息以后,为了防止修改,都会记录为Python元组。请你根据输入的字符串,使用tuple函数将它们作为考生姓名记录到元组中,并使用切片法输出前三名同学的名字。
name = tuple(input().split()) print(name[:3])
4.牛客网有一份秘密名单,['Tom', 'Tony', 'Allen', 'Cydin', 'Lucy', 'Anna'],请将它们创建为不可被修改的Python元组后,输出整个元组。对于牛牛输入的名字name,请使用成员运算检验它是否出现在这份秘密名单中,若是在名单中则输出'Congratulations!',否则输出'What a pity!'.
name = tuple(['Tom', 'Tony', 'Allen', 'Cydin', 'Lucy', 'Anna']) print(name) x = input() if x in name: print('Congratulations!') else: print('What a pity!')
5.牛牛有一个元组,其中记录数字1-5,请创建该元组,并使用len函数获取该元组的长度。
牛牛觉得这个元组太短了,想要在该元组后再连接一个6-10的元祖,请输出连接后的元组及长度。
num1 = [i for i in range(1, 6)] print(tuple(num1)) print(len(tuple(num1))) num2 = [i for i in range(6, 11)] num = num1 + num2 print(tuple(num)) print(len(tuple(num)))
九、 字典类型
1.创建一个依次包含键-值对'<': 'less than'和'==': 'equal'的字典operators_dict,先使用print()语句一行打印字符串'Here is the original dict:',再使用for循环遍历 已使用sorted()函数按升序进行临时排序的包含字典operators_dict的所有键的列表,使用print()语句一行输出类似字符串'Operator < means less than.'的语句;对字典operators_dict增加键-值对'>': 'greater than'后,输出一个换行,再使用print()语句一行打印字符串'The dict was changed to:',再次使用for循环遍历 已使用sorted()函数按升序进行临时排序的包含字典operators_dict的所有键的列表,使用print()语句一行输出类似字符串'Operator < means less than.'的语句,确认字典operators_dict确实新增了一对键-值对。
operators_dict={'<':'less than','==':'equal'} print('Here is the original dict:') for x,y in sorted(operators_dict.items()): print('Operator {} means {}.'.format(x,y)) print() operators_dict['>']='greater than' print('The dict was changed to:') for a,b in sorted(operators_dict.items()): print('Operator {} means {}.'.format(a,b))
2.又到了毕业季,牛牛作为牛客大学的学生会主席,决定对本校的应届毕业生进行就业调查。
他创建了一个依次包含字符串'Niumei'、'Niu Ke Le'、'GURR'和'LOLO'的列表survey_list,作为调查名单;又创建了一个依次包含键-值对'Niumei': 'Nowcoder'和'GURR': 'HUAWEI'的字典result_dict,作为已记录的调查结果。
请遍历列表survey_list,如果遍历到的名字已出现在 包含字典result_dict的全部键的列表 里,
则使用print()语句一行输出类似字符串'Hi, Niumei! Thank you for participating in our graduation survey!'的语句以表达感谢,
否则使用print()语句一行输出类似字符串'Hi, Niu Ke Le! Could you take part in our graduation survey?'的语句以发出调查邀请。
survey_list = ['Niumei','Niu Ke Le','GURR','LOLO'] result_dict = {'Niumei':'Nowcoder','GURR':'HUAWEI'} for name in survey_list: if name in result_dict: print('Hi, {}! Thank you for participating in our graduation survey!'.format(name)) else: print('Hi, {}! Could you take part in our graduation survey?'.format(name))
3.创建一个依次包含键-值对{'name': 'Niuniu'和'Student ID': 1}的字典my_dict_1,
创建一个依次包含键-值对{'name': 'Niumei'和'Student ID': 2}的字典my_dict_2,
创建一个依次包含键-值对{'name': 'Niu Ke Le'和'Student ID': 3}的字典my_dict_3,
创建一个空列表dict_list,使用append()方法依次将字典my_dict_1、my_dict_2和my_dict_3添加到dict_list里,使用for循环遍历dict_list,对于遍历到的字典,使用print()语句一行输出类似字符串"Niuniu's student id is 1."的语句以打印对应字典中的内容。
my_dict_1 = {'name': 'Niuniu', 'Student ID': 1} my_dict_2 = {'name': 'Niumei', 'Student ID': 2} my_dict_3 = {'name': 'Niu Ke Le', 'Student ID': 3} dict_list = [] dict_list.append(my_dict_1) dict_list.append(my_dict_2) dict_list.append(my_dict_3) for i in dict_list: print('{}\'s student id is {}.'.format(i['name'], i['Student ID']))
4.创建一个依次包含键-值对'Beijing': {Capital: 'China'}、'Moscow': {Capital: 'Russia'}和'Paris': {Capital: 'France'}的字典cities_dict,请使用for循环遍历"已使用sorted()函数按升序进行临时排序的包含字典cities_dict的所有键的列表",对于每一个遍历到的城市名,使用print()语句一行输出类似字符串'Beijing is the capital of China!'的语句。
cities_dict = {'Beijing':{'Capital':"China"},'Moscow':{'Capital':'Russia'},'Paris':{'Capital':'France'}} for x in sorted(cities_dict): for y in cities_dict[x]: print("{} is the capital of {}!".format(x, cities_dict[x][y]))
5.驼瑞驰调查了班上部分同学喜欢哪些颜色,并创建了一个依次包含键-值对'Allen': ['red', 'blue', 'yellow']、'Tom': ['green', 'white', 'blue']和'Andy': ['black', 'pink']的字典result_dict,作为已记录的调查结果。现在驼瑞驰想查看字典result_dict的内容,你能帮帮他吗?使用for循环遍历"使用sorted()函数按升序进行临时排序的包含字典result_dict的所有键的列表",对于每一个遍历到的名字,先使用print()语句一行输出类似字符串"Allen's favorite colors are:"的语句,然后再使用for循环遍历该名字在字典result_dict中对应的列表,依次输出该列表中的颜色。
result_dict={'Allen':['red','blue','yellow'],'Tom':['green','white','blue'],'Andy':['black','pink']} for x,y in sorted(result_dict.items()): print(x +'\'s favorite colors are:') for i in y: print(i)
6.牛牛有两份列表,一份记录了牛客网用户的名字,另一份记录他们使用的语言。假设两份列表一一对应,请使用zip函数将两份列表封装字典,以名字为key,语言为value,然后直接输出字典。
name = input().split() language = input().split() name_language = {name:language for name,language in zip(name,language)} print(name_language)
7.正在学习英语的牛妹笔记本上准备了这样一个字典:{'a': ['apple', 'abandon', 'ant'], 'b': ['banana', 'bee', 'become'], 'c': ['cat', 'come'], 'd': 'down'}。请你创建这样一个字典,对于牛妹输入的字母,查询有哪些单词?
x = {'a': ['apple', 'abandon', 'ant'], 'b': ['banana', 'bee', 'become'], 'c': ['cat', 'come'], 'd': 'down'} y = input() print(' '.join(x[y]))
8.正在学习英语的牛妹创建了一个字典:{'a': ['apple', 'abandon', 'ant'], 'b': ['banana', 'bee', 'become'], 'c': ['cat', 'come'], 'd': 'down'}。现牛妹新学了一个字母letter,以及一个新单词word,请把它们增加到字典中,再输出更新后的字典。
x = {'a': ['apple', 'abandon', 'ant'], 'b': ['banana', 'bee', 'become'], 'c': ['cat', 'come'], 'd': 'down'} letter = input() word = input() x[letter] = word print(x)
9.Python的字典可以用来计数,让要被计数的元素作为key值,它出现的频次作为value值,只要在遇到key值后更新它对应的value即可。现输入一个单词,使用字典统计单词中各个字母出现频次。
x = {} y = input() for i in y: x[i] = y.count(i) print(x)
十、 内置函数
1.牛牛给了牛妹一个一串无规则的数字,牛妹将其转换成列表后,使用max和min函数快速的找到了这些数字的最值,你能用Python代码实现一下吗?
x = [int(i) for i in input().split()] print(max(x)) print(min(x))
2.牛牛想知道自己小组内的同事们的年龄和都有多少,他输入一串年龄序列,请将其转换成列表,并使用sum函数直接获取列表的和。
x = [int(i) for i in input().split()] print(sum(x))
3.牛牛想要这样一个程序,只要是输入一个整数,不管正负,它一定转换为正数,即获取该数字的绝对值,你能用abs函数实现吗?
print(abs(int(input())))
4.牛牛刚学习了ASCII码,他知道计算机中的字母很多用的都是这个编码方式,现在输入一个字母,你能使用ord函数将其转换为ASCII码对应的数字吗?
print(ord(input()))
5.牛妹刚学习进制转换,对这方面掌控还不太熟练,她想请你帮她写一个十进制到十六进制的进制转换器,你能使用hex函数帮助她完成这个任务吗?
print(hex(int(input())))
6.计算机内部都由二进制组成,但是早就习惯使用十进制的牛牛根本不知道这个数字的二进制是什么,你能使用bin函数帮助他将十进制数字转换成二进制吗?
print(bin(int(input())))
7.在Python中,除了使用两个乘号相连外,还能使用pow函数表示幂运算。现牛牛输入正整数x与y,请你使用两种方法分别计算xy与yx。
x = [int(i) for i in input().split()] print(x[0]**x[1]) print(pow(x[1],x[0]))
8.在牛客网内部使用1标记正确回答的题,使用0表示回答错误的题。牛牛拿到自己的作答记录是一串01序列,他想知道自己一共答错了多少次,你能将这串序列转换为列表,使用count函数帮助牛牛统计一下吗?
x = input().split() print(x.count('0'))
9.牛客网有一个打卡系统,记录了每个人这一个星期上班打卡的记录(以名字的形式)。牛牛想知道自己在这一个星期是第几个打卡的人,你用将这份名字记录转换为列表,然后使用index函数找到'NiuNiu'的位置吗?
x = input().split() print(x.index('NiuNiu'))
10.Python有内置函数isalpha、isdigit、isspace可以分别判断字符串是否只包含字母、数字、空格,现在输入一个字符串,请分别输出这三个函数的判断结果。
x = input() print(x.isalpha(),x.isdigit(),x.isspace(),sep='\n')
11.牛客网公布中奖信息了,中奖信息是一个很长的字符串,牛牛想知道自己的名字('NiuNiu')有没有出现在其中,你能帮助他使用字符串的find函数查找一下吗?
long_str = input('') if 'NiuNiu' in long_str: print(long_str.find('NiuNiu')) else: print(-1)
12.牛客网喜欢'Niu'这个词,各个地方的称号、标语都会出现。现在给你一定长字符串patten,你能使用count函数找到'Niu'在其中出现的次数吗?
patten = input() print(patten.count('Niu'))
13.英文句子都是由单词之间通过空格间隔而组成,牛牛想知道一句英语句子里面包含有哪些单词,你能使用split函数将它们全部按照空格分割,记录进列表中吗,请输出列表。
print(input().split())
14.牛牛在和牛妹做一个游戏,牛牛给定了牛妹一些单词字符串,他想让牛妹把这些单词拼接成以空格间隔开的句子,很可惜牛妹Python没有学好,你能使用join函数帮帮她吗?
x = [] while True: y = input('') if y == '0': break x.append(y) print(' '.join(x))
15.牛客网在录入用户名字信息发生了错误,所有的字符子串'ab'都被录成'a*',运营同学急坏了。你能使用Python字符串的replace函数,将名字信息中的'a*'全部修改回'ab'吗?
x = input() print(x.replace('a*','ab'))
16.牛客网的财务同学很苦恼,各个部门提交的资料中关于金额的小数保留简直是乱七八糟,你能使用round函数,帮助财务同学将输入数字的小数位修正为四舍五入保留至最多两位小数吗?(请不要使用字符串格式化输出保留小数位)
x = float(input()) print(round(x,2))
17.牛牛听说Python中有一个很神奇的函数eval(),只要输入的字符串是一个公式,它能够直接计算这个公式的值。现牛牛以字符串地形式输入一个公式,请你使用eval()计算结果。
x = eval(input()) print(x)
18. 某公司内部报名年会活动,因为是匿名报名,有的同事可能偷偷“帮助”别人报名了,导致一个名字出现多次。后台营运同学希望你能用set函数将这些名字记录为一个集合,以到达去重的目的,请输出这些名字创建的集合,输出的时候使用sorted函数对集合排序。
print(sorted(list(set(input().split()))))
十一、面向对象
1.请定义一个函数cal(),该函数返回两个参数相减的差。输入第一个数字记录在变量x中,输入第二个数字记录在变量y中,将其转换成数字后调用函数计算cal(x, y),再交换位置计算cal(y, x)。
x = int(input()) y = int(input()) def cal(a,b): print(a - b) cal(x,y) cal(y,x)
2.兔子的数量以这样的方式增长:每个月的兔子数量等于它前一个月的兔子数量加它前两个月的兔子数量,即f(n)=f(n-1)+f(n-2)。假设第1个月的兔子有2只,第2个月的兔子有3只,你能使用递归的方法求得第n个月的兔子有多少只吗?
def x(y): if y == 1: return 2 elif y == 2: return 3 else: return x(y - 1) + x(y - 2) print(x(int(input())))
3.球的体积公式为V=4πr²,请写一个函数,输入球的半径,返回球的表面积。球的半径如下:[1, 2, 4, 9, 10, 13],请输出这些半径下的表面积,π取math库的math.pi。
import math def x(y): return 4*math.pi*(y**2) for i in [1, 2, 4, 9, 10, 13]: print('%.2f'%x(i))
4.牛牛的Python老师为了更好地管理班级,利用一个类Student来管理学生,这个类包含了学生姓名(str)、学号(str)、分数(int)、每次作业等级(list[str])等信息。请你帮助牛牛的老师实现这样一个类,并定义构造方法实现初始化,定义打印函数实现打印学生的姓名、学号、分数、提交作业的次数、每次作业的等级。
class Student: def __init__(self, a, b, c, d): self.name = a self.number = b self.grade = c self.homework = d print("{}'s student number is {}, and his grade is {}. He submitted {} assignments, each with a grade of {}".format( self.name, self.number, self.grade, len(self.homework.split(' ')), self.homework)) name = input() number = input() grade = input() homework = input() student = Student(name, number, grade, homework)
5.请为牛客网的员工创建一个Employee类,包括属性有姓名(name)、(salary),并设置初始化。同时该类包括一个方法printclass,用于输出类似'NiuNiu‘s salary is 4000, and his age is 22'的语句。请根据输入的name与salary为该类创建实例e,并调用printclass方法输出信息,如果没有年龄信息则输出错误信息"Error! No age"。根据输入的年龄为实例e直接添加属性age等于输入值,再次调用printclass方法输出信息。(printclass方法中建议使用try...except...结构)
class Employee: def __init__(self, name, salary): self.name = name self.salary = salary def printclass(self): try: print("{}'salary is {}, and his age is {}".format(self.name,self.salary,self.age)) except: print("Error! No age") employee = Employee(input(), input()) employee.printclass() employee.age = input() employee.printclass()
6.请为牛客网的员工创建一个Employee类,包括属性有姓名(name)、(salary),并设置初始化。同时该类包括一个方法printclass,用于输出类似'NiuNiu‘s salary is 4000, and his age is 22'的语句。请根据输入的信息为Employee类创建一个实例e,调用hasattr方法检验实例有没有属性age,如果存在属性age直接调用printclass输出,否则使用setattr函数为其添加属性age,并设置值为输入后,再调用printclass输出。
class Employee(object): def __init__(self, name, salary): self.name = name self.salary = salary def printcalss(self): try: return ("{}'salary is {}, and his age is {}".format(self.name,self.salary,self.age)) except: return ('Error! No age') name, salary, age = input(), int(input()), int(input()) employee = Employee(name, salary) print(hasattr(employee, 'age')) employee.age = age print(employee.printcalss())
7.请创建一个Coordinate类表示坐标系,属性有x和y表示横纵坐标,并为其创建初始化方法__init__。请重载方法__str__为输出坐标'(x, y)'。请重载方法__add__,更改Coordinate类的相加运算为横坐标与横坐标相加,纵坐标与纵坐标相加,返回结果也是Coordinate类。现在输入两组横纵坐标x和y,请将其初始化为两个Coordinate类的实例c1和c2,并将坐标相加后输出结果。
class Coordinate: def __init__(self,x,y): self.x = x self.y = y def __str__(self): return f'({self.x}, {self.y})' def __add__(self,other): return Coordinate(self.x + other.x, self.y + other.y) x1,y1 = list(map(int,input().split())) x2,y2 = list(map(int,input().split())) c1 = Coordinate(x1,y1) c2 = Coordinate(x2,y2) print(c1+c2)
十二、正则表达
1.牛牛最近正在研究网址,他发现好像很多网址的开头都是'https://www',他想知道任意一个网址都是这样开头吗。于是牛牛向你输入一个网址(字符串形式),你能使用正则函数re.match在起始位置帮他匹配一下有多少位是相同的吗?(区分大小写)
import re url = input() print(re.match('https://www',url).span()
2.牛牛翻看以前记录朋友信息的电话薄,电话号码几位数字之间使用-间隔,后面还接了一下不太清楚什么意思的英文字母,你能使用正则匹配re.sub将除了数字以外的其他字符去掉,提取一个全数字电话号码吗?
import re num = input() nums = re.sub(r'\D','', num) print(nums)
3.牛牛记录电话号码时,习惯间隔几位就加一个-间隔,方便记忆,同时他还会在电话后面接多条#引导的注释信息。拨打电话时,-可以被手机正常识别,#引导的注释信息就必须要去掉了,你能使用正则匹配re.match将前面的数字及-信息提取出来吗,去掉后面的注释信息。
方法一 import re num = input() nums = re.match('[0-9|-]*', num) print(nums.group())
方法二 nums = input().split('#') print(nums[0])