鱼C论坛

 找回密码
 立即注册
查看: 1647|回复: 13

[已解决]python字符串替换问题

[复制链接]
发表于 2020-9-29 18:37:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i])):
        while True:
            if numlist[i][j]=='1' or numlist[i][j]=='3' or numlist[i][j]=='5' or numlist[i][j]=='7' or numlist[i][j]=='9':
                new=str(numlist[i])[:j]+'8'+str(numlist[i])[j+1:]
                print(new)
                del numlist[i]
                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[l] > numlist[l+1]:
            numlist[l],numlist[l+1] = numlist[l+1],numlist[l]
            c+=1
    if 0==c:
        break

for u in numlist:
    print(u)
最佳答案
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[j] > list1[j + 1]:
            list1[j], list1[j + 1] = list1[j + 1], list1[j]

for i in list1:
    print(i)
图像 29-9-20,下午6.27.jpg
图像 29-9-20,下午10.38.jpg
图像 29-9-20,下午10.39.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-29 18:38:33 | 显示全部楼层
题目要求
图像 29-9-20,下午6.27.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-29 18:48:42 | 显示全部楼层

回帖奖励 +1 鱼币

你贴的代码,就缩进有点问题,其他运行正常啊,然后不知道你是不是要保留输入的内容还是不保留,每次都输出一个的话就把前三句放到循环里重置为空,要保留的话就放循环外
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[i])):
            while True:
                if numlist[i][j]=='1' or numlist[i][j]=='3' or numlist[i][j]=='5' or numlist[i][j]=='7' or numlist[i][j]=='9':
                    new=str(numlist[i])[:j]+'8'+str(numlist[i])[j+1:]
                    #print(new)
                    del numlist[i]
                    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[l] > numlist[l+1]:
                numlist[l],numlist[l+1] = numlist[l+1],numlist[l]
                c+=1
        if 0==c:
            break

    for u in numlist:
        print(u)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[num].isdigit() == True) and (int(list1[num]) % 2 != 0):
                    list1[num] = '8'
            new = new + list1[num]
        print(new)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-29 21:42:24 | 显示全部楼层
疾风怪盗 发表于 2020-9-29 18:57
你只要把奇数替换成8?那你写的也太复杂了吧,下面这样就行了

换完八,还要比大小,再输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-29 21:45:39 | 显示全部楼层
本帖最后由 VanessaXD 于 2020-9-29 21:51 编辑
疾风怪盗 发表于 2020-9-29 18:57
你只要把奇数替换成8?那你写的也太复杂了吧,下面这样就行了


替换成8,之后还要比大小,就是先输入几个数,直到x停下,奇数换成8,再按小到大排列输出,输入几个数,输出也是这么多个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-29 22:24:20 | 显示全部楼层

我试了这串代码,它还是输入一个输出一个诶,题目要求输入完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循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-29 22:33:02 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-29 22:36 编辑
VanessaXD 发表于 2020-9-29 22:24
我试了这串代码,它还是输入一个输出一个诶,题目要求输入完4,5个数,直到输入x才停止,紧接着从小到大 ...


太麻烦了吧。。。。。。。
replace能用吧?还有哪些不能用的?
你这题目到底是什么?如果不能一个一个输入,那你写的一开始就不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


那可以请教一下该怎么写吗?replace也不能用除了最基础的代码好像都不可以用不可以把input的东西放进一个列表里吗?题目是我新上传在在1楼的图片,我没有办法在回复发图片。我担心解释不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

你这是学到哪里有的这题目?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[j] > list1[j + 1]:
            list1[j], list1[j + 1] = list1[j + 1], list1[j]

for i in list1:
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

用insert代替append?就是比较麻烦。。
成了,就是这样!感谢大神!这是大学作业,快到deadline了,实在不知道该怎么改,只能发上来问问。
真的真的非常感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-7 15:54:34 | 显示全部楼层

回帖奖励 +1 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表