簡體   English   中英

Collat​​z 從自動化無聊的東西

[英]Collatz from automate the boring stuff

我知道這個問題有很多帖子。 但是我不能以任何其他方式發布我的代碼,除非提出問題。 有人可以幫助我理解如何在每次全局作用域執行時阻止 n 被輸入到 collat​​z 函數中。

編寫一個名為 collat​​z() 的函數,它有一個名為 number 的參數。 如果 number 是偶數,那么 collat​​z() 應該打印 number // 2 並返回這個值。 如果 number 是奇數,那么 collat​​z() 應該打印並返回 3 * number + 1。

然后編寫一個程序,讓用戶輸入一個整數,並不斷調用該數字上的 collat​​z() 直到函數返回值 1。 (令人驚訝的是,這個序列實際上適用於任何整數——遲早,使用這個序列,你會得到 1!即使是數學家也不確定為什么。你的程序正在探索所謂的 Collat​​z 序列,有時被稱為“最簡單的不可能的數學問題。”)# 記住將 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM