python学习之练习0726

1) 写一个方法要求该方法从控制台输入10个数字,且只能是输入的数字类型,其它类型的输入提示非法字符,并把这10个数字分10行写入到一个文件,
2) 写一个方法要求从上述文件内把这10个数字读出来并且存储到一个集合或者元祖等存储结构体
3) 针对以上存储的10个数字排序,并打印
4) 排序要求两种算法实现,冒泡和二叉树排序(可以只写一种)

以下为三种逻辑实现方式:

class sortarr:

    def __init__(self):
        print('success')
    def initnum(self):
        print("请输入10个数字,并且以逗号间隔:")
        str=input()
        strarr=str.split(",")              #分割字符串
        for str in strarr:                   #利用for循环遍历判断输入的是否为数字
            if str.isdigit()==True and len(strarr)==10:
                continue
            elif str.isdigit()==True and len(strarr)!=10:
                sortarr.initnum(self)

            else:
                print('您输入的有非法字符,请重新输入:')
                sortarr.initnum(self)
        self.sortnum(strarr)           #调用sortnum方法排序
       #把输入的数字写到文件中
        myFile = open("sortFile11.txt", "w+")
        for st in strarr:
            myFile.write(st)
            myFile.write("\n")
        # print(myFile.read(10))myFile.close()
        myFile.close()
        #读出文件内容并存储到集合中
        fo=open("sortFile11.txt", "r+")
        s=fo.read(10)         
        se=set(s)
        print(se.remove('\n'))         #多个\n
        fo.close()

    def sortnum(self,strarr):
        for i in range(len(strarr)-1):
            for j in range (len(strarr)-1-i):
                if strarr[j]>strarr[j+1]:
                    strarr[j],strarr[j+1]=strarr[j+1],strarr[j]
        print(strarr)

hehe=sortarr()
hehe.initnum()
class sortnum:
    def  __init__(self,flag):
        self.flag=flag                  #进入循环标识
        print("success")
    def sortArr(self):
      while self.flag == 1 :
          print("请输入10个数字,并且以空格间隔:")
          str=input()
          strArr=str.split(" ")
          for str in strArr:
              if (str.isdigit())and len(strArr)==10:
                  self.flag = 0
                  continue
              elif (str.isdigit()) and len(strArr)!=10:
                  print('字符长度不符')
                  self.flag = 1
                  break
              else:
                  print("非法字符,请重新输入:")
                  self.flag = 1
                  break
      print("========", strArr)
      if self.flag==0:
          self.sortnum1(strArr)

    def sortnum1(self,strArr):
        for i in range(len(strArr)-1):
            for j in range (len(strArr)-1-i):
                if strArr[j]>strArr[j+1]:
                    strArr[j],strArr[j+1]=strArr[j+1],strArr[j]
        print(strArr)
hehe=sortnum(1)
hehe.sortArr()
class sortnum:
    def  __init__(self):
             #进入循环标识
        print("创建对象成功!!")
        #排序方法
    def sortArr(self,length):
      while True:
          print("请输入",length,"个数字,并且以空格间隔:")
          str=input();
          strArr=str.split(" ")
          if self.chekcnum(strArr) and self.checkLen(strArr,length):
              self.sortnum1(strArr)
              break

    #校验输入的内容是否是数字格式的字符串
    def chekcnum(self,strArr):
        flag=1
        for str in strArr:
            if str.isdigit()==1:
                flag = 0
                continue
            else:
                flag=1
        if flag==1:
            return  False
        else:
            return  True

    # 校验输入的内容长度是否合法
    def checkLen(self,strArr,length):
        flag = 1
        for str in strArr:
            if len(strArr) == length:
                flag = 0
                continue
            else:
                flag = 1
        if flag == 1:
            return False
        else:
            return True
    def sortnum1(self,strArr):
        for i in range(len(strArr)-1):
            for j in range (len(strArr)-1-i):
                if strArr[j]>strArr[j+1]:
                    strArr[j],strArr[j+1]=strArr[j+1],strArr[j]
        print(strArr)

hehe=sortnum()
hehe.sortArr(5)
#hehe.sortnum1(['1', '3', '2', '6', '5'])

  第三种方法最灵活,可输入任意位数进行排序

posted @ 2018-07-27 20:46  一只小妖  阅读(122)  评论(0)    收藏  举报