Python:使用转换为字符串的整数创建循环

时间:2018-01-30 15:35:00

标签: python for-loop

几个星期前,我是Python的新手,我正在上课。我目前正在编写一个程序,它采用四位整数,取每个数字的绝对差值,然后求它们。意思是,输入一个四位数的PIN,程序取绝对值(数字1-数字2),(2-3)和(3-4),然后将它们相加并打印总和。

我应该写一个for循环,以便在将整数转换为字符串后执行此操作。

我被告知要使用for值来构造循环:但我对如何设置它感到困惑。我理解基本的切片,我想我需要在我的回答中使用它。 这是我到目前为止我的代码:

def main():
    print("This program is designed to determine the weight of a four-digit PIN by calculating the sum of the absolute difference between each digit.")
    # Prompt user for PIN
    x = input("Enter your PIN: ")
    # Call the weight function providing the four digit pin as an argument
    weight(x)


# Weight function
def weight(x):
    # Convert integer to string
    str(x)
    # Initialize variables
    a, b, c, d = x
# Setup for a loop that uses digits as sequence, sum differences between each digit in integer
# Print sum

循环是弄乱我的部分。我知道有其他方法可以在不使用循环的情况下解决这个问题,但对于我的任务,我应该这样做。

3 个答案:

答案 0 :(得分:1)

  

我被告知要使用for char in value:来构建循环,但我对如何设置它感到困惑。

您使用x分配x = input("Enter your PIN: ")的方式,x已经是一个字符串。在返回加权和之前,应使用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.
    return abs(int_values[0] - int_values[1]) + abs(int_values[1] - int_values[2]) + abs(int_values[2] - int_values[3])


pin = ''
while len(pin) != 4 or not pin.isdigit():  # Make sure PIN is 4 digits.
    pin = input("Enter your PIN: ")
pin_weight = weight(pin)
print('Weight of {} is {}'.format(pin, pin_weight))

答案 1 :(得分:0)

问题在于您将x转换为字符串,但未存储str(x)调用的返回值。您可以通过在str(x)变量中存储x的值来解决此问题。

def weight(x):
    x = str(x)
    a, b, c, d = x
    # continue with loop

您可以将str(x)的返回值直接存储到a, b, c, d

,以便稍微清理一下
def weight(x):
    a, b, c, d = str(x)
    # continue with loop

我认为你应该考虑尝试的最后一个选项是循环遍历引脚中的数字而不将它们存储在变量a, b, c, d中。为了帮助您入门,您可以尝试一下:

# PIN = 8273
def weight(x):
    for i in range(len(str(x))): # loop through indices in x
        print(x[i]) # prints 8, 2, 7, 3

答案 2 :(得分:0)

有些人可能希望避免在数值公式中混合str次操作

num = 1234

digits = []
for _ in range(4):
    num, rem = divmod(num, 10)
    digits.append(rem)

digits
[4, 3, 2, 1]  

将数字分成4位数的列表 - 相反的顺序对于你的体重计算无关紧要