VanessaXD 发表于 2020-9-29 18:37:09

python字符串替换问题

本帖最后由 VanessaXD 于 2020-9-29 22:41 编辑

请教一下各位大神,我这串代码有什么问题应该改正?为什么在将输入的浮点数中的奇数替换成8的时候,一部分可以替换,一部分不行?比如说100.5可以被替换成800.8,而100.3,或者100.7,只能被替换成800.3和800.7?
numlist=[]
list1=[]
new=''
while True:
    a=input('')
    if a=='x':
      break
    else:
      numlist.insert(0,a)

for i in range(len(numlist)):
    for j in range(len(numlist)):
      while True:
            if numlist=='1' or numlist=='3' or numlist=='5' or numlist=='7' or numlist=='9':
                new=str(numlist)[:j]+'8'+str(numlist)
                print(new)
                del numlist
                numlist.insert(0,new)
                continue
            else:
                break

print(numlist)


n=len(numlist)
for z in range (n):
    c=0
    for l in range (0,n-1-z):
      if numlist > numlist:
            numlist,numlist = numlist,numlist
            c+=1
    if 0==c:
      break

for u in numlist:
    print(u)

VanessaXD 发表于 2020-9-29 18:38:33

题目要求

疾风怪盗 发表于 2020-9-29 18:48:42

你贴的代码,就缩进有点问题,其他运行正常啊,然后不知道你是不是要保留输入的内容还是不保留,每次都输出一个的话就把前三句放到循环里重置为空,要保留的话就放循环外

while True:
    numlist = []
    list1 = []
    new = ''
    a=input('请输入浮点数')
    if a=='x':
      break
    else:
      numlist.insert(0,a)

    for i in range(len(numlist)):
      for j in range(len(numlist)):
            while True:
                if numlist=='1' or numlist=='3' or numlist=='5' or numlist=='7' or numlist=='9':
                  new=str(numlist)[:j]+'8'+str(numlist)
                  #print(new)
                  del numlist
                  numlist.insert(0,new)
                  continue
                else:
                  break

    #print(numlist)


    n=len(numlist)
    for z in range (n):
      c=0
      for l in range (0,n-1-z):
            if numlist > numlist:
                numlist,numlist = numlist,numlist
                c+=1
      if 0==c:
            break

    for u in numlist:
      print(u)

疾风怪盗 发表于 2020-9-29 18:57:45

你只要把奇数替换成8?那你写的也太复杂了吧,下面这样就行了
while True:
    new = ''
    a = input('请输入数字:')
    if a == 'x':
      print('退出。')
      break
    else:
      list1 = list(a)
      for num in range(len(list1)):
            if (list1.isdigit() == True) and (int(list1) % 2 != 0):
                  list1 = '8'
            new = new + list1
      print(new)

VanessaXD 发表于 2020-9-29 21:42:24

疾风怪盗 发表于 2020-9-29 18:57
你只要把奇数替换成8?那你写的也太复杂了吧,下面这样就行了

换完八,还要比大小,再输出

VanessaXD 发表于 2020-9-29 21:45:39

本帖最后由 VanessaXD 于 2020-9-29 21:51 编辑

疾风怪盗 发表于 2020-9-29 18:57
你只要把奇数替换成8?那你写的也太复杂了吧,下面这样就行了

替换成8,之后还要比大小,就是先输入几个数,直到x停下,奇数换成8,再按小到大排列输出,输入几个数,输出也是这么多个数

疾风怪盗 发表于 2020-9-29 22:17:00

本帖最后由 疾风怪盗 于 2020-9-29 22:18 编辑

VanessaXD 发表于 2020-9-29 21:45
替换成8,之后还要比大小,就是先输入几个数,直到x停下,奇数换成8,再按小到大排列输出,输入几个数 ...

这样?
def replace_num(num):
    for temp in num:
      if (temp.isdigit() == True) and (int(temp) % 2 != 0):
            num=num.replace(temp, '8')
    return num


list=[]
while True:
    a = input('请输入数字:')
    if a == 'x':
      print('退出。')
      break
    else:
      list.append(replace_num(a))

list.sort(key=lambda x:eval(x),reverse=False)
for a in list:
    print(a)

VanessaXD 发表于 2020-9-29 22:24:20

疾风怪盗 发表于 2020-9-29 22:17
这样?

我试了这串代码,它还是输入一个输出一个诶,题目要求输入完4,5个数,直到输入x才停止,紧接着从小到大排。比如
(输入)100.1
100.2
100.3
100.4
x
(输出)800.2
800.4
800.8
800.8
然后比较尴尬的一点因为是初学题目不让用def,append,sort这类代码。。。只能不停的for循环,while循环

疾风怪盗 发表于 2020-9-29 22:33:02

本帖最后由 疾风怪盗 于 2020-9-29 22:36 编辑

VanessaXD 发表于 2020-9-29 22:24
我试了这串代码,它还是输入一个输出一个诶,题目要求输入完4,5个数,直到输入x才停止,紧接着从小到大 ...

{:10_312:}太麻烦了吧。。。。。。。
replace能用吧?还有哪些不能用的?
你这题目到底是什么?如果不能一个一个输入,那你写的一开始就不对啊

VanessaXD 发表于 2020-9-29 22:46:51

疾风怪盗 发表于 2020-9-29 22:33
太麻烦了吧。。。。。。。
replace能用吧?还有哪些不能用的?
你这题目到底是什么?如果 ...

那可以请教一下该怎么写吗?replace也不能用{:10_266:}除了最基础的代码好像都不可以用{:10_266:}不可以把input的东西放进一个列表里吗?题目是我新上传在在1楼的图片,我没有办法在回复发图片。我担心解释不清楚

疾风怪盗 发表于 2020-9-29 23:33:42

VanessaXD 发表于 2020-9-29 22:46
那可以请教一下该怎么写吗?replace也不能用除了最基础的代码好像都不可以用不可 ...

你这题意是怎么理解的?
没说要input在一行上啊
而且列表操作不是也可以用的么?
列表常用操作:
https://blog.csdn.net/hesongzefairy/article/details/104209124

怎么就append、sort不能用呢。。。。。

你这是学到哪里有的这题目?

疾风怪盗 发表于 2020-9-29 23:38:43

不用replace就换一种,不用sort就用冒泡排序,和你写的也一样,但是你说不用append,那怎么添加进列表,那能不能用split呢?
看你这题,其实我7楼回复的就符合题意,要复杂点下面这样也可以
list1 = []
while True:
    a = input('请输入浮点:')
    if a == 'x':
      print('退出。')
      break
    else:
      new = ''
      for temp in list(a):
            if (temp != '.') and (int(temp) % 2 != 0):
                temp = '8'
            new = new + temp
      list1.append(float(new))

for i in range(len(list1)):
    for j in range(0, len(list1) - i - 1):
      if list1 > list1:
            list1, list1 = list1, list1

for i in list1:
    print(i)

VanessaXD 发表于 2020-9-30 00:10:23

疾风怪盗 发表于 2020-9-29 23:38
不用replace就换一种,不用sort就用冒泡排序,和你写的也一样,但是你说不用append,那怎么添加进列表,那 ...

用insert代替append?就是比较麻烦。。
成了,就是这样!感谢大神!这是大学作业,快到deadline了,实在不知道该怎么改,只能发上来问问。
真的真的非常感谢!!!

心驰神往 发表于 2020-10-7 15:54:34

学习
页: [1]
查看完整版本: python字符串替换问题