日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]

發布時間:2023/12/2 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

練習內容:判斷多個坐標是否在同一條直線上

完整代碼和注釋如下

print('請輸入幾個點的橫縱坐標,程序將會返回這幾個點是否在同一條直線上')

def coor_nums():#獲得每個值的橫縱坐標

int_list=[]#初始化坐標列表

wrong_list=[]#初始化錯誤列表

judgement=''#判斷是否需要修正坐標值

while True:

nums=input('應以x1 y1 x2 y2...的格式輸入:\n')

num_list=nums.split()

if len(num_list)%2!=0:#如果輸入的坐標長度不是偶數 說明輸入錯誤

print('請輸入每個點的橫縱坐標')

continue

for n in num_list:#對輸入的每個值

try:

num=float(n)

int_list.append(num)#嘗試將輸入的值轉為浮點類型添加到坐標列表中

except Exception as e:#如果發生異常

print('你輸入的第'+str(num_list.index(n)+1)+'個值為:'+n+',它不是數字 請按照要求輸入')#提示修改

wrong_list.append([num_list.index(n),n])#將錯誤坐標值的索引和錯誤坐標值都添加到錯誤列表

int_list.append(n)#同時也將錯誤坐標值添加到坐標列表 便于修改

judgement='need'#判斷為need 即需要修改

return int_list,wrong_list,judgement

int_list,wrong_list,judgement=coor_nums()

def adjust(wrong_list):#調整錯誤列表并且修改對應坐標列表

right_list=[]#初始化修改后的列表

for wrong_num in wrong_list:#對于每個錯誤值

while True:#循環修改直到修改正確

right_num_input=input('正在修改第{}個值,原值為:{},現值為:\n'.format(wrong_num[0]+1,wrong_num[1]))

try:

right_num=float(right_num_input)

right_list.append([wrong_num[0],right_num])#將修改值添加到正確列表

break

except Exception as e:

print('修改值仍然錯誤,請再次修改')

continue

return right_list

def k_line_judge(int_list,wrong_list,judgement):#判斷輸入點是否在同一條直線

if judgement=='need':#如果為need則需要調整初次輸入的坐標值

right_list=adjust(wrong_list)

for n in right_list:

int_list[n[0]]=n[1]#把每個修改后的值賦予坐標列表

point_judge=list(set(int_list))

if len(point_judge)==1:#如果輸入的每個值相同 說明是同一個點

return print('所有點是同一個點 為({},{})'.format(point_judge[0],point_judge[0]))

k_list=[]#初始化直線斜率列表

for n in range(3,len(int_list),2):#處理坐標列表

try:

k=(int_list[n]-int_list[n-2])/(int_list[n-1]-int_list[n-3])#斜率公式k=(y2-y1)/(x2-x1)

k_list.append(k)#嘗試向斜率列表中增加每兩個點的斜率

except ZeroDivisionError as e:#如果出現了x2-x1=0的情況 暫時先略過

pass

if n==len(int_list)-1 and len(k_list)==0:#如果循環到最后 直線斜率列表長度仍然為0

return print('所有點在直線x={}上'.format(int_list[0]))#說明輸入的坐標都在直線x=x1上

set_k_list=list(set(k_list))

if len(set_k_list)==1 and set_k_list[0]==0:#如果直線斜率列表長度為1 并且k=0 說明輸入坐標都在y=y1上

print('所有點在直線y={}上'.format(int_list[1]))

elif len(set_k_list)==1 and set_k_list[0]!=0:#如果直線斜率列表長度為1 并且k不等于0

line_k=set_k_list[0]#說明在一條y=kx+b的直線上

line_b=int_list[1]-int_list[0]*line_k#b=y-kx

if float(line_b)<=0:#分為b>0和b<=0兩種打印情況

print('所有點在直線y={}x{}上'.format(round(line_k,5),line_b))

else:

print('所有點在直線y={}x+{}上'.format(round(line_k,5),line_b))

elif len(set_k_list)!=1:#如果斜率列表長度不為1說明不在同一條直線上

print('所有點不在同一條直線上')

k_line_judge(int_list,wrong_list,judgement)

總結

以上是生活随笔為你收集整理的python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。