简体   繁体   English

dict不包含预期的项目数

[英]dict does not contain the expected number of items

I'm writing a program to iterate through a long number, converting it into a string, and then using an index list to pick out 10 individual consecutive numbers from the long number, then multiplying those ten numbers together and adding the numbers and the result to a dictionary. 我正在编写一个程序来遍历长整数,将其转换为字符串,然后使用索引列表从长整数中选择10个单独的连续数字,然后将这十个数字相乘,然后将数字与结果相加到字典。 Then I am increasing the index list values by 1, and repeating the process until I have run through the whole number. 然后,我将索引列表值增加1,并重复该过程,直到遍历整个数字为止。

Then I am trying to find the largest value in the dictionary, and have the program tell me that value. 然后,我试图在字典中找到最大的值,并让程序告诉我该值。

The problem I am having is that I have an error checking mechanism in the program, which tells me how many key/value pairs I have in the dictionary. 我遇到的问题是程序中有一个错误检查机制,该机制告诉我字典中有多少个键/值对。 It should be 990, but instead I have 53. 应该是990,但我有53。

If anyone can identify what the problem is, I will be eternally grateful. 如果有人能找出问题所在,我将永远感激不已。

Code to follow: 遵循的代码:

from functools import reduce

#define the number to test
testno = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

#declare initial variables
index=[]
products = {}
count = 0

#define functions
def product(x):
    return reduce((lambda a,b: a*b),x)

def increm(y):
    return [x+1 for x in y]

#def runproduct(x):
#    return product

def testnos(x):
    return [int(str(x)[y]) for y in index]

#define the initial index
for x in range(10):
    index = index+[x]

runtime = len(str(testno))-10

#start the while loop
while count < runtime:
    products[str(testnos(testno))] = product(testnos(testno))
    index = increm(index)
    count+=1

print("[+] Number of results: "+str(len(str(products.values))))
print("[+] The numbers with the largest product are: "+str(max(products.keys(),key=(lambda k:products[k]))))

You have a problem in your first print statement. 您的第一份print声明中有问题。 You are currently converting your products into a string, which returns to you something like this 您当前正在将products转换为字符串,这将向您返回类似这样的信息

{'[0, 8, 1, 3, 5, 3, 3, 6, 2, 7]': 0, ..., '[7, 8, 4, 6, 8, 6, 2, 2, 4, 8]': 8257536}

Applying the len built-in over it will return the result 53 . 将内建的len应用于它会返回结果53 What you really want here is calling len directly over you products variable. 您真正想要的是直接在products变量上调用len

>>> print("[+] Number of results: {}".format(len(products)))
[+] Number of results: 990

Consider using the format function when building your string. 构建字符串时,请考虑使用format函数。 You can use PyFormat website as reference. 您可以使用PyFormat网站作为参考。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM