鱼C论坛

 找回密码
 立即注册
查看: 2183|回复: 10

[已解决]零基础学Python直线长度计算问题

[复制链接]
发表于 2020-2-9 10:23:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import math
class Point():
    def __init__(self):
        a1=[]
        a2=[]

        self.a1=a1.append(input('请输入点A1的坐标:例如2,3'))
        self.a2=a2.append(input('请输入点A2的坐标:'))

class Line(Point):
    def __init__(self):
        Point.__init__(self)
    def getlen(self):
        self.length=math.sqrt((self.a1[0]-self.a2[0])**2+(self.a1[1]-self.a2[1])**2)
        return self.length

        
l=Line()
l.getlen()

报错
Traceback (most recent call last):
  File "E:\python\My program\newq.py", line 20, in <module>
    l.getlen()
  File "E:\python\My program\newq.py", line 15, in getlen
    self.length=math.sqrt((self.a1[0]-self.a2[0])**2+(self.a1[1]-self.a2[1])**2)
TypeError: 'NoneType' object is not subscriptable
最佳答案
2020-2-9 10:58:00
思考以后看答案哦[
你程序的思路错误
输入的是形如a,b的字符串存入到了列表中,所以你读取a,b数据的过程是错误的

例如

  1. a=[]
  2. b='1,2'
  3. a.append(b)
复制代码



若要获得1,则需要
  1. a[0][0]
复制代码


提示至此,自己思考哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-9 10:58:00 | 显示全部楼层    本楼为最佳答案   
思考以后看答案哦[
你程序的思路错误
输入的是形如a,b的字符串存入到了列表中,所以你读取a,b数据的过程是错误的

例如

  1. a=[]
  2. b='1,2'
  3. a.append(b)
复制代码



若要获得1,则需要
  1. a[0][0]
复制代码


提示至此,自己思考哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-9 11:01:29 From FishC Mobile | 显示全部楼层
我觉得输入这一步应该放到主程序中,然后以某种形式传给类
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 11:03:34 | 显示全部楼层
  1. import math

  2. A = input('请输入点A的坐标:例如2,3:')
  3. B = input('请输入点B的坐标:')
  4. x1 = int(A[0])
  5. y1 = int(A[2])
  6. x2 = int(B[0])
  7. y2 = int(B[2])

  8. length =math.sqrt((y2-y1)**2+(x2-x1)**2)
  9. print(length)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 11:22:54 | 显示全部楼层
本帖最后由 shangjiecat 于 2020-2-9 11:52 编辑
  1. import math
  2. class Point():
  3.     def __init__(self):
  4.         a1=[]
  5.         a2=[]
  6.         a1.append(input('请输入点A1的坐标,例如2,3:').split(',')) #append方法无法直接给对象赋值(返回None)
  7.         a2.append(input('请输入点A2的坐标:').split(',')) #如果真像你写的那么输入,则列表只会传入一个元素
  8.         #(如"2,3"则 a1 = ['2,3']),我用split把这个字符串隔开了
  9.         self.a1 = a1
  10.         self.a2 = a2
  11.         

  12. class Line(Point):

  13.     def __init__(self):
  14.         super().__init__()
  15.         
  16.     def getlen(self):
  17.         self.length=math.sqrt((int(self.a1[0][0])-int(self.a2[0][0]))**2+
  18.                               (int(self.a1[0][1])-int(self.a2[0][1]))**2)
  19.         return self.length

  20.         
  21. l=Line()
  22. print(l.getlen())
  23. #不用print,则无法看到最后结果
复制代码


测试了楼主的代码,并根据你的思路进行修改,要多思考一下哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 15:23:41 | 显示全部楼层
shangjiecat 发表于 2020-2-9 11:22
测试了楼主的代码,并根据你的思路进行修改,要多思考一下哦

啊我脑子瓦特了;;;
其实如果不用split分割的话,取y的时候直接取a[2]就可以~
谢谢谢谢啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 16:37:34 | 显示全部楼层
123456543212345 发表于 2020-2-9 15:23
啊我脑子瓦特了;;;
其实如果不用split分割的话,取y的时候直接取a[2]就可以~
谢谢谢谢啦~~


嗯,好像也不是不行,这样就是用字符串序列
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 20:15:47 | 显示全部楼层
123456543212345 发表于 2020-2-9 15:23
啊我脑子瓦特了;;;
其实如果不用split分割的话,取y的时候直接取a[2]就可以~
谢谢谢谢啦~~

嗯,我又回来了,想了想这样写还是会有问题,就是你这样索引基于的前提条件是用户输入的都是一位数,那万一用户输了比如0,5和12,0怎么办?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 20:30:43 | 显示全部楼层
shangjiecat 发表于 2020-2-9 20:15
嗯,我又回来了,想了想这样写还是会有问题,就是你这样索引基于的前提条件是用户输入的都是一位数,那万 ...

不会啊~

a[2]是a里的第三个元素,和几位数没关系的

你可以试试~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 21:06:36 | 显示全部楼层
123456543212345 发表于 2020-2-9 20:30
不会啊~

a[2]是a里的第三个元素,和几位数没关系的

可能是我没懂你的写法,你是分开输入点1的x,y和点2的x,y,并把它放入一个列表了,是吗?如果是这样那确实没问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-10 12:06:36 | 显示全部楼层
shangjiecat 发表于 2020-2-9 21:06
可能是我没懂你的写法,你是分开输入点1的x,y和点2的x,y,并把它放入一个列表了,是吗?如果是这样那确实 ...

没错~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-3 18:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表