如何在第一次迭代后阻止它退出?

如何解决如何在第一次迭代后阻止它退出?

我试图返回一个用新字符替换给定旧字符的语句,但循环在第一次迭代后一直退出

def test(s,old_ch,new_ch): 
    """returns the given input and replaces an old character with a new character""" 
    newstring = "" 
    for ch in s: 
        while (ch == old_ch): 
            newstring += new_ch  
            break
        while (ch != old_ch):
            newstring += ch 
            break 
        return newstring

我知道在 python 中已经定义了替换函数,但这是我被告知这样做的方式。 (与 for ch in s 位相同)

解决方法

你需要改变两件事。

  1. 不要使用 while 循环和中断,只需使用 if 语句。您的代码仍会以相同的方式工作,但会更具可读性。

  2. 将 return 语句移到 for 循环之外,即取消缩进。这样,在整个 for 循环执行完毕后才会返回 newstring,这是所需的行为。

完整的更正代码如下:

def test(s,old_ch,new_ch): 
    """returns the given input and replaces an old character with a new character""" 
    newstring = "" 
    for ch in s: 
        if (ch == old_ch): 
            newstring += new_ch  
        else:
            newstring += ch 
    return newstring

print(test("Megalovania","a","o"))
# Prints Megolovonio
,

for ch in s 语句用于遍历字符串的每个字符。 因此,for 循环内的 while 循环不是必需的。

def test(s,new_ch): 
    """returns the given input and replaces an old character with a new character""" 
    newstring = "" 
    for ch in s: 
        if(ch == old_ch): 
            newstring = newstring+new_ch  
            
        if(ch != old_ch):
            newstring = newstring + ch 
            
    return newstring

此代码执行您想要实现的预期工作。

,

试试这个,这样你会更好地理解迭代。

def test(s,new_ch): 
    newstring = "" 
    for ch in s:
        print(f"ch is {ch}")
        if (ch == old_ch):
            print(f"if condition is True for ch {ch} and old_ch {old_ch}")
            newstring += new_ch  
        else:
            print(f"elif condition is True for ch {ch} and old_ch {old_ch}")
            newstring += ch
    print(newstring)
    return newstring

调用这个函数

test("New to Python","t","y")

输出是

ch is N
elif condition is True for ch N and old_ch t
ch is e
elif condition is True for ch e and old_ch t
ch is w
elif condition is True for ch w and old_ch t
ch is  
elif condition is True for ch   and old_ch t
ch is t
if condition is True for ch t and old_ch t
ch is o
elif condition is True for ch o and old_ch t
ch is  
elif condition is True for ch   and old_ch t
ch is P
elif condition is True for ch P and old_ch t
ch is y
elif condition is True for ch y and old_ch t
ch is t
if condition is True for ch t and old_ch t
ch is h
elif condition is True for ch h and old_ch t
ch is o
elif condition is True for ch o and old_ch t
ch is n
elif condition is True for ch n and old_ch t

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?