我还没有发现任何与我的问题相关的内容,所以我可能会问错了。
我正在进行一项练习,我从1开始给出顺序值,然后转到n,但不是按顺序。我必须从列表中找到缺失值。
我的方法是添加完整的1 =>在for循环中的n值,但是我无法弄清楚如何将n - 1个非连续值作为其自己的输入行添加,以便从完整值中减去它以获得丢失的值。
我一直在搜索对for循环的修改或者只是如何添加非连续数字的n个输入。如果我只是提出错误的问题,如果有人能指出我正确的方向,我很乐意做自己的研究。
total = 0
for i in range (1 , (int(input())) + 1):
total += i
print(total)
for s in **?????(int(input()))**:
total -= s
print(total)
示例输入: 五 3 2 五 1 预期产量:4
答案 0 :(得分:0)
我不知道你是否应该创建初始数据(缺少项目),所以我添加了一些行来生成这个序列:
import random
n = 12 # or n = int(input('Enter n: ')) to get user input
# create a shuffled numeric sequence with one missing value
data = list(range(1,n+1))
data.remove(random.randrange(1,n+1))
random.shuffle(data)
print(data)
# create the corresponding reference sequence (without missing value)
data2 = list(range(1,n+1))
# find missing data with your algorithm
print("Missing value =", sum(data2)-sum(data))
这是输出:
[12, 4, 11, 5, 2, 7, 1, 6, 8, 9, 10]
Missing value = 3
答案 1 :(得分:0)
要填写您在示例代码中使用的方法:
total = 0
n = int(input("How long is the sequence? "))
for i in range(1, n+1):
total += i
for i in range(1, n):
total -= int(input("Enter value {}: ".format(i)))
print("Missing value is: " + str(total))
虽然第一次循环是不必要的。首先,你的循环等同于sum
函数:
total = sum(range(1,n+1))
但是你可以使用公式完全取消任何迭代:
total = int(n*(n+1)/2) # division causes float output so you have to convert back to an int