【问题标题】:Why am I not getting any output in the below code?为什么我在下面的代码中没有得到任何输出?
【发布时间】:2016-07-25 23:34:57
【问题描述】:

编译代码时没有错误。我将该函数称为:pattern('abc')。期望输出为'A-Bb-Ccc'

def pattern(s):
    v = []
    v = list(s)
    strlen = len(v)
    i = 0
    cntr = 0
    strng = []
    while i < strlen:
        j = 0
        while j <= i:
            if j == 0:
                strng.append(v[i].upper())
            else:
                strng.append(v[i])
        j += 1
        strng.append('-')
        i += 1
        z = ''.join(strng)
        return z

【问题讨论】:

  • 不打印怎么知道输出不正确?
  • 嗯,'return z' 的缩进是错误的,tab back 一次
  • 事实上,这个函数不可能输出nothing。至少,它会返回一个破折号-
  • 这进入了一个无限循环。我认为您需要在 j += 1 上额外缩进
  • j 在循环外递增。所以循环可能会无限运行。

标签: python python-2.7


【解决方案1】:

更新使用enumerate而不是zip

source = 'abc'

'-'.join([(x*i).capitalize() for i, x in  enumerate(source, 1)])

source = 'abc'

'-'.join([(x*i).capitalize() for x,i in  zip(source, range(1, len(source)+1))])

一些解释:

zip(source, range(1, len(source)+1))创建对(a,1), (b,2), (c,3)

x*i 表示串联,即a*3 生成字符串aaa

aaa.capitalize() 将第一个字母变为大写

'-'.join(a_list) 使用- 作为分隔符连接a_list 中的元素

【讨论】:

  • 虽然这是一段不错的代码,但它不能回答以下问题:“为什么我在下面的代码中没有得到任何输出?”。您可能需要编辑一些可以回答问题的内容。
【解决方案2】:

您没有打印语句。要测试它,请填写

print(z)

您还必须将 return 放在 while 循环之外。

【讨论】:

    【解决方案3】:

    首先,您需要缩进return z,使其不在任何循环中:

    def pattern(s):
        #Rest of the code
        return z
    

    然后你需要将函数的结果赋值给一个变量并打印出来:

    result = pattern('abc')
    print result
    

    或者你可以做一个更直接的方法:

    print pattern('abc')
    

    【讨论】:

      【解决方案4】:

      你有一个无限循环。您需要在内部while 循环中增加jj 将始终小于i,如果您在修复缩进后调用print(pattern("abc")),它应该返回您正在寻找的内容。

      TL;DR,在j+=1之前添加一个缩进

      【讨论】:

        猜你喜欢
        • 2021-02-07
        • 2019-05-05
        • 1970-01-01
        • 2019-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多