舍入到整数而不使用Python中的条件语句 - 逻辑

时间:2015-02-08 23:19:26

标签: python logic rounding

我正在Udacity学习Python课程,而我正在努力为自己解决这个问题而不考虑答案。也许你可以给我一个暗示我的逻辑?

以下是我的指示和目前的情况。我们还没有学习条件语句,所以我不能使用它们。我们只学习了如何分配/打印变量,字符串,索引字符串,子序列和.find。他们刚刚在最后的练习中介绍了str命令。

# Given a variable, x, that stores the 
# value of any decimal number, write Python 
# code that prints out the nearest whole 
# number to x.
# If x is exactly half way between two 
# whole numbers, round up, so
# 3.5 rounds to 4 and 2.5 rounds to 3.
# You may assume x is not negative.

# Hint: The str function can convert any number into a string.
# eg str(89) converts the number 89 to the string '89'

# Along with the str function, this problem can be solved 
# using just the information introduced in unit 1.

# x = 3.14159 
# >>> 3 (not 3.0)
# x = 27.63 
# >>> 28 (not 28.0)
# x = 3.5 
# >>> 4 (not 4.0)

x = 3.54159

#ENTER CODE BELOW HERE

x = str(x)
dec = x.find('.')
tenth = dec + 1

print x[0:dec]

////

所以这让我打印到小数点的字符,但我无法弄清楚如何让计算机检查“第十”是否是> 4或者< 5 根据答案打印出来的东西。

我认为如果“十分之一”不是>我可能会得到足够的回报-1。 4,但我不知道如何打印x [0:dec] 如果它是< 5和x [0:dec] +1,如果它是> 4.

:/

有人可以给我一个正确方向的推动吗?

6 个答案:

答案 0 :(得分:1)

根据已接受的答案判断,您只需要浮点数,因此解决这个问题非常简单:

x = 3.54159  
# split on .
a, b = str(x).split(".")
# cast left side to int and add result of test for right side being greater or equal to 5
print(int(a) + (int(b) >= 5))

(int(b) > 5)将为1或0,即True/False,因此我们要么在右侧为>时加1; .5或地板,当它< 5< .5并加0。

如果你在数学上做这件事,你只需要print(int(x+.5)),任何> = .5将意味着x将被舍入并且当它是< 0.5。

答案 1 :(得分:1)

这是一个奇怪的限制,但你可以这样做:

x = str(x)
dec_index = x.find('.')
tenth_index = dec_index + 1
tenth_place = x[tenth_index] # will be a string of length 1
should_round_up = 5 + tenth_place.find('5') + tenth_place.find('6') + tenth_place.find('7') + tenth_place.find('8') + tenth_place.find('9')

print int(x[0:dec_index]) + should_round_up

我们所做的就是看十分之一。由于.find()如果找不到参数,则返回-1,如果十分位数是5,6,7,8或9,则.find()调用的总和将为-4(因为其中一个.find()调用将成功并返回0),但如果十分位数为0,1,2,3或4则为-5。我们将其加5,以便如果我们应该向上舍入,should_round_up等于1,否则为0。将其添加到整个数字部分,我们就完成了。


那就是说,如果你不受这种人为的限制,你会这样做:

print round(x)

继续你的生活。

答案 2 :(得分:1)

x = 3.54159  
# split on .
a, b = str(x).split(".")
# cast left side to int and add result of test for right side being greater or equal to 5
print(int(a) + (int(b[0]) >= 5))

# above code will not work with 3.14567 and the number with having two or more digits after decimal

答案 3 :(得分:1)

我认为这更容易......

x = x + 0.5
intPart, decPart = str(x).split(".")
print intPart

示例:

  • 如果x = 1,则它将变为1.5,intPart将为1.
  • 如果x = 1.1,那么它将变为1.6,intPart将为1.
  • 如果x = 1.6,则它将变为2.1,而intPart将为2.

注意:它仅适用于正数。

答案 4 :(得分:1)

此代码将数字舍入到最接近的整数

不使用条件

你可以这样做

x = 3.54159

x = x + 0.5       # This automatically takes care of the rounding

str_x = str(x)    # Converting number x to string 

dp = str_x.find('.')    # Finding decimal point index

print str_x[:dp]        # Printing upto but excluding decimal point

答案 5 :(得分:0)

我在Udacity做了同样的课程。使用以下代码解决了它:

y = str(x)
decimal = y.find('.')
y_increment = y[decimal+1:]
print decimal
print y_increment

# Section below finds >5
check5 = y_increment.find('5',0,1)
check6 = y_increment.find('6',0,1)
check7 = y_increment.find('7',0,1)
check8 = y_increment.find('8',0,1)
check9 = y_increment.find('9',0,1)
yes_increment = (check5 + 1) + (check6 + 1) + (check7 + 1) + (check8 + 1) + (check9 + 1)
print check5, check6, check7, check8, check9

#Calculate rounding up
z = x + (yes_increment)

z = str(z)
final_decimal = z.find('.')
print z[:final_decimal]