Forum >> Programmazione Python >> IDE ed Editor >> Programmare in python

Pagina: 1 2 Avanti

Salve, ho iniziato da poco ad approcciarmi a python, seguendo vari tutorial e leggendo varie guide e facendo piccole prove, andando anche a modificare qualche script per vedere i vari effetti... Ora stavo provando a scrivere qualcosa da solo, ma nn essendo un'esperto sono incappato in alcuni problemi:



ho creato un menu testuale, (gioca, aiuto, esci) guardando altri script ho visto che alcune funzioni le richiamano tramite altri script (tramite il comando import), ho cercato di ricreare la stessa cosa ma nn con i risultati sperati, mi mostra il contenuto testuale dentro lo script aiuto ma alla fine esce dal programma, invece io vorrei tornare indietro mi potete aiutare a capire come si fa?
ciao erik84

credo che sia doveroso da parte tua postare il codice di cui stai parli, compreso il risultato di cui dici che non ti soddisfa, se no diventa difficile aiutarti non credi?

hai ragione nn ci ho pensato :P
questo è il codice per il menu principale

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys
import os
import time
import random
import aiuto

###################
# Menu principale #
###################

def title_screen_options():
    option = input("> ")
    if option.lower() == ("gioca"):
        setup_game()
    elif option.lower() == ("aiuto"):
        aiuto.help_menu()
    elif option.lower() == ("esci"):
        sys.exit()
        while option.lower() not in ['gioca', 'aiuto', 'esci']:
            print("Comando invalido, riprova.")
            option = input("> ")
            if option.lower() == ("gioca"):
                setup_game()
            elif option.lower() ==("aiuto"):
                aiuto.help_menu()
            elif option.lower() == ("esci"):
                sys.exit()

def title_screen():
    #Clears the terminal of prior code for a properly formatted title screen.
    os.system('clear')
    #Prints the pretty title.
    print("                       .: Gioca :.                          ")
    print("                       .: Aiuto :.                          ")
    print("                       .: Esci  :.                          ")
    title_screen_options()

#################
# Game Handling #
#################

quitgame = 'esci'

title_screen()

questo invece è il codice della pagina che vado ad aprire su un'altro script
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import os
import time
import random

#############
# Help Menu #
#############

def help_menu():
    print("")
    print('#' * 60)
    print("Scritto da Erik")
    print("Versione Finale (0.0.1)")
    print("~" * 60)
    print("Prova di import script esterni")
    print('#' * 60)
    print("\n")
quando mi mostra questa pagina lo script si chiude e mi ritorna alla riga di comando del terminale, invece vorrei tornare al menu principale, ho provato ad importare lo script del menu principale aggiungendo (import menu) all'inizio e mettendo come ultima riga menu.title_screen_options() usando lo stesso procedimento che ho usato per richiamare l'aiuto ma mi genera degli errori di sintassi sia nel menu principale sia nell'aiuto.... Scusa l'impaginazione ma nn sono riuscito a sistemarla


--- Ultima modifica di erik84 in data 2019-01-24 06:48:15 ---
ciao erik84


dal codice che hai postato stai lavorando in linux giusto?

non sono molto esperto ma da quel che vedo ci sono alcune cose che io cambierei tipo:

1) "import aiuto" sei sicuro di questo modulo?

2) il while in quel punto non credo che ti serva essendo che una volta terminata l'esecuziona non verrà mai eseguito al limite lo dovresti rientrare

3) se ho capito bene quello che intendi fare dovresti inserire la stringa: "title_screen_options()" nel punto in cui ti interessa in modo da richiamarlo di nuovo

tienici aggiornato :ok:

L'ho iniziato su windows perché ero all'estero e nel pc aziendale c'è quello, adesso che sono a casa con Linux ho visto che per funzionare aveva bisogno di quelle due righe se no mi dava errori nelle frasi dove c'erano caratteri speciali...



Il nome del modulo sono sicuro perché il file l'ho chiamato così, corto e facile a scrivere e ricordare.




Il ciclo while a parte che era parte di un altro progetto nn scritto da me, serve se invece di scrivere correttamente gioca, aiuto, esci ti sbagli allora ti dice di controllare e riscrivere, almeno io lo intendo così...




Ho provato ad aggiungere nello script aiuto alla fine del testo title_screen_option() ma mi genera 2 righe di errore perché nn lo riconosce all'interno di quello script
per il ciclo while come già detto non credo che ti serva così come lo hai postato io fare in questo modo:

def title_screen_options():
	option = input("> ")
	if option.lower() == ("gioca"):
		setup_game()
	elif option.lower() == ("aiuto"):
		aiuto.help_menu()
	elif option.lower() == ("esci"):
		sys.exit()
	else:
		print("Comando invalido, riprova.")
		title_screen_options()

oppure se vuoi usare il while questa è un'alternativa:

def title_screen_options():
	option = input("> ")
	while option.lower() not in ["gioca", "aiuto", "esci"]:
		print("Comando invalido, riprova.")
		option = input("> ")
	if option.lower() == ("gioca"):
		setup_game()
	elif option.lower() == ("aiuto"):
		aiuto.help_menu()
	elif option.lower() == ("esci"):
		sys.exit()





--- Ultima modifica di pypy in data 2019-01-24 14:32:11 ---
Cosi si è ottimizzato il codice 😅... Grazie quello lo sistemo quando arrivo a casa
ottimo bastava sistemare quel ciclo while, per far funzionare il tutto :P ora nn esce più dal progetto e riesco a chiamare lo script aiuto senza crearmi problemi, posso fare una domanda a seguito di questo script? nn ho postato il codice completo ma solo la parte che volevo sistemare, ma se lancio il comando gioca partono una serie di domande a cui rispondere, solo che ho notato che se mentre scorre il testo (è fatto in modo che con un tempo definito compaiono le lettere in sequenza) premo invio la frase nn si completa nella stessa riga ma va a capo, c'è un modo per bloccare la funzione del tasto invio finchè nn è comparsa tutta la frase?



E' fatto in questa maniera:

question1 = "Ciao qual'è il tuo nome?\n"
    for character in question1:
    #This will occur throughout the intro code.  It allows the string to be typed gradually - like a typerwriter effect.
        sys.stdout.write(character)
        sys.stdout.flush()
        time.sleep(0.05)
    player_name = input("> ")
    player1.name = player_name

far prendere una piccola scossa a chi prova a premere invio ahahahah




skerzo ovviamente, sinceramente non l'ho mai fatta una cosa simile

come ti dicevo non sono molto esperto in python da poco lo uso

sui cicli etc è una cosa che facevo tempo fa quindi mi è rimasta





sfizioso come script il testo che scorre mi è piaciuto :ok:

lascio il campo a chi sicuramente ti saprà dare una risposta ;)

alla prossima :)

cercando in rete ho trovato questa soluzione che forse potrebbe fare a caso tuo

! ATTENZIONE HO LETTO CHE QUESTE OPERAZIONI SONO SCONSIGLIATE !

(dopo l'esecuzione del codice debbo sbloccare il tasto CTRL che risulta premuto)
from ctypes import *
windll.user32.BlockInput(True)

question1 = "Ciao qual'è il tuo nome?\n"
for character in question1:
	print(character, end="")
	time.sleep(0.05)

windll.user32.BlockInput(False)
questo ciclo for credo sia una buona alternativa per chi come me cerca di minimizzare

PS NON CONOSCO QUESTA LIBRERIA ED IL SUO FUNZIONAMENTO QUINDI NON

GARANTISCO NULLA E CHI LO USA LO FA NELLA SUA PIENA RESPONSABILITÀ

--- Ultima modifica di pypy in data 2019-01-25 14:01:38 ---


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.