输入一个1到7的数字,输出对应的星期名的缩写。
1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun
输入格式:
输入1到7之间数字
输出格式:
输出对应的星期名的缩写
输入样例:
在这里给出一组输入。例如:
1
输出样例:
在这里给出相应的输出。例如:
Mon
思路:
最简单的字典运用了,就是把数字和星期的英文简写对应起来存入dic中然后在根据输入在字典中寻找对应键值的值就可以了
代码区:
n = int(input())
weeks = {1:"Mon", 2:"Tue", 3:"Wed", 4:"Thu", 5:"Fri", 6:"Sat", 7:"Sun"}
print(weeks[n])
图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:
{‘O’:{‘A’:2,‘B’:5,‘C’:4}}。用eval函数处理输入,eval函数具体用法见第六章内置函数。
输入格式:
第一行表示输入的行数
下面每行输入表示一个顶点和该顶点相连的边及长度的字符串
输出格式:
在一行中输出顶点数,边数,边的总长度
输入样例:
在这里给出一组输入。例如:
4
{‘a’:{‘b’:10,‘c’:6}}
{‘b’:{‘c’:2,‘d’:7}}
{‘c’:{‘d’:10}}
{‘d’:{}}
输出样例:
在这里给出相应的输出。例如:
4 5 35
思路:
首先因为输入是一个表达式,带有{}号的,所以使用eval方法来将其转化成字典,然后对字典的每一个key都进行遍历记为t,很显然,可以看出输入是有两层字典的,所以我们需要再使用循环来遍历一下这个t,如果存在就把边数加一同时把对应的路径长度给累加起来.
代码区:
n = int(input())
bian = 0
summ = 0
for i in range(n):
dic = eval(input())
for j in dic:
t = dic[j]
for k in t:
bian += 1
summ += t[k]
print(n, bian, summ)
四则运算(用字典实现),比较c语言的switch语句。
输入格式:
在一行中输入一个数字
在一行中输入一个四帜运算符(+,-,*,/)
在一行中输入一个数字
输出格式:
在一行中输出运算结果(小数保留2位)
输入样例1:
在这里给出一组输入。例如:
7
/
3
输出样例1:
在这里给出相应的输出。例如:
2.33
输入样例2:
在这里给出一组输入。例如:
10
/
0
输出样例2:
在这里给出相应的输出。例如:
divided by zero
思路:
注意:!!数可能是小数,所以要使用float来进行强转,不可以用int哦
将加减乘除四个符号存入字典中,对应的值就是式子的运行结果,需要注意格式为两位小数
然后对于除法时的除数为0进行判断.
代码区:
num1 = float(input())
c = input()
num2 = float(input())
ch = {}
ch["+"] = "{:.2f}".format(num1 + num2)
ch["-"] = "{:.2f}".format(num1 - num2)
ch["*"] = "{:.2f}".format(num1 * num2)
if c == '/' and num2 == 0:
print("divided by zero")
else:
ch["/"] = "{:.2f}".format(num1 / num2)
print(ch[c])
利用集合分析活动投票情况。第一小队有五名队员,序号是1,2,3,4,5;第二小队也有五名队员,序号6,7,8,9,10。输入一个得票字符串,求第二小队没有得票的队员
输入格式:
在一行中输入得票的队员的序列号,用逗号隔开。
输出格式:
一行中输出第二小队没有得票的队员序号。
输入样例:
在这里给出一组输入。例如:
1,5,9,3,9,1,1,7,5,7,7,3,3,1,5,7,4,4,5,4,9,5,10,9
输出样例:
在这里给出相应的输出。例如:
6 8
思路:
一开始看错了以为时所有人,没想到原来找的只是第二小组的哎,看题要仔细啊
根据逗号来将数字分开存入列表中,然后将全部赋值为0,如果devote中有就加一,最后进行判断是否为0,然后就输出
输出格式有点恶心,最后总是多一个空格,所以需要进行判断是否加空格
(关于全部赋值为0这个操作其实可以使用字典的get方法来简化的,下面的题目中有运用到)
代码区:
devote = [int(n) for n in input().split(',')]
dic = {}
f = True
for i in range(1, 11):
dic[i] = 0
for i in devote:
dic[i] += 1
for i in range(6, 11):
if dic[i] == 0:
if f:
print(i, end = '')
f = False
else:
print(f" {i}", end = '')
本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2
思路:
使用get方法就可以在dic中查找有无对应的键值,如果没有就赋值为0,有的话就不进行什么操作,返回的就是该键值的值.
然后看代码就可以一目了然了,这里就不细述了
同时需要注意的时当查找的字母在句子中不存在的时候也要输出0,这是个特殊的情况.
代码区:
string = input()
c = input()
dic = {}
for i in string:
dic[i] =dic.get(i, 0) + 1
if c not in dic:
print("0")
else:
print(dic[c])
给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。
输入格式:
输入首先给出正整数N(≤10
5
),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]。
输出格式:
按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为0则不输出该项。
输入样例:
8
10 2 0 5 7 2 5 2
输出样例:
0:1
2:3
5:2
7:1
10:1
思路:
我这题有点投机取巧了hh,使用了将dict转化为set来达到删除重复值的目的,同时因为dict中的键值都是数字,所以它的ascll码都是按照顺序来的,又因为set的实现是按照hashmap来的,所以就直接生成了一个排序好的了(如果键值不是纯数字,那么set就会生成随机的了)
代码区:
n = int(input())
dic = {}
work_year = [int(year) for year in input().split()]
for year in work_year:
dic[year] = dic.get(year, 0) + 1
year = set(work_year)
for i in year:
print(f"{i}:{dic[i]}")
输入一个列表,去掉列表中重复的数字,按原来次序输出!
输入格式:
在一行中输入列表
输出格式:
在一行中输出不重复列表元素
输入样例:
在这里给出一组输入。例如:
[4,7,5,6,8,6,9,5]
输出样例:
在这里给出相应的输出。例如:
4 7 5 6 8 9
思路:
一开始也想使用上一道题的方法来简单的达成,不过这次不行了,因为这次是要保持原有的顺序,这是set所不能做到的,因为set会随机打乱(除非都是纯数字)
所以需要先使用eval来把输入存为列表形式,然后使用sort来根据nums.index来排序,就可以保持原有顺序了.
代码区:
nums = eval(input())
nums = list(set(nums))
nums.sort(key=nums.index)
f = True
for num in nums:
if f:
print(num, end = '')
f = False
else:
print(f" {num}", end = '')
求指定区间内能被3,5和7整除的数的个数
输入格式:
在一行中从键盘输入2个正整数a,b(1<=a
输出格式:
在一行输出大于等于a且小于等于b的能被3,5和7整除的数的个数。
输入样例1:
在这里给出一组输入。例如:
10 100
输出样例1:
在这里给出相应的输出。例如:
0
输入样例2:
在这里给出一组输入。例如:
1000 100000
输出样例:
在这里给出相应的输出。例如:
943
思路:
思路很简单,就是将能被不同的数整除的数都存入不同的字典中,最后将三个字典进行与操作,这就可以留下三者共有的,也就是能被三个都整除的了.
代码区:
l, h = [int(num) for num in input().split()]
set3 = set()
set5 = set()
set7 = set()
for i in range(l, h + 1):
if i % 3 == 0:
set3.add(i)
if i % 5 == 0:
set5.add(i)
if i % 7 == 0:
set7.add(i)
true_set = set3 & set5 & set7
print(len(true_set))
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
鞍点的个数
输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
1
输入样例2:
2
1 7
4 1
输出样例2:
0
输入样例3:
3
4 7 8
1 3 3
2 3 1
输出样例3:
2
思路:
首先需要定义一个二维列表来存储矩阵数据,然后通过for循环来给列表根据输入赋值.因为要找到每行的最大数以及每列的最小数,所以我这里采用的是列表表达式来完成,将一行或一列的数存在一个列表中,然后使用max或者min方法来求值,然后因为我们要考虑会有重复大的数字,所以不能只考虑只存在一个数的情况,例如3599四个数中9有两个,所以两个列都要进行判断,所以我们要这些数对应的坐标存到r列表中.然后同理将列中的最小数存到c列表中,最后将两个列表转化为set来剔除重复值,再进行与操作,得到符合两个条件的坐标,这也就可以知道存在几个鞍点了.
代码区:
n = int(input())
a = [[0 for _ in range(n)] for _ in range(n)]
r = []
c = []
for i in range(n):
j = 0
nums = [int(num) for num in input().split()]
for m in nums:
a[i][j] = m
j += 1
for i in range(n):
num1 = [a[i][num] for num in range(n)]
num1 = max(num1)
num2 = [a[num][i] for num in range(n)]
num2 = min(num2)
r += [(i, j) for j in range(n) if a[i][j] == num1]
c += [(k, i) for k in range(n) if a[k][i] == num2]
set1 = set(r) & set(c)
print(len(set1))
给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 “no answer”。输出的下标按从小到大排序。用一重循环加字典实现。
输入格式:
在一行中给出这组数。
在下一行输入目标数
输出格式:
在一行中输出这两个数的下标,用一个空格分开。
输入样例1:
在这里给出一组输入。例如:
2,7,11,15
9
输出样例1:
在这里给出相应的输出。例如:
0 1
输入样例2:
在这里给出一组输入。例如:
3,6,9
10
输出样例2:
在这里给出相应的输出。例如:
no answer
思路:
因为有做法的限制,所以不能直接使用暴力的手段,来使用两个for来强行解决问题了sad,所以需要多考虑会.
遍历每个数,然后将它的"另一半"在字典中找一下,如果没找到就说明时间未到,不过还有机会,所以要将这个数存入字典中等待良缘,如果找到了,那么就输出两个人对应的位置,注意!这里要后输出主动去找的那个人,因为找到的情况肯定是后来的那个人才能完成的,因为有人在等她嘛~,所以不能交换输出的顺序.
代码区:
nums = [int(num) for num in input().split(',')]
n = int(input())
dic = {}
f = 1
for i in range(len(nums)):
num2 = n - nums[i]
if dic.get(num2) != None:
print(dic.get(num2), i)
f = 0
dic[nums[i]] = i
if f:
print("no answer")
输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
输入格式:
在第一行中输入第一个字典字符串;
在第二行中输入第二个字典字符串。
输出格式:
在一行中输出合并的字典,输出按字典序。
“1” 的 ASCII 码为 49,大于 1,排序时 1 在前,“1” 在后。其它的字符同理。
输入样例1:
在这里给出一组输入。例如:
{1:3,2:5}
{1:5,3:7}
输出样例1:
在这里给出相应的输出。例如:
{1:8,2:5,3:7}
输入样例2:
在这里给出一组输入。例如:
{“1”:3,1:4}
{“a”:5,“1”:6}
输出样例2:
在这里给出相应的输出。例如:
{1:4,“1”:9,“a”:5}
思路:
又是存在格式问题!!烦死了
首先遍历dic2,然后都加到dic1,具体就不叙述了,因为需要进行排序,所以要先转化为列表,来调用sort,根据键值的Ascll码来进行排,我们需要进行判断,如果是字符就直接使用ord转化,如果是数字就保留原样.
因为有万恶的格式问题,所以要先转化为str再使用replace方法来进行替换,将单引号变成双引号,空格取消.注意要这么写("’", ‘"’),双引号包单引号,单引号包双引号.
代码区:
dic1 = eval(input())
dic2 = eval(input())
for i in dic2:
dic1[i] = dic1.get(i, 0) + dic2[i]
dic1 = list(dic1.items())
dic1.sort(key=lambda k: ord(k[0]) if type(k[0]) == str else k[0])
dic1 = str(dict(dic1))
dic1 = dic1.replace("'", '"').replace(' ', '')
print(dic1)
新手上路,(几乎不会是最优解,轻点打)有错请指正;