在已定义函数内部的For循环

时间:2019-06-20 05:05:11

标签: python

我无法在体重函数中使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

4 个答案:

答案 0 :(得分:0)

您正在尝试在循环的第一次迭代中计算namespace WindowsApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); webBrowser1.Navigate("http://111.93.133.133/XPAYB2C_UAT"); } public void Form1_Load(object sender, EventArgs e) { var page = @" <html> <body> <iframe width='560' height='315' X-Frame-Options:'sameorigin' src ='http://111.93.133.133/XPAYB2C_UAT' frameborder='0' allowfullscreen> </iframe> </body> <html>"; webBrowser1.DocumentText = page; webBrowser1.ScriptErrorsSuppressed = true; //< meta http - equiv = "X-Frame-Options"content = "allow" > } } }

weight

答案 1 :(得分:0)

@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 :(得分:0)

您的打印和退货位于for循环内。我很确定您不希望它们出现,因此您需要将前导空格减少四个。可能计算也不属于其中。

答案 3 :(得分:0)

在您的代码中,您应该像上面已经提到的其他那样,将计算和打印代码从循环范围之外。但是您可以使用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