我正在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.
:/
有人可以给我一个正确方向的推动吗?
答案 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
示例:
注意:它仅适用于正数。
答案 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]