【问题标题】:For Loop inside of a defined function已定义函数内的 For 循环
【发布时间】:2019-06-20 05:05:11
【问题描述】:

我的权重函数中的 for 循环无法正常工作。目标是让用户输入他们想要评估的 PIN 的数量,并且程序应该提示用户(多次)输入 9 位数的 PIN。 PIN 的“权重”是两者之间绝对差的总和 相邻数字。(例如:1234=abs(1-2)+abs(2-3)+abs(3-4)=3)

我让程序询问用户有关 PIN 的信息,但是一旦我定义了重量,我就有问题了。

在每次输入 PIN 后,我希望它告诉用户“重量”。 我在返回后在 for 循环中调用函数:

for i in range(pin_num):
    prompt_user()
    weight(pin)



def weight(value):
    int_values = []  # Create an empty list to store the integers

    for char in value:
        int_values.append(int(char))  # Converts char to int and adds to list.
        weight=abs(int_values[0] - int_values[1]) + abs(int_values[1]
            - int_values[2])+ abs(int_values[2]
            - int_values[3])+abs(int_values[3] - int_values[4])+abs(int_values[4]
            - int_values[5])+abs(int_values[5] - int_values[6])+abs(int_values[6]
            - int_values[7])+abs(int_values[7] - int_values[8])
    #pin_weight = weight(pin)
        print('The PIN {} has a weight of {}'.format(pin,weight))
        return

【问题讨论】:

  • 失败的输入是什么?该输入的正确结果是什么?为什么在不同的缩进处有注释,为什么在for循环里面有return?
  • 缩进很重要,但您也希望函数只返回一个值。然后 value = weight(pin) 这样你就可以编写测试了。当你想打印时,你可以很容易地在函数外打印。 (不要对不同的东西使用相同的名称,重量既是一个函数也是一个数字。

标签: python


【解决方案1】:

@Chinyere,您的代码的问题是缩进 您将权重计算放在不正确的 for 循环中

def weight(value):
    int_values = []  # Create an empty list to store the integers

    for char in value:
        int_values.append(int(char))  # Converts char to int and adds to list.
    # You put weight inside the for loop which was incorrect
    weight=abs(int_values[0] - int_values[1]) + \
        abs(int_values[1] - int_values[2]) + \
        abs(int_values[2] - int_values[3]) + \
        abs(int_values[3] - int_values[4]) + \
        abs(int_values[4] - int_values[5]) + \
        abs(int_values[5] - int_values[6]) + \
        abs(int_values[6] - int_values[7]) + \
        abs(int_values[7] - int_values[8])
    print('The PIN {} has a weight of {}'.format(pin,weight))
    return

for i in range(1):
    pin=input()
    weight(pin)

【讨论】:

    【解决方案2】:

    你的 print 和 return 在 for 循环中。我很确定您不希望它们如此,因此您需要将前导空格减少四个。可能那个计算也不属于那里。

    【讨论】:

      【解决方案3】:

      在您的代码中,您应该像其他人已经提到的那样,将计算和打印代码排除在循环范围之外。但是您可以使用 zip 以不同的方式执行相同的操作,如下所示 -

      def weight(value):
        w = 0
        for x, y in zip(value, value[1:]):
           w += abs(int(x) - int(y))
      
        <rest of your code>
      

      另外,你不应该对函数和变量使用相同的名称 (weight)

      【讨论】:

        【解决方案4】:

        您正在尝试在循环的第一次迭代中计算 weight

        for i in range(pin_num):
            prompt_user()
            weight(pin)
        
        
        
        def weight(value):
            int_values = []  # Create an empty list to store the integers
        
            for char in value:
                int_values.append(int(char))  # Converts char to int and adds to list.
        
            #Calculates the weight after the loop has finished
            weight=abs(int_values[0] - int_values[1]) + abs(int_values[1]
                - int_values[2])+ abs(int_values[2]
                - int_values[3])+abs(int_values[3] - int_values[4])+abs(int_values[4]
                - int_values[5])+abs(int_values[5] - int_values[6])+abs(int_values[6]
                - int_values[7])+abs(int_values[7] - int_values[8])
            #pin_weight = weight(pin)
            print('The PIN {} has a weight of {}'.format(value,weight))
            return
        

        【讨论】:

        • 不应该是print('The PIN {} has a weight of {}'.format(value,weight))吗?
        猜你喜欢
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 2021-05-10
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多