[英]how can i put input() function into a def fonction in python 3
我正在研究我在書中找到的 collatz 序列,我想輸入數字但它不起作用,當我輸入數字時,輸入鍵盤鍵不起作用,我的程序有問題嗎? :
even = range(0,10**5,2)
odd = range(1,10**5,2)
def collatz_s(num):
while num !=1 :
if num in even :
result = num /2
print(result)
num = result
elif num is odd :
result = num *3+1
num = result
print(result)
num = int(input('choose a random number'))
collatz_s(num)
要檢查一個數字是否是奇數還是偶數,而不是生成range
對象和檢查號碼是否是in
由兩個,你可以得到他們,看在余數num % 2
。 如果余數為1,則表示該數為偶數。 否則,這很奇怪。
此外,使用num // 2
執行整數除法。 這樣,將 16 除以 2 將得到 8(整數),而不是 8.0(浮點數)。事實證明這在這里非常重要,特別是因為您有興趣找到除法的余數(a概念主要涉及整數。)
我相信浮點除法中的舍入錯誤很可能使您的程序進入無限循環(因為小數部分很小的數字不會在even
或odd
范圍內。)或者如果您超過了限制在您的范圍 (10 5 ) 中,您將處於兩個分支都不匹配的相同情況。 使用整數除法並使用余數檢查偶數或奇數應該可以解決這兩個問題。
def collatz_s(num):
while num != 1:
if num % 2 == 0:
num = num // 2
print(num)
else:
num = num * 3 + 1
print(num)
問題出在您的elif
塊中,這里elif num is odd :
in
處理余數時更改is
in
使用integer division(//)
來避免precision
錯誤。
def collatz_s(num):
while num != 1:
if num in even:
result = num // 2
print(result)
num = result
elif num in odd:
result = num * 3 + 1
print(result)
num = result
num = int(input('choose a random number'))
collatz_s(num)
# input 5
# output
16
8
4
2
1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.