Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python can';用浮点型的非整数乘以序列?_Python_Python 2.7 - Fatal编程技术网

Python can';用浮点型的非整数乘以序列?

Python can';用浮点型的非整数乘以序列?,python,python-2.7,Python,Python 2.7,我被要求编写一个模拟器,最终目标是观察大约15个滚筒链末端的一个圆筒上有多少墨水。我目前正试图建立一个定义滚轴的字典。从这里,我想写一个函数,它将接受用户输入‘roller_diameter’,找到给定直径与固定直径的比率,并将其转换为整数个‘segments’。我不是一名程序员(我正在使用互联网资源学习Python[2.7]),我正在努力解决类型错误:不能通过非int类型“float”进行多重排序 我相信这是一个微不足道的问题,我已经看过了相关的答案,但一直无法理解我到底做错了什么…任何建议都

我被要求编写一个模拟器,最终目标是观察大约15个滚筒链末端的一个圆筒上有多少墨水。我目前正试图建立一个定义滚轴的字典。从这里,我想写一个函数,它将接受用户输入‘roller_diameter’,找到给定直径与固定直径的比率,并将其转换为整数个‘segments’。我不是一名程序员(我正在使用互联网资源学习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']
回溯是:

Traceback (most recent call last):
File "\\datasvr\users\rioliver\Python2.7\dict_test_v2.py", line 24, in <module>
R['segments'] = int(round(rollers[3]['segments']*roller_diameter/plate_diameter))
TypeError: can't multiply sequence by non-int of type 'float'
回溯(最近一次呼叫最后一次):
文件“\\datasvr\users\rioliver\Python2.7\dict\u test\u v2.py”,第24行,在
R['segments']=int(圆形(辊[3]['segments']*辊直径/板直径))
TypeError:无法将序列与“float”类型的非int相乘

当您运行此代码时,输入的直径(我一直在使用85、95、110、120)并不重要,但使用的数字没有区别。我希望它接受任何数字(整数或浮点)并对任何浮点进行四舍五入。

显示错误输出

R['segments'] = int(round(rollers[i]['segments']*roller_diameter/plate_diameter)) 
在你的代码中你有什么 R['segments']=浮子(圆形(辊子[3]['segments']*辊子直径/板直径))

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

关于这一行中的

R['segments'] = int(round(rollers[3]['segments']*roller_diameter/plate_diameter))  
滚筒[3]['segments']
,乘以
滚筒直径
,然后除以
板材直径
。这将显示错误消息

TypeError: can't multiply sequence by non-int of type 'float'
这告诉我,你试图用一个浮点数乘以一个序列,比如一个列表或一个元组。如果我理解正确的话,
roller[3]['segments']
仍然是一个空列表,您试图将其乘以
roller\u diameter
,这是一个浮点数。我不确定您在这里想做什么,因为您从未将任何内容分配给
segments
键,就我所知

其他一些注意事项:

rollers[3] = ['top_seg': 0, 'roller_diameter': [], 'segments': [], 'material': Rubber, 'direction': CW, 'ink': []}  
这一行给出了一个SyntaxError,因此显然不是您运行的代码。请始终复制并粘贴您实际运行到框中的代码,否则人们必须区分“OP代码中的错误”和“OP如何在StackOverflow上编辑代码中的错误”

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

    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)
并在计算中使用该值,而不是全局
滚柱直径


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

您的代码与回溯不匹配,有问题。在你的代码中,你没有转到
int
,而在回溯中你做到了。抱歉,那是我的错误!给出该错误的行应为:R['segments']=int(圆形(滚柱[3]['segments']*滚柱直径/板材直径))使用链接编辑代码。如果您试图在下面的注释中发布代码,那么肯定会失败。您可以将所有必要的信息添加到问题中。完成。谢谢你的帮助,我还没有意识到我可以编辑原始代码…对不起,我在让堆栈溢出识别我的代码时遇到了麻烦!所以我重新打了一遍,显然犯了一个错误,很抱歉造成了混乱!在这些括号中应该是3,错误来自我试图发布问题时运行的测试。。。。谢谢你的关注!发布您运行的测试中导致此错误的代码,以便我可以尝试从我的末端运行它来复制错误消息,并查看如何帮助您*要将代码识别为代码,您需要在每行文本中缩进四个空格(或更多)。我似乎无法重新发布代码。我测试的代码与最初评论中发布的代码完全相同,除了行:R['segments']=float(round(rollers[3]['segments']*roller_diameter/plate_diameter))这个评论系统非常烦人,我一直在发布不完整的评论!基本上,我运行的代码是完全相同的,除了我将初始代码中的[i]替换为上面引用的行中的[3](我的记事本++中的第21行)…我希望这有助于另一个道歉-我刚刚意识到我已将int改为float。有问题的行应该是:R['segments']=int(圆形(滚筒[3]['segments']*滚筒直径/板材直径)),谢谢DSM!谢谢你为我把它分解,今天下午我将尝试你的建议,你的解释是有意义的,谢谢你花时间访问com
rollers[i]['roller_diameter'] = read_diameter(i)