Topic: Strighe concatenate su codecombat, non capisco una cosa.  (Letto 81 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline lelef77

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Ciao, sono di nuovo io :) ... sto proseguendo le esercitazioni su codecombat, e per risolvere un esercizio ho dovuto usare il sguente codice:


while True:
    enemy = hero.findNearestEnemy()                 #Cerca Nemici Visibili
    item = hero.findNearestItem()                   #Cerca Item Visibili
    if enemy:
        enemyPos = enemy.pos.x + " " + enemy.pos.y  #individua posizione nemici
        hero.say("Enemy at " + enemyPos)
    if item:
        itemPos = item.pos.x + " " + item.pos.y     #individua posizione Item
        hero.say("Item at " + itemPos)


Quello che mi è poco chiaro sono le virgolette " " all'interno di

enemyPos = enemy.pos.x + " " + enemy.pos.y  #individua posizione nemici
itemPos = item.pos.x + " " + item.pos.y     #individua posizione Item


Fino a questo momento per fare questa operazione usavo:


item = hero.findNearestItem()
if item: 
    pos = item.pos
    x = pos.x
    y = pos.y
    hero.moveXY(x, y)


Qual'è la differenza? quelle virgollette cosa indicano?

Grazie

Offline bebo

  • python erectus
  • ***
  • Post: 238
  • Punti reputazione: 0
    • Mostra profilo
    • bebo_sudo's personal homepage
Re:Strighe concatenate su codecombat, non capisco una cosa.
« Risposta #1 il: Maggio 28, 2019, 10:56 »
enemy.pos.x + " " + enemy.pos.y

Questa e' una string concatenation, cioe' stai prendendo la variabile enemy.pos.x, che DEVE essere una stringa, la incolli insieme ad uno spazio vuoto, e poi ci metti la componente y.
Ho scritto che DEVE essere una stringa perche' python non fa "magie" di conversioni tra tipi "diversi", ad es.:
Python 3.7.3 (default, May 11 2019, 00:45:16) 
[GCC 8.3.1 20190223 (Red Hat 8.3.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 3 + 5
8
>>> 3 + "5"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> "3" + "5"
'35'
>>> str(3) + "5"
'35'
>>> x, y = 3, 5
>>> x + " " + y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> x, y = str(3), str(5)
>>> x + " " + y
'3 5'
>>>


Vedi che quando mescoli interi e stringhe si arrabbia?


Poi quello che facciano quelle funzioni non lo so.
Immagino che hero.say sia una sorta di print per far parlare il tuo personaggio. Invece hero.move immagino faccia spostare un personaggio.
Quindi direi che hanno due significati molto diversi, il primo vuole una stringa per stamparla, il secondo vuole delle coordinate per sapere dove spostare il tuo personaggio (come stringhe o numeri penso sia uguale).

Offline lelef77

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:Strighe concatenate su codecombat, non capisco una cosa.
« Risposta #2 il: Maggio 29, 2019, 19:06 »
Ciao bebo,
grazie per la risposta... ma una domanda.... nel tuo esempio

>>> x, y = str(3), str(5)
>>> x + " " + y
'3 5'
# quindi in realtà "visualizzo" le 2 varibili x, y
# ma se invece faccio
>>> x+y
'35'

# che differenza c'è? se faccio  type,  mi dice che si tratta sempre di str.
>>> type (x+y)
<class 'str'>
>>> type (x + " " + y)
<class 'str'>
>>>




Offline bebo

  • python erectus
  • ***
  • Post: 238
  • Punti reputazione: 0
    • Mostra profilo
    • bebo_sudo's personal homepage
Re:Strighe concatenate su codecombat, non capisco una cosa.
« Risposta #3 il: Maggio 29, 2019, 23:49 »
Si tratta sempre di stringhe perche' sono realmente tutte stringhe! E te le stai unendo insieme con l'operatore +:

>>> x, y = "3", "5"
>>> type(x)
<class 'str'>
>>> type(y)
<class 'str'>
>>> x + "ciaone" + y
'3ciaone5'
>>>
>>> x + "dopomettounospazio" + " " + "equiriprendo" + y
'3dopomettounospazio equiriprendo5'


Quel " " non e' altro che uno spazio vuoto per separare i due oggetti, potresti mettere benissimo anche:
>>> "Contenuto variabile x: " + x + ", contenuto var y: " + y
'Contenuto variabile x: 3, contenuto var y: 5'


Quando scrivi in un interprete e non salvi niente in una variabile, python ti stampa, *per comodita'*, il contenuto di quell'oggetto, cosi' non devi ogni volta aggiungere print, cosi':
>>> print(x)
3

ma puoi semplicemente farti vedere l'oggetto:
>>> x
'3'


(in realta' se vedi bene, print non mette gli apici, perche' l'interprete non usa in realta' solamente un print, ma un print(repr(oggetto)), ma questi sono dettagli)


Cosa non ti torna nello specifico?

Offline lelef77

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:Strighe concatenate su codecombat, non capisco una cosa.
« Risposta #4 il: Maggio 30, 2019, 05:04 »
Ah ok.. praticamente quelle "" in questo caso equivalgono a uno spazio vuoto.. non capivo a cosa servissero  :)