不能将序列乘以float类型的nonit?

2024-09-30 01:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求写一个模拟器,最终目标是看有多少墨水在一个大约15个滚筒的链条末端的圆柱体上。我目前正试图建立一个字典来定义滚轴。基于此,我想写一个函数,它将接受用户输入,“滚子直径”,找到给定直径与固定直径的比率,并将其转换为整数个“段”。我不是一个程序员(我正在使用互联网资源学习Python[2.7]),我正在为类型错误而挣扎:不能用非int类型的'float'执行多个序列 我相信这是一个很小的问题,我已经看过相关的答案,但我不明白具体我做错了什么…如果有任何建议,我们将不胜感激,这里是代码(只有几个“滚轴”),请不要笑。。。在

Rubber = True  
Copper = False  
CW = 1  
ACW = -1  
num_rollers = 4  
plate_diameter = 406.4  

rollers = [{} for i in range(num_rollers)]  
rollers[0] = {'top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Copper, 'direction': ACW, 'ink': []}  
rollers[1] = {'top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Rubber, 'direction': CW, 'ink': []}  
rollers[2] = {'top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Copper, 'direction': ACW, 'ink': []}  
rollers[3] = ['top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Rubber, 'direction': CW, 'ink': []}  

R = rollers[i]  

def roller_data():  
    global roller_diameter  
    roller_diameter = float(raw_input("Enter the roller diameter" + str(i) + ': '))

for i in range(num_rollers):  
    roller_data()  
R['segments'] = int(round(rollers[3]['segments']*roller_diameter/plate_diameter))  
R['angle'] = (360.0/R['segments'])  

print rollers[3]['segments']

回溯是:

^{pr2}$

当你运行这段代码时,你输入什么作为直径并不重要(我一直在用85,95,110,120),但使用什么数字没有区别。我想它采取任何数字(整数或浮点)和四舍五入任何浮点数。在


Tags: toprollernummaterialcwinkrubberseg
2条回答

在这一行中:

R['segments'] = int(round(rollers[3]['segments']*roller_diameter/plate_diameter))  

rollers[3]['segments'],乘以roller_diameter,然后除以plate_diameter。这将向您显示错误消息

^{pr2}$

这告诉我你试图用一个浮点数乘以一个序列,比如一个列表或一个元组。如果我理解正确的话,rollers[3]['segments']仍然是一个空列表,并且您试图将其乘以roller_diameter,这是一个浮点。我不确定您在这里要做什么,因为您从来没有为segments键分配任何东西,就我所知。在

其他注意事项:

rollers[3] = ['top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Rubber, 'direction': CW, 'ink': []}  

这一行给出了一个SyntaxError,因此很明显这不是您运行的代码。请始终将您实际运行的代码复制并粘贴到框中,否则人们必须区分“操作代码中的错误”和“操作员如何在StackOverflow上编辑代码的错误”。在

R = rollers[i]  

我想您认为这意味着R现在总是指向rollers中的i-th元素,但Python不是这样工作的。它的意思是“告诉名称R,它现在指的是rollers[i]当前描述的任何对象”。i此时为3(这是您使用的列表理解的剩余部分),因此R = rollers[3]。如果您将for i in range(num_rollers)更改为for j in..,您将得到

    R = rollers[i]  
NameError: name 'i' is not defined

因为它正在试图得到i的值,而此时i。在

def roller_data():  
    global roller_diameter  
    print i
    roller_diameter = float(raw_input("Enter the roller diameter" + str(i) + ': '))

这里不需要全局变量。如果要使输入成为函数,只需返回一个值:

def read_diameter(i):
    return float(raw_input("Enter the roller diameter # {}: ".format(i)))

当你拿回来的时候把它分配到某处,比如

rollers[i]['roller_diameter'] = read_diameter(i)

并在计算中使用值,而不是全局roller_diameter。在

我想在你的最后几行中有一个缩进错误,你希望R['segments']位缩进,但是你硬编码rollers[3],而不是使用{},所以也许我错了,但是请记住你的R总是{}。在循环中使用rollers[i],或者在循环中设置R = rollers[i],这样该行每次执行时都会得到一个新值i。在

显示错误输出

R['segments'] = int(round(rollers[i]['segments']*roller_diameter/plate_diameter)) 

在你的代码里 R['segments']=浮动(圆形(滚柱[3][‘segments']*滚筒直径/板材直径))

您是否正在运行您的代码的正确版本或最新版本?您这里的代码块是否与从中获取此错误的代码相同?在

问候

相关问题 更多 >

    热门问题