v2.2 python 一/二次函數(shù)繪圖

橫坐標表不下 只能縱坐標了大概
輸入本來想改進 然后重寫了3邊 直到自己被循環(huán)繞暈 ABANDON
如果不知道 輸出結(jié)果的截圖我都是在windows的terminal里默認的powershell里截的
#介紹
print('fx可以繪制二次函數(shù)圖像和一次函數(shù)圖像\nv2.2更新內(nèi)容')
print('1 明確了a b c的作用')
print('2 添加了縱坐標顯示(準確度受圖像精度影響)')
print('3 去掉了讓變量下班的功能')
print('4 把更改字符也加進了是否確認')
print('修bug')
print('1 把一行沒用的代碼刪了')
#輸入
print("f(x)=ax2+bx+c")
def fxin(n):
? ? str(n)
? ? while True:
? ? ? ? try :
? ? ? ? ? ? a = input('%s=' % n)
? ? ? ? ? ? if a == '' or a == 'q':
? ? ? ? ? ? ? ? break
? ? ? ? ? ? a = float(a)
? ? ? ? ? ? break
? ? ? ? except:
? ? ? ? ? ? print('請輸入數(shù)字')
? ? ? ?
? ? return(a)
while True:
? ? a,b,c,x_min = fxin('a'),fxin('b'),fxin('c'),fxin('x min')
? ? while True:
? ? ? ? try :
? ? ? ? ? ? x_max = float(input('x max='))
? ? ? ? ? ? if x_max >= x_min:
? ? ? ? ? ? ? ? break
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? x_max = float('')
? ? ? ? except:
? ? ? ? ? ? print('請輸入數(shù)字,且x max不應(yīng)小于x min')
? ?
? ? while True:
? ? ? ? try :
? ? ? ? ? ? scale = float(input('圖像縮放'))
? ? ? ? ? ? if scale > 0:
? ? ? ? ? ? ? ? break
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? scale = float('')
? ? ? ? except ValueError:
? ? ? ? ? ? print('請輸入大于0的正數(shù)')
? ?
? ? #輸入輸出的字符
? ? print('輸入組成圖像的字符,默認為 ██ 和 2個空格 ?直接按回車保持默認')
? ? dot,space = input('請輸入代表點的字符(直接回車則默認██)'),input('請輸入代表空的字符(直接回車則默認2個空格)')
? ? if dot == '':
? ? ? ? dot = '██'
? ? if space == '':
? ? ? ? space = ' ?'
? ? #顯示輸入的函數(shù)
? ? print('\nf(x)=',end='')
? ? if a == 1:
? ? ? ? ? ? print('x2',end='')
? ? elif a == -1:
? ? ? ? ? ? print('-x2',end='')
? ? elif a != 0:
? ? ? ? ? ? print('%fx2' % a,end='')
? ? if b == 1 and a == 0:
? ? ? ? ? ? print('x',end='')
? ? elif b == 1 and a != 0:
? ? ? ? ? ? print('+x',end='')
? ? elif b == -1:
? ? ? ? ? ? print('-x',end='')
? ? elif b != 0:
? ? ? ? ? ? if b > 0 and a != 0:
? ? ? ? ? ? ? ? print('+%fx' % b,end='')
? ? ? ? ? ? if b > 0 and a == 0:
? ? ? ? ? ? ? ? print('%fx' % b,end='')
? ? ? ? ? ? if b <= 0:
? ? ? ? ? ? ? ? print('%fx' % b,end='')
? ? if a == 0 and b == 0:
? ? ? ? ? ? print(c,end = '')
? ? elif a != 0 or b != 0:
? ? ? ? ? ? if c > 0:
? ? ? ? ? ? ? ? print('+%f' % c,end = '')
? ? ? ? ? ? if c < 0:
? ? ? ? ? ? ? ? print(c,end = '')
? ? ? ? ? ? if c == 0:
? ? ? ? ? ? ? ? print('',end = '')
? ? print('\nx的最小值為%f,x的最大值為%f,函數(shù)圖像縮放為%f' % (x_min,x_max,scale))
? ? print('用%s表示點, 用%s表示空' % (dot,space))
? ? #確認
? ? while True:
? ? ? ? yrq = input('輸入y確認\n輸入r重新輸入\n輸入q退出\n')
? ? ? ? if yrq == 'y' or yrq == 'r':
? ? ? ? ? ? break
? ? ? ? elif yrq == 'q':
? ? ? ? ? ? exit()
? ? ? ? else:
? ? ? ? ? ? print('\n僅限輸入 y 或 r 或 q')
? ? if yrq == 'y':
? ? ? ? del yrq
? ? ? ? break ?
#計算函數(shù)值
fx,y_axis,x = [],[],x_min
while x <= x_max :
? ? fx.append(int(round((a*x**2+b*x+c)*scale,0)))
? ? y_axis.append(a*x**2+b*x+c)
? ? x+=(1/scale)
fx_sequence = list(set(fx))
fx_sequence.sort(reverse=True)
y_axis = list(set(y_axis))
y_axis.sort()
y_max,y_min= y_axis[len(y_axis)-1],y_axis[0]
y_distance = (y_max-y_min)/((y_max-y_min)*scale)
#繪圖
row = 0
for e_fxs in fx_sequence:
? ? count = fx.count(e_fxs)
? ? count2,plen,pplen,count3 = 0,0,0,0
? ? if fx_sequence.index(e_fxs) < (len(fx_sequence)-1):
? ? ? ?
? ? ? ? while count3 < (e_fxs - fx_sequence[fx_sequence.index(e_fxs)+1]): ? #多行
? ? ? ? ? ? count2,plen,pplen = 0,0,0
? ? ? ? ? ? print(round(y_max-row*y_distance,2),'\t\t',end='')
? ? ? ? ? ?
? ? ? ? ? ? while count2 < count: ? #單行
? ? ? ? ? ? ? ? plen = fx.index(e_fxs,pplen,len(fx))
? ? ? ? ? ? ? ? print(space*(plen-pplen), end='')
? ? ? ? ? ? ? ? print(dot, end='')
? ? ? ? ? ? ? ? pplen = plen+1
? ? ? ? ? ? ? ? count2+=1
? ? ? ? ? ?
? ? ? ? ? ? row+=1
? ? ? ? ? ? print('')
? ? ? ? ? ? count3+=1
? ? else:
? ? ? ? print(round(y_max-row*y_distance,2),'\t\t',end='')
? ? ? ? while count2 < count: ? #最后一行
? ? ? ? ? ? plen = fx.index(e_fxs,pplen,len(fx))
? ? ? ? ? ? print(space*(plen-pplen), end='')
? ? ? ? ? ? print(dot, end='')
? ? ? ? ? ? pplen = plen+1
? ? ? ? ? ? count2+=1

