我正在练习python 3问题,但遇到一个问题。
小佩蒂亚非常喜欢礼物。最近,他从母亲那里收到了新的笔记本电脑作为新年礼物。他立即决定将它赠送给其他人,这比给别人礼物更令人愉快。这次他在自己的地方组织了一个新年晚会,并邀请了他的朋友们在那里。
如果Petya比接收礼物更喜欢一件事,那就是看着其他人向别人礼物。因此,他安全地将笔记本电脑藏起来直到下一个新年,并决定在不参加此过程的同时观看他的朋友交换礼物。他用1到n的整数来编号他所有的朋友。 Petya记得我给一个朋友号码送了礼物给一个朋友号码pi。他还记得他的每个朋友都收到了一份礼物。
现在Petya想为每个朋友知道我给他礼物的朋友的人数。
输入
第一行包含一个整数n(1≤n≤100)-Petya邀请参加聚会的朋友数量。
第二行包含n个以空格分隔的整数:第i个数字是pi-给朋友编号i送礼的朋友的编号。确保每个朋友都收到一份礼物。可能有些朋友不同意Petya赠送礼物给别人的想法。那些朋友把礼物给了自己。
输出
打印n个以空格分隔的整数:第i个数字应等于给礼物编号i送礼的朋友的编号。
代码:
n=int(input())
gifts=input().split()
""" Reverse_gifts is just dummy list so that I can place each integer at
its required place"""
reverse_gifts=[range(n)]
""" For converting each item of gifts to integer"""
for num in range(len(gifts)):
gifts[num]=int(gifts[num])
""" It will change the items of reverse_gifts to the items we need in
output"""
for num1 in range(1,n+1):
guest_recieved_gift=gifts.index(num1)
reverse_gifts[num1-1]=guest_recieved_gift+1
print(reverse_gifts)
"""For converting each item of reverse gifts to string"""
for num2 in range(len(gifts)):
reverse_gifts[num2]=str(reverse_gifts[num2])
""" For converting final list into string and print it"""
final_gifts=" ".join(reverse_gifts)
print(final_gifts)
输入:
4
2 3 4 1
输出:回溯(最近一次通话最近):
File "Presents.py", line 11, in <module>
reverse_gifts[num1-1]=guest_recieved_gift+1
IndexError: list assignment index out of range
答案 0 :(得分:1)
问题是您正在使用长度为1的reverse_gifts=[range(n)]
,因为当前它仅包含一个生成器。因此,由于尝试访问大于0的索引,所以最终得到IndexError
。可以使用range
<来解压缩*
生成器的值以使其包含4个元素的列表。 / p>
reverse_gifts=[*range(n)]
替代方法是
reverse_gifts= list(range(n))
完整答案
n=4
gifts="2 3 4 1".split()
reverse_gifts=[*range(n)]
for num in range(len(gifts)):
gifts[num]=int(gifts[num])
for num1 in range(1,n+1):
guest_recieved_gift=gifts.index(num1)
reverse_gifts[num1-1]=guest_recieved_gift+1
print(reverse_gifts)
# [4, 1, 2, 3]
for num2 in range(len(gifts)):
reverse_gifts[num2]=str(reverse_gifts[num2])
final_gifts=" ".join(reverse_gifts)
print(final_gifts)
# 4 1 2 3
答案 1 :(得分:0)
您的编程错误在于初始化reverse_gifts
:range(n)
是单个对象,一个迭代器。它不是n
整数列表。简单的print(reverse_gifts)
显示:
[range(0, 4)]
相反,请使用列表理解:
reverse_gifts=[i for i in range(n)]
现在您的程序将按预期执行。