【问题标题】:Python (Syntax that can hold value)Python(可以保存值的语法)
【发布时间】:2018-04-25 11:26:52
【问题描述】:

我一直在尝试通过使用以下函数来解决这个问题。当程序完成循环时,我应该如何存储所有数字输入值并仅在程序结束时打印它们。

def compare(a):
    a=0
    while True:
        b=input("Enter an integer : ")
        if b.isdigit():
            k=n+1
            a=a+int(b)
        elif b.isalpha():
            if b.upper()=="Q":
                print("Digits\n",a,"\nTotal\n",a)
                break
            else:
                print("Invalid Value. Enter again")
        elif b.isalnum():
            print("Value not recognized. Enter a valid value.")
        else:
            print("Unrecognized value is submitted. Enter again")

【问题讨论】:

  • 你需要一个list
  • 将每个输入附加到一个列表中,然后在最后输出该列表,例如与print
  • 它只显示我输入的最后一个数字......它不显示我输入的实际数字?
  • 我不能将我输入的所有数字存储在一个变量中吗?

标签: python


【解决方案1】:

我假设您希望 Total 打印数字的数量,而不是数字的总和。与您的代码相比,带有 cmets 的工作版本:

def compare(): # input value is not used
    a=[] # changed a to a list instead of integer
    n=0 # hold the number of digits that were entered
    while True:
        b=input("Enter an integer : ")
        if b.isdigit():
            n+=1 # add 1 to the number of digits that were entered, variable k is not used
            a.append(int(b)) #append the entered digit to list a
        elif b.isalpha():
            if b.upper()=="Q":
                print("Digits\n",*a,"\nTotal\n",n) # use print(*a) to print the list of numbers
                break
            else:
                print("Invalid Value. Enter again")
        elif b.isalnum():
            print("Value not recognized. Enter a valid value.")
        else:
            print("Unrecognized value is submitted. Enter again")

【讨论】:

  • 可以将横向打印列表改为纵向吗?
  • @Tijn,也不需要n+=1,可以直接使用len(a)
  • 如果要横向打印,可以使用字符串的join方法通过'\n'字符加入字符串列表: print('\n'.join(map(str, a)),"\nTotal\n",n) # 打印水平数字列表
【解决方案2】:

根据问题更新您的代码

def compare(a):
    a=0
    all_digits = []  # Empty list
    while True:
        b=input("Enter an integer : ")
        if b.isdigit():
            all_inputs.append(b)  # Append digit to list
            k=n+1
            a=a+int(b)
        elif b.isalpha():
            if b.upper()=="Q":
                print("Digits\n",a,"\nTotal\n",a)
                print("all digits: {}".format(all_digits))
                break
            else:
                print("Invalid Value. Enter again")
        elif b.isalnum():
            print("Value not recognized. Enter a valid value.")
        else:
            print("Unrecognized value is submitted. Enter again")

但这会是更好的代码:

def compare(): # no need to pass any argument
    a = 0
    all_digits = []               # Empty list
    while True:
        b = raw_input("Enter an integer: ")
        if b.isdigit():
            all_digits.append(b)  # Append digit to list
            a = a + int(b)            # do not see 'k' being used anywhere
        elif b.isalpha():
            if b.upper() == "Q":
                print("Digits: {}\nTotal: {}\nSum: {}".format(", ".join(all_digits), len(all_digits), a))
                break
            else:
                print("Invalid Value. Enter again")
        else:                     # no need of b.isalnum(). this will take care of both
            print("Unrecognized value is submitted. Enter again")

输出

Enter an integer: 1
Enter an integer: 2
Enter an integer: 3
Enter an integer: 4
Enter an integer: 5
Enter an integer: Q
Digits: 1, 2, 3, 4, 5
Total: 5
Sum: 15

【讨论】:

  • ##打印输入值的总和?
  • 你能清楚地说明你的要求吗,你需要打印所有输入的数字吗?总位数?所有数字的总和?
  • 我需要打印我输入的所有数字......我已经有了打印总和的代码......
  • 看来你想存储一串数字。如果您使用a=''; a = a + b,那么a 将是一个连接的数字字符串。但是您的代码正在执行a=0; a = a + int(b),这是添加数值,而不是连接字符。
  • @Puru,立即查看
猜你喜欢
  • 2018-01-24
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 2011-11-03
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
相关资源
最近更新 更多