1
votes

Impression de la chaîne, pas du nombre de caractères

J'essaie de travailler, car je suis un tout nouveau codeur. Eh bien, je n'ai pas beaucoup appris, donc je fais des codes de base. J'utilise une variable aléatoire pour imprimer la chaîne fournie avec la variable, pas le nombre de caractères dans la chaîne.

Désolé si quelqu'un s'énerve mais je n'arrive pas à trouver la solution à ce problème nulle part, et s'il y en a celui que je dois entrer la mauvaise recherche

Merci d'avance.

Code:

import random

EFile=open("ExternalFile.txt","w+")
Info1=EFile.write("Shotgun - George Ezra")
Info2=EFile.write("God's Plan - Drake")
Info3=EFile.write("This is me - Kiara Settle")
Info4=EFile.write("Solo - Clean Bandit")
Info5=EFile.write("Psyco - Post Malone")
EFile.close

Array=[Info1, Info2, Info3, Info4, Info5]


Efile=open("ExternalFile.txt","r")

RanVar=random.choice(Array)
print(RanVar)

Je veux qu'il imprime la chaîne, c'est-à-dire entre crochets, mais il imprime le nombre de caractères et je ne comprends pas pourquoi.


4 commentaires

Bienvenue à SO, Lord Doe. Essayez-vous d'imprimer Array ?


Oui, je suis mais au lieu d'imprimer les mots, il imprime les caractères.


Vous écrivez les chaînes dans un fichier, est-ce prévu? Si vous souhaitez simplement imprimer l'une des chaînes de manière aléatoire, vous n'avez pas besoin de l'écrire dans un fichier avant de l'imprimer.


Oui, c'est prévu. Je dois tous les avoir dans un fichier et imprimer les variables.


3 Réponses :


2
votes

La valeur de retour de

EFile.write (string) est le nombre de caractères écrits, pas ce qui a été écrit. Il est également préférable de stocker tout ce que vous souhaitez écrire dans le fichier dans une liste. Je suppose également que vous voulez écrire le nom de chaque chanson avec une nouvelle ligne. De plus, ce n'est pas obligatoire, mais il n'est pas nécessaire de mettre en majuscule les noms de variables et est contraire aux conventions.

with open("ExternalFile.txt", "w+") as efile:
    for song in songs:
        efile.write(song + "\n")

Cela peut être un peu avancé pour votre niveau de compétence, mais il est bon d'utiliser un avec un bloc pour travailler avec des fichiers:

import random

songs = ["Shotgun - George Ezra", "God's Plan - Drake", "This is me - Kiara Settle", "Solo - Clean Bandit", "Psyco - Post Malone"]

efile = open("ExternalFile.txt", "w+")

for song in songs:
    efile.write(song + "\n")

efile.close()

ran_var = random.choice(songs)
print(ran_var)

avec des blocs ferme le fichier automatiquement.


0 commentaires

0
votes
(...)
Efile=open("ExternalFile.txt","r")
lines_at = random.randrange(0, len(Array))
lines = Efile.readlines()
print(lines[lines_at])
This code will works.

0 commentaires

0
votes
import random

EFile=open("ExternalFile.txt","w+")

Info1=("Shotgun")
Info2=("God's Plan")
Info3=("This is me")
Info4=("Solo")
Info5=("Psyco")

EFile.write(Info1)
EFile.write(Info2)
EFile.write(Info3)
EFile.write(Info4)
EFile.write(Info5)
EFile.close

Array=[Info1, Info2, Info3, Info4, Info5]

RanVar=random.choice(Array)
print(RanVar)
I feel this code is more suitable, as further on I will need to split the strings and print just the 1st character of each song name as it is a code guessing game.This was suggested by Sheldon and I am able to understand and work with it.Thank you for the help though!

1 commentaires

Je fortement vous suggère d'utiliser une liste au lieu de Info1 , Info2 , etc. Ils sont BEAUCOUP plus faciles à utiliser à long terme et empêchent le besoin d'écrire chaque EFile.write , etc. Pour les projets futurs, utiliser une liste est bien mieux que de déclarer de nombreuses variables.