逆转字符串 我的思路如下 但是不知道哪里出了错 python 思路就是 一个空字符串接受字符串传过来的
def reverse(s):
ns=' '
i,j=0,-1:
while i<len(s):
ns[i]=s[j]
i=i+1
j=j-1
return ns
思路没问题,但python里的字符串是不可修改的对象,所以不能通过索引为ns这个字符串赋值。如果沿用你的思路,可以把ns配置成一个与要翻转的字符串s等长的列表,函数返回的时候再把ns通过join方法转成字符串。
def reverse(s):
ns = [""]*len(s)
i, j = 0, -1
while i < len(s):
ns[i] = s[j]
i += 1
j -= 1
return "".join(ns)
其实更简单的办法就是逆向切片,一行代码完事
def reverse(s):
return s[::-1]
你可以这样做:
def reverse():
ns = "abc"
ns_list = list(ns)
i, j = 0, -1
while i < len(ns_list) // 2:
ns_list[i], ns_list[j] = ns_list[j], ns_list[i]
i = i + 1
j = j - 1
ns_reverse = ''.join(ns_list)
print(ns_reverse)
方法二:边读边处理
一般来说,由于停车场空间有限,我们不会采用一次性把所有学生都叫到停车场中,而是会一个一个地处理,这样可以节约内存空间。
import time
from typing import Iterator
def pick_one_student(dorm: str) -> Iterator[str]:
with open(dorm, "rt", encoding="utf8") as fin:
for student in fin:
yield student
def pick_sample(student: str) -> str:
time.sleep(0.01)
sample = f"{student.strip()}'s sample"
return sample
def process(dorm: str, sample_storeroom: str) -> None:
with open(sample_storeroom, "wt", encoding="utf8") as fout:
for student in pick_one_student(dorm):
sample = pick_sample(student)
fout.write(f"{sample}\n")
fout.flush()
if __name__ == "__main__":
process(
"student_names.txt",
"sample_storeroom.txt"
)
这里pick_one_student
函数中的返回值是用yield
返回的,一次只会返回一名同学。
不过,这种做法虽然确保了停车场不会满员,但是这种做法在人数特别多的时候就不再适合了。虽然可以保证完成任务,但由于每次只能采集一个同学,程序的执行并不高。特别是当你的CPU有多个核时,会浪费机器性能,出现一核有难,其它围观的现象。
由于题目中没有给出具体的代码,我无法查看原始代码的错误,但是给出一份通用的Python字符串逆转代码和优化建议供参考。
代码如下:
def reverse_string(s):
reversed_s = ""
for i in range(len(s)-1, -1, -1):
reversed_s += s[i]
return reversed_s
这是一个通用的Python字符串逆转函数,接收一个字符串作为参数,返回逆转后的结果。
优化建议:
def reverse_string(s):
return s[::-1]
def reverse_string(s):
return ''.join(reversed(s))
最终代码和测试样例如下:
def reverse_string(s):
return ''.join(reversed(s))
# 测试样例
print(reverse_string("hello")) # 输出olleh
print(reverse_string("Python is awesome")) # 输出emosewa si nohtyP
输出结果:
olleh
emosewa si nohtyP