Tôi là một lập trình PHP khá thoải mái và có rất ít kinh nghiệm về Python. Tôi đang cố gắng giúp đỡ một người bạn với dự án của mình, mã này đủ dễ viết trong Php, tôi có phần lớn nó được chuyển qua, nhưng cần một chút trợ giúp để hoàn thành bản dịch nếu có thể. Mục tiêu là:Thực hiện bước nhảy vọt từ PhP tới Python
- Tạo một danh sách các đối tượng cơ bản với uid của
- ngẫu nhiên chọn một vài mục để tạo ra một danh sách thứ hai vừa khít với uid chứa thuộc tính mới.
- Kiểm tra giao lộ giữa hai danh sách để thay đổi phản hồi tương ứng.
Sau đây là một ví dụ làm việc về những gì tôi đang cố gắng để mã trong Python
<?php
srand(3234);
class Object{ // Basic item description
public $x =null;
public $y =null;
public $name =null;
public $uid =null;
}
class Trace{ // Used to update status or move position
# public $x =null;
# public $y =null;
# public $floor =null;
public $display =null; // Currently all we care about is controlling display
}
##########################################################
$objects = array();
$dirtyItems = array();
#CREATION OF ITEMS########################################
for($i = 0; $i < 10; $i++){
$objects[] = new Object();
$objects[$i]->uid = rand();
$objects[$i]->x = rand(1,30);
$objects[$i]->y = rand(1,30);
$objects[$i]->name = "Item$i";
}
##########################################################
#RANDOM ITEM REMOVAL######################################
foreach($objects as $item)
if(rand(1,10) <= 2){ // Simulate full code with 20% chance to remove an item.
$derp = new Trace();
$derp->display = false;
$dirtyItems[$item->uid] = $derp; //# <- THIS IS WHERE I NEED THE PYTHON HELP
}
##########################################################
display();
function display(){
global $objects, $dirtyItems;
foreach($objects as $key => $value){ // Iterate object list
if(@is_null($dirtyItems[$value->uid])) // Print description
echo "<br />$value->name is at ($value->x, $value->y) ";
else // or Skip if on second list.
echo "<br />Player took item $value->uid";
}
}
?>
Vì vậy, thực sự tôi có hầu hết nó được sắp xếp Tôi chỉ gặp rắc rối với phiên bản của một mảng Associative Python, để có danh sách có khóa khớp với số Mục duy nhất trong danh sách chính.
Kết quả của đoạn mã trên sẽ trông giống như:
Player took item 27955
Player took item 20718
Player took item 10277
Item3 is at (8, 4)
Item4 is at (11, 13)
Item5 is at (3, 15)
Item6 is at (20, 5)
Item7 is at (24, 25)
Item8 is at (12, 13)
Player took item 30326
kỹ năng Python của tôi vẫn là tất nhiên, nhưng đây là khoảng khối mã tương tự như trên. Tôi đã xem xét và cố gắng sử dụng các hàm danh sách .insert() hoặc .setitem() nhưng nó không hoạt động như mong đợi.
Đây là mã Python hiện tại của tôi, chưa đầy đủ chức năng
import random
import math
# Begin New Globals
dirtyItems = {} # This is where we store the object info
class SimpleClass: # This is what we store the object info as
pass
# End New Globals
# Existing deffinitions
objects = []
class Object:
def __init__(self,x,y,name,uid):
self.x = x # X and Y positioning
self.y = y #
self.name = name #What will display on a 'look' command.
self.uid = uid
def do_items():
global dirtyItems, objects
for count in xrange(10):
X=random.randrange(1,20)
Y=random.randrange(1,20)
UID = int(math.floor(random.random()*10000))
item = Object(X,Y,'Item'+str(count),UID)
try: #This is the new part, we defined the item, now we see if the player has moved it
if dirtyItems[UID]:
print 'Player took ', UID
except KeyError:
objects.append(item) # Back to existing code after this
pass # Any error generated attempting to access means that the item is untouched by the player.
# place_items()
random.seed(1234)
do_items()
for key in objects:
print "%s at %s %s." % (key.name, key.x, key.y)
if random.randint(1, 10) <= 1:
print key.name, 'should be missing below'
x = SimpleClass()
x.display = False
dirtyItems[key.uid]=x
print ' '
objects = []
random.seed(1234)
do_items()
for key in objects:
print "%s at %s %s." % (key.name, key.x, key.y)
print 'Done.'
Vì vậy, xin lỗi cho đăng bài dài, nhưng tôi muốn được thông qua và cung cấp cả hai bộ mã đầy đủ. PhP hoạt động hoàn hảo, và Python đã đóng. Nếu bất cứ ai có thể chỉ cho tôi theo đúng hướng nó sẽ là một trợ giúp rất lớn. dirtyItems.insert (key.uid, x) là những gì tôi cố gắng sử dụng để thực hiện một công việc danh sách như một mảng PGS
Edit: sửa chữa nhỏ.
cố gắng để sử dụng 'dirtyItems' là' dict' thay vì 'list'. Bạn có thể chèn một cặp giá trị khóa là 'dirtyItems [key] = value' – Netro
Điều này thật tuyệt vời, tôi nhận được nó bây giờ cảm ơn, tôi nghĩ thật thú vị về cơ bản mức độ thay đổi bao gồm ** chuyển [] thành {} ** và một vài sửa đổi nhỏ khác. Bây giờ tôi có thể tích hợp nó vào dự án chính để phát hành tiếp theo. – Toaster
Nếu bạn đang làm những việc như tập hợp giao nhau thì bạn nên tạo các đối tượng [hashable] (http://docs.python.org/2/reference/datamodel.html#object.__hash__) để họ có thể tham gia vào ' set'. –