I have tried searching the manual for a simple action...
I want to store variables in an array, I found and implemented many ways of doing this
Creating the array
Creating the first elements is easy with variablesarray.append(list)
I can even read them back with variablesarray[x][y]
But I cannot for the life of me figure out how to change an element in the array
In my old basic world it was very simple variablesarray[x][y]=newvalue
How can I achieve this simple variable change in Python, what am I missing.
I am confident it will be something simple... but I have yet to discover it.
Pointers gratefully received...
And the more I experience them the more, I am impressed by the body of dedicated helpers (hero’s) in this forum. I hesitate to name names as there are many willing tutors/heros.
I only hope that the continuous drip feed of totally incompetent (really need help...often me!) and blindingly obviously lazy forum users don’t wear the hero’s out.
- Read and re read the Welcome Text
- Read the “extensive documentation”
- Make extensive use of the Examples
Only then come to the forum.. for answers
I recently read another clue, to solving your own problems.
Start simple, decompose the problem into smaller chunks., and resolve one chunk st a time.
Starting complex never helps anyone.... so Why oh Why do I always do it!
Recently I fell foul of my own Rule 1
Of course @omz would put how to give beta feedback in the Welcome text!
Spotted your pointer to the GitHub humberry UI Tutorial, excitedly skipped over to GitHub
As I really do want to “get” using pyui’s....
Aargh! New Brick Walls!
It may sound simple but how do I get a GitHub resident PYUI file to my iPad.
You cannot imagine what I have tried so far, including forking the Tutorial!
@omz Having downloaded the beta, the Calculator example now bombs with:
Traceback (most recent call last):
File "/var/containers/Bundle/Application/AA2AD925-136B-48E0-80AA-xxxxxxxxxxx/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/ui.py", line 412, in load_view
return load_view_str(json_str, bindings, stackframe, verbose=verbose)
File "/var/containers/Bundle/Application/AA2AD925-136B-48E0-80AA-Xxxxxxxxxxx/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/ui.py", line 398, in load_view_str
return _view_from_dict(root_view_dict, g, l, verbose=verbose)
File "/var/containers/Bundle/Application/AA2AD925-136B-48E0-80AA-xxxxxxxxxxxx/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/ui.py", line 379, in _view_from_dict
subview = _view_from_dict(d, f_globals, f_locals, verbose=verbose)
File "/var/containers/Bundle/Application/AA2AD925-136B-48E0-80AA-xxxxxxxxxxxx/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/ui.py", line 321, in _view_from_dict
_bind_action(v, attrs.get('action'), f_globals, f_locals, verbose=verbose)
TypeError: my_bind_action() got an unexpected keyword argument 'verbose'
(I xxxxxx’d out a part of my iPad I’d, I am that paranoid!)
I tried copying the calculator.pyui file from my non upgraded iPhone into my iPad in case I had corrupted the pyui file, I got the same error.
In my own very simple coding activities I have yet to bump into a beta error.
I posted here as I cannot find instructions on how to report beta problems. sorry...
OMG why did I try a read the manual, I found a part in the manual that showed me that *100 would not work!?
And yet it all did!
a=*100 print(a) a=1 print(a) a=a+1 print(a) b=['']*100 print(b) b='test' print(b) b=b+'again' print(b)
Btw I wasn’t trying to do a sort that was just a historical side comment, but thanks for the pointer, stored for future reference.
I wish to create a blank array of 100 elements
Where blank is either Integer 0 or Empty string ‘“” (two different use cases)
Then I wish to write to specific elements in the array
Either replacing the elements or adding/appending to them
Having read and re read the documents
I have not been able fathom how to accomplish these tasks.
I recall in Algol that this was a trivial task, it was how I ”cheated” doing a sort task,
According to my professor in doing a sort. He wanted a bubble sort.
I simply wrote the numbers into an array where n= array element, and then read them out
How!? In Python?
Is a command missing from the documentation?
.... love your blog comments.
Presumably someone sad thought they were clever writing a python script to Spam this forum.
Well done you’ve proved you can do it...
Otherwise I would appreciate if someone else with admin rights wrote a script to expunge these posts.
I’ll keep flagging them for moderation in the interim.
I have attempted to search this forum via Google, to answer the question.
No joy apart from some old posts stating that it is not possible.
Has anyone come up with a method for resolving this?
I can call a menu but have not figured out how to get text input.....
In a <Scene> script that places a series of emojis on the Node, it seems that even after I have removed the images, their ghost still remained.
I have solved the issue by the use of z-position.
But I can’t figure out why something that is removed and not visible, can be found on the node?
Also any one know how I can access the iPads emojis?
# coding: utf-8 from scene import * from random import choice, uniform, shuffle import sound from itertools import product from math import sqrt, pi A = Action ROWS = 3 COLS = 14 screen_size = min(get_screen_size())/2 #print(screen_size) center = (683,512) class ButtonNode (SpriteNode): def __init__(self, title, *args, **kwargs): SpriteNode.__init__(self, 'pzl:Button1', *args, **kwargs) button_font = ('Avenir Next', 20) self.title_label = LabelNode(title, font=button_font, color='black', position=(0, 1), parent=self) self.title = title print(self.title_label) return self.title_label class Object (SpriteNode): def __init__(self, img, col=0, row=0): SpriteNode.__init__(self, img, position=((col-0.5*col)*190+60, (row-0.5*row)*152+200)) self.img_name = img # image name self.title = img[4:] # img with 'emj:' stripped from name self.grid_pos = (col, row) # not used in this app self.i = col + (row * COLS) # not used in this app class MyScene (Scene): def setup(self): self.space = Node(parent=self) self.background_color = '#004f82' #self.center = self.size/2 self.img =  # List of 38 emoji picture names, eg 'emj:Alien' self.emojis =  # stores the emoji id's self.emoji_names =  # List of emoji names sripped of 'emj:' , not used to read emoji names self.emoji_original =  # Alpha list of the emoji names self.namesis =  # stores the label id's self.names_title =  self.touchdisabled = False post = (650, 970) self.show_title_label = self.show_message("Drag each emoji to it's correct title", pos = post, font = 48) self.img = ('emj:Alien', 'emj:Angry', 'emj:Confounded', 'emj:Cold_Sweat_1', 'emj:Cold_Sweat_2', 'emj:Crying_1', 'emj:Crying_2', 'emj:Disappointed', 'emj:Dizzy', 'emj:Fear_1', 'emj:Fear_2', 'emj:Flushed', 'emj:Grinning', 'emj:Imp', 'emj:Kissing_1', 'emj:Kissing_2', 'emj:Look_Of_Triumph', 'emj:Medical_Mask', 'emj:Relieved', 'emj:Pensive', 'emj:Pouting', 'emj:Relieved', 'emj:Sleepy', 'emj:Smiling_1', 'emj:Smiling_2', 'emj:Smiling_3', 'emj:Smiling_4', 'emj:Smiling_5', 'emj:Smiling_6', 'emj:Smirking', 'emj:Stuck-Out_Tongue_1', 'emj:Stuck-Out_Tongue_2', 'emj:Stuck-Out_Tongue_3', 'emj:Tears_Of_Joy', 'emj:Tired', 'emj:Unamused', 'emj:Weary', 'emj:Winking') # print(len(self.img)) for i, t in enumerate(self.img): # populates self.emoji_names self.emoji_names.append (t[4:]) self.emoji_original = self.emoji_names.copy() # creates the original alphabetic copy shuffle(self.emoji_names) # shuffled values of emojis for row, col in product(range(ROWS), range(COLS)): # paints emojis and populates list of 'emojis' id i = (row*COLS+col) if i > len(self.img)-1: break self.emojis.append(Object(self.img[i],col,row)) # emojis id's' self.space.add_child(self.emojis[i]) for r, c in product(range(10), range(4)): i = (r*4+c) if i > len(self.img)-1: break post = ((c-0.5*2)*350 + 500, 900-(r*50)) self.label=self.show_message(self.emoji_names[i], pos=post, font = 24) self.namesis.append(self.label) # print('namesis', self.namesis) def show_message(self, message, pos = (200, 600), font = 24): self.label = LabelNode(message, font=('American Typewriter', 24),position=pos) self.label.blend_mode = BLEND_ADD self.space.add_child(self.label) #print(label) #print('namesis in show message', self.namesis) return self.label def touch_began(self, touch): # print('touch began') self.touched_emoji = self.emojitouched(touch) # returns touched emoji id # print(self.touched_emoji.title) # prints title of emoji created in class Object def touch_moved(self, touch): if not self.touched_emoji: # ('no emoji near') print ('touched background') else: if self.touchdisabled == True: return else: self.touched_emoji.position = touch.location # print(self.touched_emoji.position) self.check_item_collisions() self.restart_touch() def emojitouched(self, touch): # Returns touched emoji touch_pos = self.space.point_from_scene(touch.location) for touched_emoji in self.emojis: if touched_emoji.frame.contains_point(touch_pos): # print('et', touched_emoji, touched_emoji.title, len(self.emojis), touch_pos) return touched_emoji def check_item_collisions(self): #print('collision check') for i, item in enumerate(self.namesis): item.z_position = 0.1 if item.frame.intersects(self.touched_emoji.frame): if self.touched_emoji.title == self.emoji_names[i]: self.touchdisabled = True self.emoji_names[i] = '' # why did I do this? self.touched_emoji.z_position = 0.5 item.z_position = 0.5 #self.touchdisabled = True sound.play_effect('digital:PepSound5') # print ('collision detected') item.run_action(A.sequence(A.move_to(700,100), A.scale_to(5, 0.1, TIMING_EASE_OUT_2), A.wait(2), A.fade_to(0.0, 0.15),A.remove())) self.touched_emoji.run_action(A.sequence(A.move_to(700,725), A.scale_to(9, 0.1, TIMING_EASE_OUT_2), A.wait(2), A.fade_to(0.0, 0.15), A.remove())) self.touched_emoji.z_position = 0.2 # This "hides" the emoji ghosts, not sure why they exist? # print('got one!') def restart_touch(self): self.touchdisabled = False run(MyScene(), show_fps=True)
@bennr01 Thank you muchly for taking the time to answer my musings.
I assure you, that your English is not the problem, in my comprehension of these concepts, it is much more my lack of understanding!
I will spend the time to extract the wisdom from your response. Thankyou!
Aargh, this may explain some other faux pas I have been making.
Why??! This feels very counter-intuitive changing the meaning of equals in this way.
I guess way back in the mists of time the original Python developer had a reason!
So actually the operator was the time traveller! (Or rather the temporal cloner!)
I had previously declared self.emoji.original = [ ] so I was confident it had its own object id
I am getting ever more convinced that I do not understand the operation of “self”
Can you point me to some text that would help me... it feels like self is not always self, and often self is “not defined’ when I know it had been!?
I would have preferred
B = A transferred contents of A to B just thus once
B == A results in B becoming the same as A for all time
But then I am just wishing that the Python Language understood me, rather than me having to understand it!
To be clear this only applies to lists right?
A = 1
B = A
A = 2
Won’t change B to 2
So, are there any other types of variables where the operators change what they do?
It would be useful to know now! Rather than be struggling with coding issues ;-)
From my early stumblings, I had come to the conclusion that ‘t’ was a Scene variable that correlates to elapsed time. The other related variable is dt.
The scene documentation confirms this:
The time (in seconds) that has passed since the last invocation of update(). You can use this to calculate the progress of custom animations.
The time (in seconds) that has passed since the scene was started. You can use this to calculate the progress of custom animations.
These four lines are in a def setup function
self.emoji_original = self.emoji_names print(self.emoji_original) # result is alphabetic as expected shuffle(self.emoji_names) print(self.emoji_names, self.emoji_original)``` Why does the second print show that both arrays have been shuffled?