鱼C论坛

 找回密码
 立即注册
查看: 2459|回复: 19

[已解决]【删除字符】PTA老师布置的python题,用两种方法怎么都做不对鸭?

[复制链接]
发表于 2018-11-8 15:01:13 | 显示全部楼层 |阅读模式
5鱼币
删除字符
输入一个字符串 str,再输入要删除字符 c,将字符串 str 中出现的所有字符 c 删除。

输入格式:
在第一行中输入一行字符 在第二行输入待删除的字符

输出格式:
在一行中输出删除后的字符串

输入样例:
在这里给出一组输入。例如:

Bee
E
输出样例:
在这里给出相应的输出。例如:

result: B
以上是问题描述
下面是我的两种方法但都没能得满分
0.
a=input()
b=input()
m=" ".join(b)
p=m.split(" ")
y=a
for i in p:
    y=y
    g=i.lower()
    d=i.upper()
    e=y.replace(g," ")
    f=e.replace(d," ")
    y=f.replace(" ","")
print("result: {}".format(y))
1.
a=input()
b=input()
if b.islower() == True:
    c = a.replace(b,'')
    f = c.replace(b.upper(),'')
else:
    c = a.replace(b,'')
    f = c.replace(b.lower(),'')
print('result:',f)
求指出哪里错误,和改进代码,谢谢解答!
最佳答案
2018-11-8 15:01:14
本帖最后由 Legend丶Hu 于 2018-11-11 23:31 编辑

对于你的代码我测了测发现其中如果有空格就不对,如果说要在你的代码中进行改进的话我觉得还是什么方法简单就学习什么方法吧,没必要对一串代码钻牛角尖的,也主要是你只要知道这个问题的存在,你自己修改自己写的代码这也是锻炼自己。
  1. a = input()
  2. b = input()
  3. print("起初 %d"  % len(a))
  4. new = ""
  5. b = b.upper()
  6. len1 = len(a)
  7. i = 0
  8. while i < len1:
  9.     if a[i].upper() == b:
  10.         i += 1
  11.     else:
  12.         new += a[i]
  13.         i += 1
  14. print("之后 %d"  % len(new))
  15. print ("result:%s" % new)
复制代码


PS:还有就是你这个题目最好把链接发出来,以便大家提交检测。这样效率会高一些

最佳答案

查看完整内容

对于你的代码我测了测发现其中如果有空格就不对,如果说要在你的代码中进行改进的话我觉得还是什么方法简单就学习什么方法吧,没必要对一串代码钻牛角尖的,也主要是你只要知道这个问题的存在,你自己修改自己写的代码这也是锻炼自己。 PS:还有就是你这个题目最好把链接发出来,以便大家提交检测。这样效率会高一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-8 15:01:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Legend丶Hu 于 2018-11-11 23:31 编辑

对于你的代码我测了测发现其中如果有空格就不对,如果说要在你的代码中进行改进的话我觉得还是什么方法简单就学习什么方法吧,没必要对一串代码钻牛角尖的,也主要是你只要知道这个问题的存在,你自己修改自己写的代码这也是锻炼自己。
  1. a = input()
  2. b = input()
  3. print("起初 %d"  % len(a))
  4. new = ""
  5. b = b.upper()
  6. len1 = len(a)
  7. i = 0
  8. while i < len1:
  9.     if a[i].upper() == b:
  10.         i += 1
  11.     else:
  12.         new += a[i]
  13.         i += 1
  14. print("之后 %d"  % len(new))
  15. print ("result:%s" % new)
复制代码


PS:还有就是你这个题目最好把链接发出来,以便大家提交检测。这样效率会高一些

首先这是你的代码输出的结果,如果输入的字符串中有空格就凉了,因为你有一个split(" ")

首先这是你的代码输出的结果,如果输入的字符串中有空格就凉了,因为你有一个split(" ")

这是我的代码我感觉应该可以过

这是我的代码我感觉应该可以过

可以

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

使用道具 举报

发表于 2018-11-8 15:29:36 | 显示全部楼层
如果第二行输入仅是一个字符可以这样:
  1. string = input('输入一行字符: ')
  2. char1 = input('待删除的字符: ')
  3. char2 = char1.lower() if char1.isupper() else char1.upper()
  4. string = string.replace(char1, '')
  5. string = string.replace(char2, '')
  6. print(string)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-8 16:42:31 | 显示全部楼层
冬雪雪冬 发表于 2018-11-8 15:29
如果第二行输入仅是一个字符可以这样:

谢谢了,但是还是没符合题目要求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-9 21:05:34 | 显示全部楼层
本帖最后由 xxt 于 2018-11-9 21:17 编辑

题目的范围很广啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-9 22:39:14 | 显示全部楼层
本帖最后由 前路 于 2018-11-9 22:49 编辑

我看了下题目:
坑点:
1,无论大小写都要删除;但是内置函数是区分大小写的
2,输入的字符可能是 “  ”,数字,也可能是子串,但题目说了是字符。
所以对于以上情况:
先不管三七二十一,先用内置replace替换一次小写的,然后再替换一次大写的,这样就不会有遗漏。
其次对于内置函数replace是支持字符和子串的的替换的。

mystr = input()
replace_char = input()

mystr = mystr.replace(replace_char.lower(),"")
mystr = mystr.replace(replace_char.upper(),"")

print("result:"+ mystr)

还有就是楼主你的代码可读性有点那啥,我看了很多遍硬是被你的变量搞蒙了

最后对于楼主你得没有的满分的问题:
  先考虑你的代码是否在满足基本测试下还存在特殊情况未处理,
  其次看看测试系统是否存在内存限制和运行限制,
  最后在考虑优化代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-9 22:49:41 | 显示全部楼层
我看了下题目:
坑点:
1,无论大小写都要删除;但是内置函数是区分大小写的
2,输入的字符可能是 “  ”,数字,也可能是子串,但题目说了是字符。
所以对于以上情况:
先不管三七二十一,先用内置replace替换一次小写的,然后再替换一次大写的,这样就不会有遗漏。
其次对于内置函数replace是支持字符和子串的的替换的。

mystr = input()
replace_char = input()

mystr = mystr.replace(replace_char.lower(),"")
mystr = mystr.replace(replace_char.upper(),"")

print("result:"+ mystr)

还有就是楼主你的代码可读性有点那啥,我看了很多遍硬是被你的变量搞蒙了

最后对于楼主你得没有的满分的问题:
  先考虑你的代码是否在满足基本测试下还存在特殊情况未处理,
  其次看看测试系统是否存在内存限制和运行限制,
  最后在考虑优化代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-10 19:15:59 | 显示全部楼层
前路 发表于 2018-11-9 22:49
我看了下题目:
坑点:
1,无论大小写都要删除;但是内置函数是区分大小写的

谢谢你,虽然你的答案不对,但给了我很大启发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 00:06:39 | 显示全部楼层
wumingshi 发表于 2018-11-10 19:15
谢谢你,虽然你的答案不对,但给了我很大启发

不对?你好,对于出错的地方,能详细描述一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 06:39:35 | 显示全部楼层
  1. def choice(str1,string):
  2.     temp = []
  3.     for j in range(len(string)):
  4.         if str1 == string[j]:
  5.             temp.append(j)
  6.     return temp

  7. def final(lst,string):
  8.     m = ''
  9.     for i in lst:
  10.         m += string[i]
  11.     return m
  12.                
  13. while True:
  14.    
  15.     string = input('输入一行字符: ')
  16.     char1 = input('待删除的字符: ')
  17.     temp = []

  18.     for i in char1:
  19.         temp += choice(i,string)

  20.     templist = [i for i in range(len(string)) if i not in temp]

  21.     string = final(templist, string)

  22.     print(string)
  23.     x = input('终止?(press‘n’)')
  24.     if x == 'n': break
  25.         
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 09:10:40 | 显示全部楼层
过来顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-11 12:27:34 | 显示全部楼层
前路 发表于 2018-11-11 00:06
不对?你好,对于出错的地方,能详细描述一下吗?

我自己测试的确实也对,都符合要求,但就是在pta上报错

                               
登录/注册后可看大图


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-11 12:32:00 | 显示全部楼层

谢谢你的代码,但你这个不符合题目的意思,这个题我感觉我懂了很多种思路了,正确答案是什么已经不重要了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 13:15:24 | 显示全部楼层
wumingshi 发表于 2018-11-11 12:27
我自己测试的确实也对,都符合要求,但就是在pta上报错

好的收到谢谢,格式错误我就不清楚是啥问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 22:09:29 | 显示全部楼层
参考一下:
  1. import re
  2. mystr=input('输入一个字符串:')
  3. replace_char=input('输入要删除的字符:')
  4. pattern=re.compile('('+replace_char+')+',re.RegexFlag.I)
  5. mystr=pattern.sub('',mystr)
  6. print('result:'+mystr)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 23:03:48 | 显示全部楼层
str1 = input()

str2 = input()

newstr = ''

for i in range(len(str1)):
    if str1[i] != str.upper(str2[0]) and str1[i] != str.lower(str2[0]):
        newstr = newstr + str1[i]
        
print(newstr)

看了半天题目没看懂你在说啥看了楼上,如果是删除字符串里的字符的话,用循环会好点吧。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-12 23:16:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-12 23:18:20 | 显示全部楼层
Legend丶Hu 发表于 2018-11-11 23:13
对于你的代码我测了测发现其中如果有空格就不对,如果说要在你的代码中进行改进的话我觉得还是什么方法简单 ...

谢谢,但我们这个是老师自己出的题,在班级内的习题集,咱们论坛的人没法做。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-13 09:17:42 | 显示全部楼层
碰到字符串可以考虑用正则表达式。如果是PAT的环境下提供IDLE的话直接import re就行,这样子你想过滤啥字符串就过滤啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-13 09:18:43 | 显示全部楼层
碰到字符串可以考虑用正则表达式。如果是PAT的环境下提供IDLE的话直接import re就行,这样子你想过滤啥字符串就过滤啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 12:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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