2014-07-10 83 views
1

我的代碼,要求用戶使用「或」時,如果他們想要一個4,6或12面的骰子被捲起併發生了什麼,如果他們不把在4,6或12,他們應該再次被問及直到他們輸入正確。它只是一直說一切都無效。這裏是我當前的代碼:不太清楚在Python

number = int(input("Would you like to use a 4, 6 or 12 sided die\n")) 
while number != 4 or number != 6 or number != 12: 
    print("Invalid response") 
    int(input("Would you like to use a 4, 6 or 12 sided die?\n")) 
if number == 4: 
    import random 
    random4 = random.randint(1, 4) 
    print("Your 4 sided die rolled a" ,random4) 

elif number == 6: 
    import random 
    random6 = random.randint(1, 6) 
    print("Your 6 sided die rolled a" ,random6) 

elif number == 12: 
    import random 
    random12 = random.randint(1, 12) 
    print("Your 12 sided die rolled a" ,random12) 
+0

你的if不是while塊的一部分。 – munk

+0

7個答案在5分鐘內就會顯示你需要RTFM。 – devnull

+0

想一想;如果你問數字是不是4 **或**數字不是6 **或**數字不是12,那麼如果數字是4,則滿足這三個條件中的兩個。 –

回答

0

下面是一個保留原始結構的編輯。作爲初學者,不要猶豫,像你一樣寫簡單,直接的代碼。你的主要努力應該是讓程序運行。你總是可以回頭用你學到的最新概念重構/重寫代碼。這就是在所有技能水平上完成的。

在這種情況下,使用while True:消除複合OR語句。您可以分別使用==或!=來使用OR或AND。另外,在使用while循環時,應該使用傳遞值(即允許進入循環的值)初始化循環外部的checked - value - number。

number = 0 
while number != 4: 
    #do stuff 
    number = someNewValue 

使用複合和/或條件時需要了解的幾件事情是短路和運算符優先級。

import random 
while True: # loops until break 
    number = int(input("Would you like to use a 4, 6 or 12 sided die?\n")) 
    if number == 4: 
     import random 
     random4 = random.randint(1, 4) 
     print("Your 4 sided die rolled a" ,random4) 
     break 
    elif number == 6: 
     import random 
     random6 = random.randint(1, 6) 
     print("Your 6 sided die rolled a" ,random6) 
     break 
    elif number == 12: 
     import random 
     random12 = random.randint(1, 12) 
     print("Your 12 sided die rolled a" ,random12) 
     break 

一旦工作,應該應用其他帖子的幾個想法。其他想法是使這個功能,並使模具大小列表變量。

最終代碼可能看起來像這樣。

from random import randrange 

DIE_CHOICES = {4, 6, 12} 

def roll(choices): 
    while True: 
     try: 
      choice = int(input('Would you like to use a 4, 6 or 12 sided die?\n')) 
     except ValueError: 
      continue 
     if roll in choices: 
      return choice, 1 + randrange(choice) 
     else: 
      print 'Please pick a legal die size.\n' 

print 'Your {} sided die rolled a {}.'.format(roll(DIE_CHOICES)) 

這使得事情更通用一些,並消除重複/冗餘代碼。

2

爲了簡化您的病情,試試這個:

while number not in (4, 6, 12): 
... 

你的條件是不正確的,不管是什麼,你的支票的人會是真的。

0

你需要了解如何or工作:儘快

while number != 4 or number != 6 or number != 12: 

作爲條件之一爲真:

您的代碼就會出來這個循環。假設你輸入6,第一個條件,number != 4仍然是真的,所以控制永遠不會評估number != 6

您需要使用and

3

你的邏輯流程有點不合適。你要求的是while循環之外的數字,所以這個數字永遠不會被更新,並且一直保持評估原始值。您需要將變量number設置爲新輸入呼叫的結果。

while number != 4 or number != 6 or number != 12: 
    number = int(input("Would you like to use a 4, 6 or 12 sided die\n")) 

編輯: 觸及另一個原因,這是行不通的很正確,以及其他的一些反應。在說這些事情無效之前,你需要檢查所有這些事情是否屬實,並不是說它們中的任何一個都是真實的。一個數字不能同時是4,6和12。因此,使用and或更好:

while number not in [4, 6, 12]: 
0

您需要使用,而不是或。 你的第一行說:「檢查用戶是否沒有滾動4;然後檢查他們是否沒有滾動6,然後檢查他們是否沒有滾動12」,除了它正在單獨做所有這些。因此,滾動4將不會是6而不是12;你需要使用和你在哪裏使用或在第一行

0

你需要使用and而不是or。讓我們一起來看看會發生什麼。

while number != 4 or number != 6 or number != 12: 

首先,您輸入4。該程序一步一步地走下去。

number != 4 

這是錯誤的,因爲數字實際上是4。下一頁:

number != 6 

這原來是真的,因爲我們給4,而不是6。這意味着該程序會直接進入下一行代碼,並要求再次進行滾動。如果你想要「這些都不是真的」那種情況,你需要使用and而不是or

0

布什米爾斯建議你可以使用and。這是另一種方法。

from random import randrange 
number = -1 

while (number not in (4,6,12)): 
    try: 
    number = int(input("Would you like to use a 4, 6 or 12 sided die\n")) 
    except ValueError: 
    continue 

print("Your {} sided died rolled a {}.".format(number,1+randrange(number)))