Python中如何让变量存储数值 实现指定次数掷骰子功能
解决方案
类型转换实现方法
input() 函数默认返回字符串类型,你只需要用 int() 函数对输入结果做强制类型转换,就能得到数值类型的次数变量:
# 转换示例 num_of_time = int(input("How many times would you like to roll : "))
注意直接用 int() 转换如果用户输入非数字内容会直接报错,建议搭配异常捕获或者数字校验做输入合法性判断。
你原来想通过乘法重复执行打印语句的思路不可行,Python 里可调用对象不能直接和整数做乘法实现多次执行,你需要用循环来完成多次掷骰子操作,对应逻辑修改如下:
if answer == "yes": # 输入合法性校验 while True: num_of_time = input("你想要掷多少次: ") if num_of_time.isdigit() and int(num_of_time) > 0: num_of_time = int(num_of_time) break print("请输入合法的正整数") # 循环执行对应次数 for _ in range(num_of_time): d.diceroll() else: print("你太逊了")
更优的完整实现方案
原代码可以从这些维度优化:
- 封装通用的用户输入校验逻辑,减少重复代码,避免非法输入导致程序崩溃
- 骰子类的掷骰子方法改为返回点数而非直接打印,后续如果要对点数做处理(比如求和、统计)会更灵活
- 支持自定义骰子面数,扩展性更强
- 流程逻辑更完整,用户首次选择不掷骰子直接退出程序,不会继续走后续逻辑
优化后完整代码:
import random class DiceRoll: # 支持自定义骰子面数,默认是6面 def __init__(self, sides=6): self.sides = sides # 方法改为返回点数,而不是直接打印,灵活度更高 def roll(self): return random.randint(1, self.sides) def get_yes_no_input(prompt): """封装通用的yes/no输入校验方法""" while True: res = input(prompt).strip().lower() if res in ("yes", "no"): return res print("请输入 yes 或者 no") if __name__ == "__main__": d = DiceRoll() # 第一次掷骰子 first_answer = get_yes_no_input("你想要掷骰子吗? ") if first_answer == "yes": print(f"掷出点数:{d.roll()}") else: print("你太逊了") exit() # 多次掷骰子逻辑 again_answer = get_yes_no_input("你想要再掷几次吗? ") if again_answer == "yes": # 校验次数输入 while True: times_input = input("你想要掷多少次: ") if times_input.isdigit() and int(times_input) > 0: roll_times = int(times_input) break print("请输入大于0的正整数") # 批量掷骰子 print(f"开始掷{roll_times}次骰子:") for i in range(roll_times): print(f"第{i+1}次掷出:{d.roll()}") else: print("你太逊了")
内容的提问来源于stack exchange,提问作者Saju
相关产品推荐
相关产品推荐

