gpt4 book ai didi

python - 不能将序列乘以 float 类型的非 int 吗?

转载 作者:行者123 更新时间:2023-12-01 05:55:53 26 4
gpt4 key购买 nike

我被要求编写一个模拟器,最终目标是看看有多少墨水最终落在大约 15 个滚筒链条末端的圆筒上。我目前正在尝试建立一个定义滚筒的字典。由此,我想编写一个函数,它将接受用户输入“roller_diameter”,找到给定直径与固定直径的比率,并将其转换为整数“段”。我不是程序员(我正在使用互联网资源学习Python[2.7])并且正在努力解决 TypeError: can't multipy sequence by non-int type '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'

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

最佳答案

在这一行中:

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

你拿rollers[3]['segments'] ,乘以 roller_diameter ,然后除以plate_diameter 。这会给你错误消息

TypeError: can't multiply sequence by non-int of type 'float'

这告诉我,您正在尝试将序列(例如列表或元组)乘以 float 。如果我理解正确的话,rollers[3]['segments']仍然是一个空列表,并且您试图将其乘以 roller_diameter ,这是一个 float 。我不确定你想在这里做什么,因为你从未将任何内容分配给 segments关键,据我所知。

其他一些注意事项:

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

这一行给出了一个语法错误,所以显然这不是您运行的代码。请始终将您实际运行的代码复制并粘贴到框中,否则人们必须区分“OP 代码中的错误”和“OP 在 StackOverflow 上编辑代码的方式中的错误”。

R = rollers[i]  

我认为您认为这意味着R现在将始终指向 i rollers 中的第一个元素,但这不是 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]而不是使用rollers[i] ,所以也许我错了——但请记住你的 R总是rollers[3] 。要么使用rollers[i]在循环中或设置 R = rollers[i] 在循环内,以便该行获得新值 i每次执行时。

关于python - 不能将序列乘以 float 类型的非 int 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12597464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com