簡體   English   中英

我如何將 input() 函數放入 python 3 中的 def 函數中

[英]how can i put input() function into a def fonction in python 3

我正在研究我在書中找到的 collat​​z 序列,我想輸入數字但它不起作用,當我輸入數字時,輸入鍵盤鍵不起作用,我的程序有問題嗎?

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概念主要涉及整數。)

我相信浮點除法中的舍入錯誤很可能使您的程序進入無限循環(因為小數部分很小的數字不會在evenodd范圍內。)或者如果您超過了限制在您的范圍 (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.

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