【问题标题】:For loop conceptFor 循环概念
【发布时间】:2023-01-17 23:14:11
【问题描述】:
def domain(email, old_domain, new_domain):
    if "@" + old_domain in email:
        index = email.index("@" + old_domain)
        new_email = email[:index] + "@" + new_domain
        return new_email
    return email
    email = ['sandeep@yahoo.com', 'maini@gmail.com', 'venky@yahoo.com', 'karupi@gmail.com']

old_domain = "yahoo.com"
new_domain = "gmail.com"
for i in email:
    print(i.domain(email, old_domain, new_domain))

错误是:

Traceback (most recent call last):
  File "/private/tmp/p4", line 11, in <module>
    print(i.domain(email, old_domain, new_domain))
AttributeError: 'str' object has no attribute 'domain'

在上面的编码中,我试图用我定义的函数循环每个字符串,但它不断出现错误。我犯了什么错误?请任何人纠正它。

【问题讨论】:

  • 请更正格式
  • 嗨,桑迪普,欢迎。是的,您的格式需要更正。你也说你得到一个错误,但请告诉我们错误是什么。
  • 您的email 是一个字符串列表。如果 i 是这些字符串之一,那么 i.domain() 应该如何理解?字符串没有 domain 方法。另外 - 你的缩进似乎不对。最后 4 行真的是你函数定义的一部分吗?
  • domain()该方法不是str列表email的每个成员的数据类型的成员。

标签: python loops for-loop


【解决方案1】:

你的最后两行应该是:

for i in email:
    print(domain(i, old_domain, new_domain))

如上所述,电子邮件是一个字符串列表,您需要传递每个单独的字符串。最终结果应该是:

def domain(email, old_domain, new_domain):
    if "@" + old_domain in email:
        index = email.index("@" + old_domain)
        new_email = email[:index] + "@" + new_domain
        return new_email
    return email
email = ['sandeep@yahoo.com', 'maini@gmail.com', 'venky@yahoo.com', 'karupi@gmail.com']
old_domain = "yahoo.com"
new_domain = "gmail.com"
for i in email:
    print(domain(i, old_domain, new_domain))

这给出了输出:

sandeep@gmail.com
maini@gmail.com
venky@gmail.com
karupi@gmail.com

【讨论】:

    【解决方案2】:

    您提供的代码有一些错误导致错误:

    对于我在电子邮件中: print(i.domain(email, old_domain, new_domain)) 在这里,您试图访问函数 domain() 作为字符串 i 的方法,但是 domain() 是一个单独的函数,它不是字符串的方法。 所以代替 i.domain(email, old_domain, new_domain) 使用 domain(i, old_domain, new_domain)

    此外,电子邮件已定义为列表,您无需将其作为 domain() 函数中的参数再次传递

    最重要的是,你不需要一个电子邮件列表来迭代,你可以直接一个一个地传递它,所以你需要一次传递一封电子邮件,而不是传递整个电子邮件列表

    这是代码的更正版本:

    def domain(email, old_domain, new_domain):
    if "@" + old_domain in email:
        index = email.index("@" + old_domain)
        new_email = email[:index] + "@" + new_domain
        return new_email
    return email
    

    电子邮件 = ['sandeep@yahoo.com', 'maini@gmail.com', 'venky@yahoo.com', 'karupi@gmail.com'] old_domain = "yahoo.com" new_domain = "gmail.com" 对于我在电子邮件中: 打印(域(i,old_domain,new_domain))

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2014-09-22
      • 2018-09-26
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      相关资源
      最近更新 更多