[英]Collatz from automate the boring stuff
我知道這個問題有很多帖子。 但是我不能以任何其他方式發布我的代碼,除非提出問題。 有人可以幫助我理解如何在每次全局作用域執行時阻止 n 被輸入到 collatz 函數中。
編寫一個名為 collatz() 的函數,它有一個名為 number 的參數。 如果 number 是偶數,那么 collatz() 應該打印 number // 2 並返回這個值。 如果 number 是奇數,那么 collatz() 應該打印並返回 3 * number + 1。
然后編寫一個程序,讓用戶輸入一個整數,並不斷調用該數字上的 collatz() 直到函數返回值 1。 (令人驚訝的是,這個序列實際上適用於任何整數——遲早,使用這個序列,你會得到 1!即使是數學家也不確定為什么。你的程序正在探索所謂的 Collatz 序列,有時被稱為“最簡單的不可能的數學問題。”)# 記住將 input() 的返回值轉換為整數使用 int() 函數; 否則,它將是一個字符串值。 期望的輸出
3 10 5 16 8 4 2 1
輸入驗證 在之前的項目中添加 try 和 except 語句,以檢測用戶是否輸入了非整數字符串。 通常,int() 函數在傳遞非整數字符串時會引發 ValueError 錯誤,例如 int('puppy')。 在except子句中,向用戶打印一條消息,說他們必須輸入一個整數。
def collatz(number):
if number%2==0:
number=number//2
print(number)
elif number%2==1:
number=3*number+1
print(number)
print('Enter number: ')
n=int(input())
while n!=1:
collatz(n)
您已經創建了一個無限循環,因為您的“n”在循環內不會改變,並且只要用戶在開始時不輸入“1”,就永遠不會遇到“n!=1”。
嘗試這個:
def collatz(number):
if number % 2 == 0:
number = number // 2
else:
number = 3 * number + 1
print(number)
return number
n = int(input("Enter number: "))
while n != 1:
n = collatz(n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.