Мой код будет запущен, а затем, когда он достигнет определенной функции, у меня будет TypeError: объект типа NoneType не имеет len () - PullRequest
0 голосов
/ 09 июля 2020

Значение строки slow_cost = slow_len * Fast_cost = fast_len * R в моей функции ave_chop_time. Где я go ошибся?

Он работает нормально, и я предполагаю, что моя функция ave_chop_time не имеет значения. Кроме того, раньше не говорилось, что L не определено, а теперь это так.

 import random

slice_list= [0,100]
size_limit= L
#L is defined by user input as seen below

def get_piece_sizes(slice_list):
    piece_sizes=[]
    for i in range(len(slice_list)-1):
        piece_sizes.append(slice_list[i+1]-slice_list[i])
    return piece_sizes

def fast_slices(size_limit, slice_list):
    done= False
    while (not done):
        cut= round(random.uniform(0,100),5)
        slice_list.append(cut)
        slice_list.sort()
        
        p**strong text**iece_sizes=get_piece_sizes(slice_list)
        if max(piece_sizes)<=size_limit:
            return slice_list
        
def slow_slices(size_limit, slice_list):
    i=0
    for i in range(len(slice_list)):
        slow_slice_diff= [slice_list[-1] - slice_list[-2]]
        # checking if the slice_list is smaller than the size_limit
        #from subrtacting from the second to last element 
        if max(slow_slice_diff) == size_limit:
            return slice_list
        elif max(slow_slice_diff) > size_limit:
            x=slice_list[-2] + size_limit
            slice_list. append(x)
            slice_list.sort()
            return slow_slices(size_limit, slice_list)
        
def ave_chop_time(slice_list,fast_limit,slow_limit,fast_cost, slow_cost,n):
    total_cost=0
    for i in range(n):
        fast_sliced= fast_slices(fast_limit, slice_list)
        slow_sliced= slow_slices(slow_limit, slice_list)
        fast_len=len(fast_sliced) 
        slow_len=len(slow_sliced)
        slow_cost= slow_len * A
        fast_cost = fast_len * R
        total_cost= slow_cost + fast_cost
        return total_cost/n      
            

if __name__ == "__main__":
    print("Welcome to my average chop time calculator!")
L = float(input("Give the overall size limit: "))
R = float(input("Give the time cost for a random slice: "))
A = float(input("Give the time cost for an accurate slice: "))
print("The average chopping times by random slice size limit: ")
print("{:18} {:18}".format("fast_limit", "ave_chop_time"))
for i in range(0, int(101 - L), 5):
    print("{:<18f} {:<18f}".format(L+i, ave_chop_time([0,100], L+i, L, R, A, 100))) 

1 Ответ

1 голос
/ 09 июля 2020

В соответствии с тем, что сказал @Putnam, при тестировании все будет работать нормально (насколько я знаю), если вы замените:

if max(slow_slice_diff) == size_limit:
            return slice_list

на:

if max(slow_slice_diff) <= size_limit:
            return slice_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...