打印字符串,而不是字符数

Posted

技术标签:

【中文标题】打印字符串,而不是字符数【英文标题】:Printing string, not amount of characters 【发布时间】:2019-01-07 08:41:49 【问题描述】:

我正在努力工作,因为我是一名全新的编码员。好吧,我还没有学到很多东西,所以我正在做基本的代码。 我正在使用随机变量来打印变量附带的字符串,而不是字符串中的字符数。

对不起,如果有人生气了,但我似乎无法在任何地方找到解决此问题的方法,如果有,我一定是输入了错误的搜索

提前谢谢你。

代码:

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)

我希望它打印括号中的字符串,但它打印字符的数量,我不明白为什么。

【问题讨论】:

欢迎来到 SO,Doe 勋爵。你要打印Array吗? 是的,我是,但不是打印单词,而是打印字符。 您正在将字符串写入文件,这是有意的吗?如果只想随机打印其中一个字符串,则无需在打印前将其写入文件。 是的,这是有意的。我需要将它们全部放在一个文件中并打印变量。 【参考方案1】:

EFile.write(string) 的返回值是写入的字符数,而不是写入的内容。最好将要写入文件的所有内容存储在列表中。我还假设您想用换行符写每首歌曲的名称。此外,它不是强制性的,但不需要将变量名大写并且违反约定。

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)

这对于您的技能水平可能有点高级,但最好使用with 块来处理文件:

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

with 块自动关闭文件。

【讨论】:

【参考方案2】:
(...)
Efile=open("ExternalFile.txt","r")
lines_at = random.randrange(0, len(Array))
lines = Efile.readlines()
print(lines[lines_at])

此代码将起作用。

【讨论】:

【参考方案3】:
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)

我觉得这个代码更合适,因为我需要拆分字符串并只打印每首歌曲名称的第一个字符,因为它是一个代码猜谜游戏。

这是 Sheldon 建议的,我能够理解并使用它。

感谢您的帮助!

【讨论】:

高度建议您使用列表而不是 Info1Info2 等。从长远来看,它们更容易使用,并且不需要写出每一个EFile.write等。对于未来的项目,使用列表比声明许多变量要好得多。

以上是关于打印字符串,而不是字符数的主要内容,如果未能解决你的问题,请参考以下文章

Swift - JSON字符串打印\ n而不是新行

彩色字符串以相反的顺序打印而不是向前

在 python 中,如何打印不包含某个字符串的行,而不是打印包含某个字符串的行:

为啥打印 char* 会给出字符串而不是地址? [复制]

我实现 memset 的结果只打印更改,而不是整个结果字符串

打印随机字符而不是相同的字符[重复]