2013-03-01 70 views
3

這段代碼返回「貓」,「狗」,「倉鼠」,「獨角獸」,但它根本不應該返回「獨角獸」!這有什麼理由嗎?如果Python中有比較語句

if random.randint(0,10) < 5: 
    print("dog")  
elif random.randint(0,10) > 5: 
    print("cat")  
elif random.randint(0,10) == 5: 
    print("hamster")  
else: 
    print("unicorn") 
+0

檢查你的縮進! – 2013-03-01 14:12:57

+0

@DavidZwicker:我修正了縮進,這個縮進只是因爲我格式化的原因。 – 2013-03-01 14:13:23

+1

它可能發生。你對隨機函數使用3個不同的調用...這意味着,可能發生的第一個隨機調用返回6:所以第一個表達式是假的,第二個是4,所以這也是錯誤的,第三個不是5,並且哇!獨角獸...... – ppeterka 2013-03-01 14:16:27

回答

4

random.randint再次到達它每次調用時,潛在地產生每一時間(因爲這是該函數的目的)不同的結果。

如果您想用相同的值重複測試,請先存儲該值。

+0

謝謝!我把它定爲一個術語,現在它運行良好,根本沒有獨角獸出現。 – Ataulf 2013-03-01 14:16:12

+0

@Ataulf:更多的謝謝是一個被接受的答案讚賞! ;-) – 2013-03-01 14:19:44

0

這裏的問題是您每次都會生成一個新的隨機數。您應該創建一次,然後將其分配給一個變量,然後檢查。

3

您應該只創建一次隨機數!

val = random.randint(0,10) 
if val < 5: 
    print("dog") 

elif val > 5: 
    print("cat") 

elif val == 5: 
    print("hamster") 

else: 
    print("unicorn") 
2

假設正確的壓痕,沒有理由對三個隨機整數分別爲>=5<=5,而「不5」。

你可能打算這樣做:

value = random.randint(0, 10) 

if value < 5: 
    print("dog") 
elif value > 5: 
    print("cat") 
elif value == 5: 
    print("hamster") 
else: 
    print("unicorn") 

現在有沒有獨角獸的機會。

8

您會在每次比較中獲得新的隨機數。你大概意思是:

my_random_int = random.randint(0,10) 

if my_random_int < 5: 
    print("dog") 

elif my_random_int > 5: 
    print("cat") 

elif my_random_int == 5: 
    print("hamster") 

else: 
    print("unicorn") 
1

你的隨機數是不同的每次你打電話random.randint所以當你考第一,如果現在已經超過了它,然後3,然後是4,然後砰一聲,你可能是7在獨角獸。

您應該在if的開頭只撥打random.randint一次,保存其值並檢查它。

myrand = random.randint(0,10) 
if myrand < 5: 
    print("dog")  
elif myrand > 5: 
    print("cat")  
elif myrand == 5: 
    print("hamster")  
else: 
    print("unicorn") 
0

您正在生成三個不同的隨機數。你在想什麼:

random_number = random.randint(0,10) 

if random_number < 5: 
    print("dog") 

elif random_number > 5: 
    print("cat") 

elif random_number == 5: 
    print("hamster") 

else: 
    print("unicorn") 

這段代碼只會返回一個字,並且永遠不會返回「獨角獸」。

0

您只需要創建一個隨機整數。

你的代碼應該是:

myRandom = random.randint(0,10) 

if myRandom < 5: 
    print("dog")  
elif myRandom > 5: 
    print("cat")  
elif myRandom == 5: 
    print("hamster")  
else: 
    print("unicorn") 
+0

> =和<=是什麼原因?我沒有把握這個問題。此外,OP抓住了== 5的結果! – 2013-03-01 14:18:29

+0

@DonQuestion Nevermind - 我沒有看到他使用過==。 – xxmbabanexx 2013-03-01 14:20:32

+0

然後我建議你調整你的答案,那裏有一些巨魔會喜歡downvote你的答案,因爲這個! ;-) – 2013-03-01 14:21:51