以下是有所收获的题目:

第一题

第5章-10 两数之和 (30 分)
给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 “no
answer”。输出的下标按从小到大排序。用一重循环加字典实现。

输入格式: 在一行中给出这组数。 在下一行输入目标数

输出格式: 在一行中输出这两个数的下标,用一个空格分开。

我的代码:

ls = list(map(int, input().split(",")))
i = int(input())
length = len(ls)
for x in range(length):
    for y in range(x, length):
        if ls[x] + ls[y] == i:
            print("{} {}".format(x, y))
            exit(0)
else:
    print("no answer")

我的代码可以实现题目的要求结果,但是却没有按照题目的具体要求:一重循环,用字典来解决这个问题。

别人的代码:

#本题思路:将目标数字减去第一行输入的每一个数字,然后将其存入到字典dict1当中;
#items()函数,可以遍历字典,从而取出其中的key和value值;
#list1.index()输出值对应的角标;
#用到了一个for/else语句块,for循环中的语句不输出的时候,执行else中的语句;
list1 = list(map(int,input().split(",")))
num = int(input())
dict1 = {}
for i in list1:
    dict1[i] = num - i
for key,value in dict1.items():
    if(key in list1 and value in list1):
        print("%d %d"%(list1.index(key),list1.index(value)))
        break
else:
    print("no answer")
exit(0)
————————————————
版权声明:本文为CSDN博主「10011111」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43788669/article/details/105610592

思考:

for i in list1:
    dict1[i] = num - i

这一步是比较关键的,将数字和目标数字的差成功对应起来,放到字典中,这样如果列表中存在字典中的值,那么就可以找出具体的位置了。

for key,value in dict1.items():
    if(key in list1 and value in list1):
        print("%d %d"%(list1.index(key),list1.index(value)))
        break

这里利用了字典的items函数,可以遍历字典中的键和对应的值。
我觉得key in list1这一句可以删掉,因为key肯定在list里面呀,而只要value在list里,就通过list.index()*函数找到该元素的位置,输出就可以了。

第二题

第5章-11 字典合并 (40 分)
字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!

输入格式: 在第一行中输入第一个字典字符串 在第二行中输入第二个字典字符串

输出格式: 在一行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也一样。

我的代码:

dict1 = eval(input())
dict2 = eval(input())
for key, value in dict2.items():
    if key in dict1:
        dict1.update({key: value + dict1[key]})
    else:
        dict1.update({key: value})
print(dict1)

我的代码仅能实现基本功能,但是数字和字符如何处理还不清楚。

别人的代码:

思路:
对于字典里的键值,必须是数字在前,字母在后,由于python不能把数字和字母之间进行大小写比较,因此可以构造两个列表list_dig、list_wor,分别存储两个字典中的数字和字母键,分别sort之后拼接到一起。
在循环遍历的同时将两个字典里的键值对放到一个新的字典dic里,相同键合并,最后按照格式要求输出即可。

s1=eval(input())
s2=eval(input())
list_dig=[]
list_wor=[]
dic={}
for i in s1:
    dic[i]=dic.get(i,0)+s1.get(i,0)
    if type(i)==type(1):
        list_dig.append(i)
    elif type(i)==type('w'):
        list_wor.append(i)
for i in s2:
    dic[i] = dic.get(i, 0) + s2.get(i, 0)
    if type(i)==type(1):
        list_dig.append(i)
    elif type(i)==type('w'):
        list_wor.append(i)
list_dig.sort();list_wor.sort()
list=list_dig+list_wor
print("{",end="")
cnt=0;length=len(dic)
for i in list:
    if i in dic:
        cnt += 1
        if type(i)==type(1):
            print("{}:{}".format(i,dic[i]),end="")
        else:
            print('"{}":{}'.format(i,dic[i]),end="")
        del dic[i]
        if cnt!=length:
            print(",",end="")
print("}")
————————————————
版权声明:本文为CSDN博主「WhlittLou」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43301333/article/details/104015714

第三题

第6章-2 一帮一 (15 分)
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:
输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

别人的代码:

n = int(input())
s = []
for i in range(n):
    x = list(input().split())
    s.append(x)
s1 = s[:int(n/2)]
s2 = s[n-1:int(n/2)-1:-1]
for i in s1:
    for j in s2:
        if i[0] != j[0]:
            print(i[1], j[1])
            s2.remove(j)
            break

思考:

1.这道题困扰我的点在于不知道如何处理性别和名字,如果将整个数据转化为二维数组就很好解决了。
先通过x = list(input().split())将每个人的性别和名字作为一个数组,再通过s.append(x)将每个人append进s数组中,这样就形成了一个二维数组。
2.

s1 = s[:int(n/2)]
s2 = s[n-1:int(n/2)-1:-1]

这段代码的作用是将一个列表切分为两半,便于进行后面的处理。

第四题

第6章-3 列表或元组的数字元素求和 (20 分) 求列表中数字和,列表中嵌套层次不限2层

输入格式: 在一行中输入列表或元组

输出格式: 在一行中输出数字的和

别人的代码:

def f(x):
    su=0
    if type(x)==int:
        su=su+x
    if type(x)==list or type(x)==tuple:
        for i in x:
            su=su+f(i)
    return su
x=eval(input())
print(f(x))
————————————————
版权声明:本文为CSDN博主「仗剑倚天涯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45948920/article/details/104900331

思考:

1.函数的递归调用是这道题的关键
2.通过type()函数来判断变量类型,进而来选择是否要继续递归

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐