注意:我试图找出为什么我的while语句在整数结束时没有评估为False,所以我不相信这是重复的
在python中自动执行无聊的练习,程序接收输入并使用以下算法将其减少为1。
#even / 2
#odd * 3 + 1
def collatz():
print("Enter number:")
number = input()
try:
data = int(number) # Input Validation
while int(data) != 1:
if data % 2 == 0: #Number is even
data = int(data/2)
print(data)
if data % 2 == 1: # Number is odd
data = int(3*data+1)
print(data)
except:
print("Please input a valid value")
collatz()
collatz()
当数字减少为1时,而不是while循环中断。循环继续,它将1乘以3并加1(与正常奇数一样)。顺便说一下,很多int转换完成了,因为我认为它可能已经返回浮点数。
那么请告诉我在哪里进行unncessary int转换以及如何使用while语句来解除它。任何清理代码都是值得赞赏的
答案 0 :(得分:2)
为了让您的代码正常运行并且通常更好,您应该做一些事情:
(defun c:gmlimport (/ allfiles fpath)
(setq allfiles (vl-directory-files
"C:\\Users\\Admin\\Documents\\gml2"
"*.gml"
)
)
(foreach file allfiles
(setq fpath (strcat "C:\\Users\\Admin\\Documents\\gml2\\" file))
(gml2dwg "k" fpath)
)
(princ)
)
重命名为data
,这不会产生太大影响,但我会说它更有意义。n
进行无休止的转换,int
只需要从n
转换为string
一次 integer
中,然后调用一次,而是将主算法放在较小的function
中,然后您可以从代码的主体调用,甚至创建另一个function
来调用处理输入方面的算法。function
)而不是浮点除法器(//
),因为数字将是偶数,您可以确定小数地点将是/
。0
是否为n % 2
,然后在下一行检查0
是否为n % 2
,您只需使用{{ 1}}子句。就是这样!这是它的样子:
1
测试显示它有效(输入 if ... else
):
#even / 2
#odd * 3 + 1
def collatz(n):
while n != 1:
if n % 2 == 0: #Number is even
n = n // 2
else:
n = n * 3 + 1
print(n)
number = input("Enter number:")
try:
number = int(number)
collatz(number)
except ValueError:
print("Please input a valid value")