我是个完全的初学者。我从编码bat开始练习,问题是创建一个函数,将3个整数圈到最近的10个,然后找到它们的求和。我想出了一种方法,它在下面的图片中给出了。请帮帮忙。
def round10(num):
return # This will return the rounded number
def sum(a,b,c)
return round10(a) + round10(b) + round10(c)
发布于 2020-04-11 08:08:16
我注意到您试图以只有字符串和其他可迭代的方式操作整数:len(num)和num[0]/num[-1]都会给您一个TypeError。为了防止这种情况发生,首先需要将数字转换为字符串,然后转换为list:
def round10(num):
number = list(str(num))但是,另一个问题是不能从字符串中减去整数(再次是TypeError),因此每个列表项都需要转换为整数:
def round10(num):
number = list(str(number))
for i in range(len(number)): # Doable because num is a list
number[i] = int(number[i])然后,一旦应用了所有逻辑,就需要将其转换回整数。这意味着您必须将列表转换为单个字符串,并对该字符串调用int():
def round10(num):
number = list(str(num))
for i in range(len(number)): # Doable because num is a list
number[i] = int(number[i])
if len(number) < 2 and num >= 5:
number = [1, 0]
elif len(number) > 2 and number[-1] >= 5:
number[0] += 1
number[-1] = 0
else:
number[0] -= 1
number[-1] = 0
final = ""
for n in number:
final += str(n)
# Here, I'd use final = "".join([str(n) for n in number])
return int(final)如您所见,很有可能混淆所有使用中的类型。
if-statements中存在逻辑错误
如果你去网上试一试!从上面的函数链接,您将看到您的逻辑存在问题:
10四舍五入为0。下面是您建议的方法的固定版本,它适用于194以下的数字:
def round10(num):
number = list(str(num))
for i in range(len(number)): # Doable because num is a list
number[i] = int(number[i])
if len(number) < 2 and num >= 5:
number = [1, 0]
elif len(number) >= 2 and number[-1] >= 5:
number[-2] += 1
number[-1] = 0
else:
number[-1] = 0
final = ""
for n in number:
final += str(n)
# Here, I'd use final = "".join([str(n) for n in number])
return int(final)elif len(number) > 2 and number[-1] >= 5:已更改为elif len(number) >= 2 and number[-1] >= 5:。这解决了两个或两个以上数字的数字不能正确循环的问题。number[0] -= 1从else块中删除,以便处理第2点和第3点。请注意,我还没有解决问题4,这是因为我觉得实现这样一个系统超出了CodingBat挑战的范围。
实际上,我建议您不要依赖字符串操作,而是使用数学来为您进行舍入。
%)算子%运算符返回第一个数除以第二个数的剩余部分。这可以用来查看这个数字离最近的10有多远:
def round10(num):
distance = num % 10然后,如果距离最近的10的距离大于或等于5,只需将10减去这个距离到原来的数字上。否则,从原始数字减去10减去该距离:
def round10(num):
if num % 10 >= 5:
return num + (10 - (num % 10))
else:
return num - (10 - (num % 10))我假设CodingBat希望执行求和的函数被称为sum。在这种情况下,你不能真正改变它。但是如果这是在一个适当的程序中,我强烈建议您更改函数名。为什么?为了避免被称为sum的内置函数“掩蔽”(也就是覆盖)。
https://codereview.stackexchange.com/questions/240322
复制相似问题