簡體   English   中英

我如何將原始輸入與python中的變量值相等

[英]how do i equate raw input with a variable value in python

這是我的第一個“程序”或腳本或其他。 因此,如果我要徹底解決這個錯誤,請隨時取笑我。
我想編寫一個文本的,棋手對棋的程序。
我的第一個直覺是將板子做成8x8的列表清單,例如[[a1,a2 ... a8] ... [h1,h2 ... h8]],但不確定如何將值附加到菜單項中列表,例如已占用或未占用的標志。
然后我想到了嘗試將每個正方形作為一個單獨的值來保持其狀態,例如a1 = wr(對於白白鴉)和a3 = o(對於開白),並且在成功移動之后,只需更新正方形的值即可。
我的第一個直覺是接受用戶輸入

move = raw_input("enter your move")  

用戶將輸入:
例如e4
然后,我想做類似的事情:

if move == "o"  

確保廣場是開放的
我認為我正在嘗試做的事情很明顯,但是我知道為什么它不起作用。
有什么方法可以將raw_input轉換為變量,以便:

move == o returns TRUE if the variable e4 is o  


編輯:
對於實際的代碼,這實際上只是在我腦海中,但這是一個鏡頭:

a1=wr  
a2=wp  
a3=o  
a4=o  
a5=o  
a6=o  
a7=bp  
a8=br  

對其余文件依此類推

move = raw_input("enter your move: ")  

-----這個程序主要是給我的,所以我不檢查輸入,而只是輸入一個動作,例如:e4

if move == o:  
  then e4 = wp  
  else print "illegal move, square is occupied"  

我意識到變量'move'指向字符串'e4',變量e4指向字符串'o',並且它們是獨立且不同的實體,但是有某種方法可以接收字符串輸入並檢查是否存在是具有相同“名稱”的變量?

非常感謝您提供的所有出色答案...

我想您實際上想要的是一本包含董事會完整狀態的字典-

board = { "a1" : "o", "a2" : "k", # ...
}

那你做

if board[move] == "o":
    # take appropriate action

每當您發現自己想“我想按其名稱查找變量”時,很可能應該使用字典。

是的,這是有可能的,但通常是一個相當可怕的想法,並且皺着眉頭-它速度慢且hacky,幾乎不需要,並且在某些情況下更容易出錯/更難驗證以及安全問題的來源(可能不在此處,但仍在) 。

寧可使用字典 -無需更改bord表示形式,只需(在檢查輸入格式是否正確之后),提取數字和字母,然后從該輸入中得出引用該字段的索引即可用戶的意思是:

  • 對於數字,將其轉換為帶有int的整數並減去1(因為列表索引從0開始)
  • 使用類似{'a': 0, 'b': 1, ..., 'h':7}類的字典將字母映射到索引(有一些聰明的方法可以用更少的代碼來完成此操作,但這是簡單有效)。

通常,如果要將用戶輸入轉換為變量名,則說明您做錯了。 當然,您可以使用eval()但這樣做無濟於事-尋找惡意用戶如何濫用它並使“非常糟糕的事情”發生的方法並不需要花太多時間。 當然,在執行這種直接的變量名魔術之前,您可以編寫一堆規則來驗證輸入,但是要使錯誤的方法起作用,需要進行大量工作。 總是有例外,但是,作為一個初學者,您應該假設這是一個壞主意-一旦您了解了自己的行為,就將了解例外,或者至少是在“邪惡程度較低”的時候。

當您正在考慮使用數據結構來固定電路板時,您走在正確的道路上。 有很多方法可以執行此操作-嵌套列表是一種有效的方法。 要采用這種方法,您可能需要編寫一個將'e4'轉換為電路板上位置的函數,可能需要它為您進行實際查找。 下一步可能是使Board類成為它的一個方法(然后有一個move()方法,該方法將邏輯傳遞給代表每種棋子類型的對象)。

還有其他有效的解決方法,每種方法各有利弊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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