簡體   English   中英

為什么 Python 認為 return_value 是一個字符串?

[英]Why does Python believe return_value is a string?

以下代碼有什么問題?

class Dice:
    def roll_dice(x):
        import random
        return_value = '('
        try:
            y = int(x)
        except ValueError:
            return None
        for char in range(y):
            return_value += f'{random.randint(1, 6)}, '
        return_value = list(return_value).remove[-1 and -2]
        return_value = ''.join(str(e) for e in return_value)
        return return_value + ')'

parameter = input('Number of dice rolls: ')
print(Dice.roll_dice(parameter))

錯誤是

Traceback (most recent call last):
  File "C:/Users/MyName/PycharmProjects/ProjectName/filename.py", line 17, in <module>
    print(Dice.roll_dice(parameter))
  File "C:/Users/MyName/PycharmProjects/ProjectName/filename.py", line 11, in roll_dice
    return_value = list(return_value).remove[-1 and -2]
TypeError: 'builtin_function_or_method' object is not subscriptable

如果我正確理解 Python,它認為return_value是一個字符串。 但是我不是在第 11 行獲取了問題所在的return_value列表嗎? 這是如何運作的?

問題是remove[-1 and -2] remove是一個方法,所以它后面必須跟括號,而不是括號。 這就是不可下標的意思。

此外, -1 and -2不會按照您的想法執行,分別應用remove(-1)remove(-2)

類方法的第一個參數應命名為self ,但該類不是真正的類,因為從未使用過缺少的self 把它寫成一個普通的函數。 import屬於文件的開頭,而不是函數內部。 相反建設有額外的字符串,並把它轉換到一個列表,然后再返回一個字符串刪除它,你可以簡單地使用

return_value = return_value[:-2]

但最好不要首先創建一個字符串,而是一個列表:

import random

def roll_dice(x):
    try:
        y = int(x)
    except ValueError:
        return None
    values = []
    for _ in range(y):
        values.append(str(random.randint(1, 6)))
    return f'({", ".join(values)})'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM