将“%.1f”应用于多个变量
Applying "%.1f" to multiple variables
刚开始上课,练习是学习如何使用round(x, n)
截断floats
。
唯一的问题是,它没有。我在网上找到了如何使用 %.1f
,但是有没有办法将它应用于多个变量而不是一遍又一遍地写它?
我的设置如下:
a = float(input("a:"))
b = float(input("b:"))
c = float(input("c:"))
d = float(input("d:"))
e = float(input("e:"))
sum = a + b + c + d + e
average = sum/5
print ("The sum of ", "%.1f" % (a), ", ", "%.1f" % (b), ",", "%.1f" % (c), ", ", "%.1f" % (d), ", and ", "%.1f" % (e), "is ", "%.1f" % (sum), ". Meanwhile, the average is ", "%.2f" % (average), ".")
有没有不用写那么多就可以应用%.1f
的方法?
编辑:感谢所有提供帮助的人。我发现 onur güngör's 最适合我正在寻找的东西,但我从每个人的输入中学到的东西比我需要的要多得多。感激不尽
我不确定是否有办法直接执行您想要执行的操作。但是,您可以尝试双格式并使用更新的样式。
str = "values: {0}, {0}, {0}, {0}, {0}".format("{:.2f}");
str = str.format(a, b, c, d, e);
我猜你想要这样的东西。
n = 10
vars = []
for i = range(1, n+1):
vars.append(float(input("%d: " % i)))
vars_sum = sum(vars)
average = vars_sum/5
str = "The sum of "
for var in vars[:-1]:
str += "%.1f, " % var
str += "and " + "%.1f" % vars[-1:][0] + " is %.1f." % vars_sum
str += " Meanwhile, the average is %.2f." % average
print(str)
您可以方便地将这些值存储在列表中。例如:
names = list("abcde")
values = [ float(input(n + ":")) for n in names ]
fvalues = ', '.join("{:.1f}".format(v) for v in values)
fvalues
可能看起来像:
'4.0, 4.4, 4.4, 2.3, 4.4'
这些值也可以以列表形式计算:
total = sum(values)
avg = total / len(values)
如果您希望对值列表进行更面向调试的格式设置,例如:
dvalues = ' '.join("{}: {:.1f}".format(n,v) for n,v in zip(names,values))
产量:
'a: 4.0 b: 4.4 c: 4.4 d: 2.3 e: 4.4'
这里使用字符串格式化很有用。构建您的格式化程序字符串,然后将其应用于多个值。
one_digit_float = "{:.1f}"
responses = dict()
for varname in ['a','b','c','d','e']:
responses[varname] = input(varname+": ")
# this is equivalent to:
# # responses = {varname: input(varname+": ") for varname in 'abcde'}
print "Variables are " + ', '.join(varname + ": " + one_digit_float.format(val) for varname,val in responses.items())
刚开始上课,练习是学习如何使用round(x, n)
截断floats
。
唯一的问题是,它没有。我在网上找到了如何使用 %.1f
,但是有没有办法将它应用于多个变量而不是一遍又一遍地写它?
我的设置如下:
a = float(input("a:"))
b = float(input("b:"))
c = float(input("c:"))
d = float(input("d:"))
e = float(input("e:"))
sum = a + b + c + d + e
average = sum/5
print ("The sum of ", "%.1f" % (a), ", ", "%.1f" % (b), ",", "%.1f" % (c), ", ", "%.1f" % (d), ", and ", "%.1f" % (e), "is ", "%.1f" % (sum), ". Meanwhile, the average is ", "%.2f" % (average), ".")
有没有不用写那么多就可以应用%.1f
的方法?
编辑:感谢所有提供帮助的人。我发现 onur güngör's 最适合我正在寻找的东西,但我从每个人的输入中学到的东西比我需要的要多得多。感激不尽
我不确定是否有办法直接执行您想要执行的操作。但是,您可以尝试双格式并使用更新的样式。
str = "values: {0}, {0}, {0}, {0}, {0}".format("{:.2f}");
str = str.format(a, b, c, d, e);
我猜你想要这样的东西。
n = 10
vars = []
for i = range(1, n+1):
vars.append(float(input("%d: " % i)))
vars_sum = sum(vars)
average = vars_sum/5
str = "The sum of "
for var in vars[:-1]:
str += "%.1f, " % var
str += "and " + "%.1f" % vars[-1:][0] + " is %.1f." % vars_sum
str += " Meanwhile, the average is %.2f." % average
print(str)
您可以方便地将这些值存储在列表中。例如:
names = list("abcde")
values = [ float(input(n + ":")) for n in names ]
fvalues = ', '.join("{:.1f}".format(v) for v in values)
fvalues
可能看起来像:
'4.0, 4.4, 4.4, 2.3, 4.4'
这些值也可以以列表形式计算:
total = sum(values)
avg = total / len(values)
如果您希望对值列表进行更面向调试的格式设置,例如:
dvalues = ' '.join("{}: {:.1f}".format(n,v) for n,v in zip(names,values))
产量:
'a: 4.0 b: 4.4 c: 4.4 d: 2.3 e: 4.4'
这里使用字符串格式化很有用。构建您的格式化程序字符串,然后将其应用于多个值。
one_digit_float = "{:.1f}"
responses = dict()
for varname in ['a','b','c','d','e']:
responses[varname] = input(varname+": ")
# this is equivalent to:
# # responses = {varname: input(varname+": ") for varname in 'abcde'}
print "Variables are " + ', '.join(varname + ": " + one_digit_float.format(val) for varname,val in responses.items())