目录

  • 一、数据类型、运算符与内置函数
  • 二、列表、元组、字典、集合与字符串
  • 三、选择结构、循环结构、函数定义与使用
  • 四、文件操作
  • 参考
  • 一、数据类型、运算符与内置函数

    1、编写程序,输入一个正整数,然后输出各位数字之和。例如,输入1234,输出10。

    # input()函数返回字符串
    num = input('请输入一个正整数:')
    # 把字符串中的每个字符转换为数字,然后对各位数字求和
    print(sum(map(int,num)))
    

    2、 编写程序,输入一个字符串,输出翻转(首尾交换)后的字符串,要求使用内置函数实现。例如,输入字符串12345,输出54321。

    from operator import add
    from functools import reduce
    # 注意,input()本身就返回字符串,在输入时不需要在内容两侧加引号
    text = input('请输入一个字符串:')
    print(reduce(add,reversed(text)))
    

    3、 编写程序,输入一个包含若干整数的列表,输出列表中的最大值。例如,输入[1,2,3,4,5,888],输出888。

    # 使用内置函数eval()把包含列表的字符串转换为列表
    lst = eval(input('请输入一个包含若干整数的列表:'))
    print(max(lst))
    

    4、编写程序,输入一个包含若干整数的列表,把列表中所有整数转换为字符串,然后输出包含这些字符串的列表。例如,输入[1,2,3,4,5,888],输出[‘1’,‘2’,‘3’,‘4’,‘5’,‘888’]。

    lst = eval(input('请输入一个包含若干整数的列表:'))
    print(list(map(str,lst)))
    

    5、编写程序,输入一个包含若干任意数据的列表,输出该列表中等价于True的元素组成的列表。例如,输入[1,2,0,None,False,‘a’],输出[1,2,‘a’]。

    lst = eval(input('请输入一个包含若干任意元素的列表:'))
    print(list(filter(None,lst)))
    

    6、编写程序,输入一个包含若干整数的列表,输出一个新列表,新列表中奇数在前偶数在后,并且奇数之间的相对顺序不变,偶数之间的相对顺序也不变。

    lst = eval(input('请输入一个包含若干整数的列表:'))
    newLst = sorted(lst, key=lambda num:num%2==0)
    print(newLst)
    

    7、输入一个包含若干自然数的列表,输出这些自然数的平均值,结果保留3位小数。

    data = eval(input('请输入包含若干自然数的列表:'))
    avg = sum(data)/len(data)
    avg = round(avg,3)
    print('平均值:',avg)
    

    8、输入一个包含若干自然数的列表,输出这些自然数降序排列后的新列表。

    data = eval(input('请输入包含若干自然数的列表:'))
    print('降序排列后的列表:',sorted(data,revese=True))
    

    9、输入一个包含若干自然数的列表,输出一个新列表,新列表中每个元素为原列表中每个自然数的位数。例如,输入[1,888,99,23456],输出[1,3,2,5]。

    data = eval(input('请输入包含若干自然数的列表:'))
    data = map(str,data)
    length = list(map(len,data))
    print('每个元素的位数:',length)
    

    10、输入一个包含若干数字的列表,输出其中绝对值最大的数字。例如,输入[-8,64,3.5,-89],输出-89。

    data = eval(input('请输入包含若干自然数的列表:'))
    print('绝对值最大的数字:',max(data,key=abs))
    

    11、输入一个包含若干整数的列表,输出这些整数的乘积。例如,输入[-2,3,4],输出-24。

    from operator import mul
    from functools import reduce
    data = eval(input('请输入包含若干自然数的列表:'))
    print('乘积:',reduce(mul,data))
    

    12、输入两个包含若干整数的等长列表,把这两个列表看作两个向量,输出这两个向量的内积。

    from operator import mul
    from functools import reduce
    vec1 = eval(input('请输入第一个向量:'))
    vec2 = eval(input('请输入第二个向量:'))
    print('内积:',sum(map(mul,vec1,vec2)))
    

    二、列表、元组、字典、集合与字符串

    1、阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,第二个格子里放2粒米,第三个格子里放4粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64个格子都放满。编写程序,生成一个列表,其中元素为每个棋盘格子里米的粒数,并输出这些数字的和,也就是一共需要多少粒米。要求使用列表推导式。

    data = [2**i for i in range(64)]
    print(sum(data))
    

    2、编写程序,输入一个包含若干整数的列表,输出由其中的奇数组成的新列表。例如,输入[1,2,3,4,5,6,7,8],输出[1,3,5,7]。要求使用列表推导式。

    data = eval(input('请输入一个包含若干整数的列表:'))
    print([num for num in data if num%2==1])
    

    3、编写程序,输入两个包含若干整数的等长列表表示两个向量,输出这两个向量的内积。例如,输入[1,2,3]和[4,5,6],内积计算方法为14+25+3*6,输出32。要求使用列表推导式。

    vector1 = eval(input('请输入一个包含若干整数的向量:'))
    vector2 = eval(input('请再输入一个包含若干整数的等长向量:'))
    print(sum([num1*num2 for num1,num2 in zip(vector1,vector2)]))
    

    4、编写程序,输入一个包含若干整数的列表,输出其中的最大值,以及所有最大值的下标组成的列表。例如,输入[1,2,3,1,2,3,3],输出3和[2,5,6]。要求使用列表推导式

    data = eval(input('请输入一个包含若干整数的列表:'))
    m = max(data)
    print(m)
    print([index for index,value in enumerate(data) if value==m])
    

    5、编写程序,首先生成包含1000个随机数字字符的字符串,然后统计每个数字的出现次数。

    from string import digits
    from random import choice
    z = ''.join(choice(digits) for i in range(1000))
    result = {}
    for ch in z:
        result[ch] = result.get(ch,0) + 1
    for digit,fre in sorted(result.items()):
    	print(digit,fre,sep=':')
    

    6、编写程序,输入一个字符串,输出其中唯一字符组成的新字符串,要求新字符串中的字符顺序与其在原字符串中的相对顺序一样。例如,输入’1122a3344’,输出’12a34’。

    text = input('请输入一个字符串:')
    result = ''.join(sorted(set(text),key=lambda ch:text.index(ch)))
    print(result)
    

    7、编写程序,输入两个集合A和B,输出他们的交集、并集、对称差集以及差集A-B和B-A。要求使用集合运算符。

    A = eval(input('请输入一个集合:'))
    B = eval(input('再输入一个集合:'))
    AA = np.asarray(A)
    BB = np.asarray(B)
    print('并集:',AA|BB)
    print('交集:',AA&BB)
    print('对称差集:',AA^BB)
    print('差集A-B:',AA-BB)
    print('差集B-A:',BB-AA)
    

    8、编写程序,输入一个字符串,删除其中的重复空格,也就是如果有连续的多个空格的话就只保留一个,然后输出处理后的字符串。

    text = input('请输入一个包含空格的字符串:')
    print(''.join(text.split()))
    

    9、编写程序,输入一个字符串,把其中的元音字母a、e、o、i和u替换成对应的大写字母,然后输出新字符串。

    text = input('请输入一个字符串:')
    table = ''.maketrans('aeoiu','AEOIU')
    print(text.translate(table))
    

    10、编写程序,测试列表中的若干整数之间是否有重复。

    import random
    # 生成一个包含5个相同随机数的列表
    data1 = [random.randint(1,10)]*5
    # 标准库random中choices()函数用于从指定分布中随机选择k个元素,允许重复
    data2 = random.choices(range(10),k=5)
    # 标准库random中sample()函数用于从指定分布中随机选择k个元素,不允许重复
    data3 = random.sample(range(10),k=5)
    for data in (data1,data2,data3):
    	print('='*20)
    	print(data)
    	k1 = len(set(data))
    	k2 = len(data)
    	if k1 == k2:
    		print('无重复')
    	elif k1 == 1:
    		print('完全重复')
    	else:
    		print('部分重复')
    

    三、选择结构、循环结构、函数定义与使用

    1、生成包含两个或三个汉字的人名。

    from random import choice,random
    name = choice('赵钱孙李周吴郑王')
    if random()>0.5: 	# random()函数返回[0,1)区间上的随机数
    	name += choice('一二三四五六七')
    name += choice('金木水火土')
    print(name)
    

    2、 首先生成[1,100]区间上的一个随机数,然后根据随机数的范围生成变量sex的值,当随机数大于51时把sex设置为男,否则设置为女。

    from random import randint
    if randint(1,100)>51:
    	sex = '男'
    else:
    	sex = '女'
    print(sex)
    

    3、编写程序,输出200以内最大的素数。

    for n in range(200,1,-1): 	#从大到小遍历
    	for i in range(2,n):	#遍历[2,n-1]区间的自然数
    		if n%i == 0:	#如果n有因数,就不是素数
    			break
    		else:
    			print(n)
    			break
    

    4、使用递归法计算自然数各位数字之和。

    def digitSum(n):
    	if n == 0:
    		return 0
    	# 先计算除最后一位的其他位之和
    	# 再加上最后一位
    	return digitSum(n//10)+n%10
    

    5、编写函数模拟猜数游戏。通过参数可以指定一个整数范围和猜测的最大次数,系统在指定范围内随机产生一个整数,然后让用户猜测该数的值,系统根据玩家的猜测进行提示,玩家则可以根据系统的提示对下一次的猜测进行适当调整,直到猜对或次数用完。

    from random import randint
    def guess(start,end,maxTimes):
    	value = randint(start,end) #随机生成一个整数
    	for i in range(maxTimes):
    		if i==0:
    			prompt1 = 'Start to GUESS:'
    		else:
    		prompt = 'Guess again:'
    		try: #使用异常处理结构防止输入的不是数字
    			x = int(input(prompt))
    		except ValueError:
    			print('Must input an integer between 1 and',maxValue)
    		else:
    			if x == value: #猜对了
    				print('Congratulations!')
    				break
    			elif x > value:
    				print('Too big')
    			else:
    				print('Too little')
    		if i == maxTimes-1: # 次数用完还没有猜对
    			print('Game over.FALL.')
    			print('The value is ',value)
    guess(1,10,3)
    

    四、文件操作

    1、合并两个*.txt文件的内容,两个文件的多行内容交替写入结果文件,如果一个文件内容较少,则把另一个文件的剩余内容写入结果文件尾部。

    def mergeTxt(txtFiles):
    	with open('result.txt','w') as fp:
    		with open('txtFiles[0]') as fp1, open(txtFiles[1]) as fp2:
    			while True: #交替读取文件1和文件2中的行,写入结果文件
    			line1 = fp1.readline()
    			if line1:
    				fp.write(line1)
    			else:
    				# 如果文件1结束,结束循环
    				flag = False
    				break
    			line2 = fp2.readline()
    			if line2:
    				fp.write(line2)
    			else:
    				# 如果文件1结束,结束循环
    				flag = True
    				break
    		# 获取尚未结束的文件对象
    		fp3 = fp1 if flag else fp2
    		# 把剩余内容写入结果文件
    		for line in fp3:
    			fp.write(line)
    txtFiles = ['1.txt','2.txt']
    mergeTxt(txtFiles)
    

    2、把包含若干房屋信息的列表写入JSON文件,然后再读取并输出这些信息。

    import json
    information = [{'小区名称':'小区A','均价':8000,'月交易量':20},
    			   {'小区名称':'小区B','均价':8500,'月交易量':35},
    			   {'小区名称':'小区C','均价':7800,'月交易量':50},
    			   {'小区名称':'小区D','均价':9800,'月交易量':18}]
    with open('房屋信息.json','w') as fp:
    	json.dump(information,fp,indent=4,separators=[',',':'])
    with open('房屋信息.json') as fp:
    	information = json.load(fp)
    	for info in information:
    		print(info)
    

    3、编写程序,模拟生成某饭店自2020年1月1日开始,连续100天试营业期间的营业额数据,并写入CSV文件。文件中共两列,第一列为日期,第二列为营业额,文件第一行为表头或字段名称。假设该饭店第一天营业额基数为500元,每天增加5元,除此之外每天还会随机增加5到50元不等。

    from csv import reader,writer
    from random import randrange
    from datetime import date,timedelta
    fn = 'data.csv'
    with open(fn,'w') as fp:
    	# 创建CSV文件写对象
    	wr = writer(fp)
    	# 写入表头
    	wr.writerow(['日期','销量'])
    	# 第一天的日期,2020年1月1日
    	startDate = date(2020,1,1)
    	# 生成100个模拟数据
    	for i in range(100):
    		# 生成一个模拟数据,写入CSV文件
    		amount = 500 + i*5 + randrange(5,50)
    		wr.writerrow([str(startDate),amount])
    		# 下一天
    		startDate = startDate + timedelta(days = 1)
    	# 读取并显示上面代码生成的CSV文件内容
    	with open(fn) as fp:
    		for line in reader(fp):
    			if line:
    				print(*line)
    

    参考

    《Python数据分析、挖掘与可视化》

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python新手练习题

    发表评论