【问题标题】:Trying to select a random word from a website Python 3.6尝试从网站 Python 3.6 中选择一个随机词
【发布时间】:2018-08-09 06:57:56
【问题描述】:

我正在制作一个“刽子手”游戏,并且想让 python 从网站中随机选择一个单词。但它一直打印为b'word',并且想知道如何解决这个问题,以便它只是一个字。

我的代码:

import random
import urllib.request
with urllib.request.urlopen('https://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain') as response:
   html = response.read()

word_list = html.split()
word_chocie = random.choice(word_list)
word = word_chocie.strip("b")
print(word)

我不断收到此错误,不知道如何解决:

Traceback (most recent call last):
  File "H:/hangman.py", line 23, in <module>
    word = word_chocie.strip("b")
TypeError: a bytes-like object is required, not 'str'

【问题讨论】:

  • 你试过了吗?斗争在哪里?什么不工作?如果你试过,请分享你得到的;如果没有 - StackOverflow 不是让别人为你写代码的地方。
  • 现在已经改变了。谢谢你让我知道:)
  • 现在看起来好多了。您需要等待具有足够声誉的人审核您的编辑,以便重新打开问题以接受答案。
  • html = response.read().decode('utf-8')代替html = response.read()。您不需要删除'b',它实际上不是字符串的一部分。看这里。 docs.python.org/3/library/urllib.request.html#examples
  • 我无法发布答案,因为它已关闭,但对于 Reversal 徽章来说已经成熟了 :)

标签: python python-3.x random


【解决方案1】:

您的代码的正确版本 - 问题是您使用的是 bytes 对象,而不是您可能预期的 str
我在从网站读取的内容中添加了.decode('utf-8'),现在html是str对象。
您收到错误是因为您正在处理 bytes 对象(word_chocie),如 str

请注意,word_chocie (b'hello') 中的 b 前缀是 python 的标记,表明该对象的类型为 bytes

import random
import urllib.request
with urllib.request.urlopen('https://svnweb.freebsd.org/csrg/share/dict/words?view=co&content-type=text/plain') as response:
    html = response.read().decode('utf-8')

word_list = html.split()
word_chocie = random.choice(word_list)
print(word_chocie)

【讨论】:

  • @C.Sa 太好了。由于答案对您有用,您应该通过单击复选标记 (V) accept 答案。它将问题标记为已回答并具有令人满意的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多