横向矩形打印技术实现与应用

版权申诉
0 下载量 65 浏览量 更新于2024-10-17 收藏 3KB RAR 举报
资源摘要信息:"本资源是一个实践练习题,其主要目的是帮助用户通过编程实践掌握如何使用编程语言打印出具有指定宽度和高度的横向矩形。编程实现该功能通常涉及基础的循环结构、条件判断以及字符串操作等知识。" 知识点详细说明: 1. 循环结构的理解与应用: - 在编程中,循环结构是实现重复操作的基本控制结构之一。常见的循环结构包括for循环、while循环和do-while循环。 - 本练习中,需要使用循环结构来重复打印一定数量的字符以形成矩形的宽度。 - 用户需要根据输入的宽度值,通过循环来控制每行字符的打印次数。 2. 条件判断的运用: - 条件判断是编程中的核心概念,用于根据不同的情况执行不同的代码分支。 - 在打印矩形的上下文中,虽然主要使用循环来完成打印,但在某些编程语言中,条件判断可能被用于控制是否进入打印一行字符的循环或决定打印的字符。 - 例如,在某些实现中,可能需要判断是否为矩形的最后一行,以决定是否打印特定的字符或字符串。 3. 字符串操作: - 字符串是编程中表示文本数据的数据类型。打印矩形需要对字符串进行操作,如连接多个相同的字符或子字符串来构建矩形的一行。 - 了解如何在编程语言中处理字符串(如字符串连接、重复等操作)对于完成这个任务至关重要。 4. 输入输出理解: - 程序通常需要与用户或环境进行交互,包括从用户那里获取输入和向用户显示输出。 - 本练习要求从用户那里获取矩形的宽高,这通常涉及到标准输入(如键盘输入)的处理。 - 此外,程序需要将构建的矩形输出到控制台或屏幕,这涉及到标准输出的操作。 5. 算法逻辑构建: - 编程解决问题通常需要将问题分解为一系列可操作的步骤或指令,这构成了算法。 - 在本练习中,算法逻辑应包括获取输入、根据输入计算循环次数、打印矩形的每一行,以及循环的结束。 6. 调试与测试: - 编写代码后,需要通过调试和测试来验证程序的正确性。 - 用户应编写测试案例,包括边界情况(例如宽度或高度为1的情况),以及正常情况下的矩形打印,确保程序能够正确无误地运行。 7. 编程语言特定的知识: - 根据用户使用的编程语言的不同,实现打印矩形的细节可能有所不同。 - 例如,在Python中可能会用到print()函数和字符串的乘法操作来简化打印过程;而在C或C++中可能需要使用printf()函数或标准库中的相关函数来实现。 8. 版本控制和文件管理: - 虽然本练习的文件名仅表明了一个单一的文件,但在实际的软件开发实践中,文件管理是必不可少的技能。 - 学习如何合理命名文件、管理项目中的不同文件以及使用版本控制系统(如Git)来维护代码的历史记录和协作开发同样重要。 通过完成本练习,用户能够加深对以上知识点的理解,并在实际编程中更加熟练地运用这些技能。

代码改进:import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt from sklearn.datasets import make_blobs def distEclud(arrA,arrB): #欧氏距离 d = arrA - arrB dist = np.sum(np.power(d,2),axis=1) #差的平方的和 return dist def randCent(dataSet,k): #寻找质心 n = dataSet.shape[1] #列数 data_min = dataSet.min() data_max = dataSet.max() #生成k行n列处于data_min到data_max的质心 data_cent = np.random.uniform(data_min,data_max,(k,n)) return data_cent def kMeans(dataSet,k,distMeans = distEclud, createCent = randCent): x,y = make_blobs(centers=100)#生成k质心的数据 x = pd.DataFrame(x) m,n = dataSet.shape centroids = createCent(dataSet,k) #初始化质心,k即为初始化质心的总个数 clusterAssment = np.zeros((m,3)) #初始化容器 clusterAssment[:,0] = np.inf #第一列设置为无穷大 clusterAssment[:,1:3] = -1 #第二列放本次迭代点的簇编号,第三列存放上次迭代点的簇编号 result_set = pd.concat([pd.DataFrame(dataSet), pd.DataFrame(clusterAssment)],axis = 1,ignore_index = True) #将数据进行拼接,横向拼接,即将该容器放在数据集后面 clusterChanged = True while clusterChanged: clusterChanged = False for i in range(m): dist = distMeans(dataSet.iloc[i,:n].values,centroids) #计算点到质心的距离(即每个值到质心的差的平方和) result_set.iloc[i,n] = dist.min() #放入距离的最小值 result_set.iloc[i,n+1] = np.where(dist == dist.min())[0] #放入距离最小值的质心标号 clusterChanged = not (result_set.iloc[:,-1] == result_set.iloc[:,-2]).all() if clusterChanged: cent_df = result_set.groupby(n+1).mean() #按照当前迭代的数据集的分类,进行计算每一类中各个属性的平均值 centroids = cent_df.iloc[:,:n].values #当前质心 result_set.iloc[:,-1] = result_set.iloc[:,-2] #本次质心放到最后一列里 return centroids, result_set x = np.random.randint(0,100,size=100) y = np.random.randint(0,100,size=100) randintnum=pd.concat([pd.DataFrame(x), pd.DataFrame(y)],axis = 1,ignore_index = True) #randintnum_test, randintnum_test = kMeans(randintnum,3) #plt.scatter(randintnum_test.iloc[:,0],randintnum_test.iloc[:,1],c=randintnum_test.iloc[:,-1]) #result_test,cent_test = kMeans(data, 4) cent_test,result_test = kMeans(randintnum, 3) plt.scatter(result_test.iloc[:,0],result_test.iloc[:,1],c=result_test.iloc[:,-1]) plt.scatter(cent_test[:,0],cent_test[:,1],color = 'red',marker = 'x',s=100)

2023-05-30 上传